Use SmallVec
in bitsets
This doesn't increase their size and means that we don't have to heap allocate for small sets.
This commit is contained in:
parent
66676820eb
commit
29c11327c7
@ -1,5 +1,6 @@
|
||||
use crate::vec::{Idx, IndexVec};
|
||||
use arrayvec::ArrayVec;
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use std::fmt;
|
||||
use std::iter;
|
||||
use std::marker::PhantomData;
|
||||
@ -111,7 +112,7 @@ pub fn intersect<Rhs>(&mut self, other: &Rhs) -> bool
|
||||
#[derive(Eq, PartialEq, Hash, Decodable, Encodable)]
|
||||
pub struct BitSet<T> {
|
||||
domain_size: usize,
|
||||
words: Vec<Word>,
|
||||
words: SmallVec<[Word; 2]>,
|
||||
marker: PhantomData<T>,
|
||||
}
|
||||
|
||||
@ -127,14 +128,15 @@ impl<T: Idx> BitSet<T> {
|
||||
#[inline]
|
||||
pub fn new_empty(domain_size: usize) -> BitSet<T> {
|
||||
let num_words = num_words(domain_size);
|
||||
BitSet { domain_size, words: vec![0; num_words], marker: PhantomData }
|
||||
BitSet { domain_size, words: smallvec![0; num_words], marker: PhantomData }
|
||||
}
|
||||
|
||||
/// Creates a new, filled bitset with a given `domain_size`.
|
||||
#[inline]
|
||||
pub fn new_filled(domain_size: usize) -> BitSet<T> {
|
||||
let num_words = num_words(domain_size);
|
||||
let mut result = BitSet { domain_size, words: vec![!0; num_words], marker: PhantomData };
|
||||
let mut result =
|
||||
BitSet { domain_size, words: smallvec![!0; num_words], marker: PhantomData };
|
||||
result.clear_excess_bits();
|
||||
result
|
||||
}
|
||||
@ -1571,7 +1573,7 @@ fn from(bit_set: BitSet<T>) -> Self {
|
||||
pub struct BitMatrix<R: Idx, C: Idx> {
|
||||
num_rows: usize,
|
||||
num_columns: usize,
|
||||
words: Vec<Word>,
|
||||
words: SmallVec<[Word; 2]>,
|
||||
marker: PhantomData<(R, C)>,
|
||||
}
|
||||
|
||||
@ -1584,7 +1586,7 @@ pub fn new(num_rows: usize, num_columns: usize) -> BitMatrix<R, C> {
|
||||
BitMatrix {
|
||||
num_rows,
|
||||
num_columns,
|
||||
words: vec![0; num_rows * words_per_row],
|
||||
words: smallvec![0; num_rows * words_per_row],
|
||||
marker: PhantomData,
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user