Struct bitvector_simd::BitVector [−][src]
pub struct BitVector { /* fields omitted */ }Expand description
Representation of a BitVector
see the module’s document for examples and details.
Implementations
Create a empty bitvector with nbits initial elements.
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::zeros(10);
assert_eq!(bitvector.capacity(), 10);Create a bitvector from an Iterator of bool.
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::from_iterator((0..10).map(|x| x % 2 == 0));
assert_eq!(bitvector.capacity(), 10);
assert_eq!(<BitVector as Into<Vec<bool>>>::into(bitvector), vec![true, false, true, false, true, false, true, false, true, false]);
let bitvector = BitVector::from_iterator((0..1000).map(|x| x < 50));
assert_eq!(bitvector.capacity(), 1000);
assert_eq!(bitvector.get(49), Some(true));
assert_eq!(bitvector.get(50), Some(false));
assert_eq!(bitvector.get(999), Some(false));
assert_eq!(<BitVector as Into<Vec<bool>>>::into(bitvector), (0..1000).map(|x| x<50).collect::<Vec<bool>>());Max number of elements that this bitvector can have.
To get the number of elements, use count
Shrink the vector to length. All elements between [length .. self.capacity()] will be removed.
Panic if given length larger than current length.
Example:
use bitvector_simd::BitVector;
let mut bitvector = BitVector::ones(100);
assert_eq!(bitvector.capacity(), 100);
bitvector.shrink_to(10);
assert_eq!(bitvector.capacity(), 10);
// Now only contains [0 ..= 9]
assert_eq!(bitvector.get(9), Some(true));
assert_eq!(bitvector.get(10), None);Remove or add index to the set.
If index > self.capacity, the bitvector will be expanded to index.
Example:
use bitvector_simd::BitVector;
let mut bitvector = BitVector::zeros(10);
assert_eq!(bitvector.capacity(), 10);
bitvector.set(15, true);
// now 15 has been added to the set, its total capacity is 16.
assert_eq!(bitvector.capacity(), 16);
assert_eq!(bitvector.get(15), Some(true));
assert_eq!(bitvector.get(14), Some(false));Check if index exists in current set.
- If exists, return
Some(true) - If index < current.capacity and element doesn’t exist, return
Some(false). - If index >= current.capacity, return
None.
Examlpe:
use bitvector_simd::BitVector;
Directly return a bool instead of an Option
- If exists, return
true - If doesn’t exist or index >= current.capacity, retun
false
equals to self.get(index).unwrap_or(false)
difference operation
A.difference(B) calculates A\B, e.g.
A = [1,2,3], B = [2,4,5]
A\B = [1,3]also notice that
A.difference(B) & B.difference(A) == A ^ Binverse every bits in the vector.
If your bitvector have capacity 1_000 and contains [1,5],
after inverse it will contains 0, 2..=4, 6..=999
Consume self and generate a Vec<bool> with length == self.capacity().
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::from_iterator((0..10).map(|i| i % 3 == 0));
let bool_vec = bitvector.into_bools();
assert_eq!(bool_vec, vec![true, false, false, true, false, false, true, false, false, true])Consume self and geterate a Vec<usize> which only contains the number exists in this set.
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::from_iterator((0..10).map(|i| i%3 == 0));
let usize_vec = bitvector.into_usizes();
assert_eq!(usize_vec, vec![0,3,6,9]);Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for BitVector
impl UnwindSafe for BitVector
Blanket Implementations
Mutably borrows from an owned value. Read more