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_bool_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_bool_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>>());Initialize from a set of integers.
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::from_slice(&[0,5,9]);
assert_eq!(<BitVector as Into<Vec<bool>>>::into(bitvector), vec![true, false, false, false, false, true, false, false, false, true]);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;
let bitvector : BitVector = (0 .. 15).map(|x| x%3 == 0).into();
assert_eq!(bitvector.get(3), Some(true));
assert_eq!(bitvector.get(5), Some(false));
assert_eq!(bitvector.get(14), Some(false));
assert_eq!(bitvector.get(15), None);Directly return a bool instead of an Option
- If exists, return
true. - If doesn’t exist, return false.
- If index >= current.capacity, panic.
Examlpe:
use bitvector_simd::BitVector;
let bitvector : BitVector = (0 .. 15).map(|x| x%3 == 0).into();
assert_eq!(bitvector.get_unchecked(3), true);
assert_eq!(bitvector.get_unchecked(5), false);
assert_eq!(bitvector.get_unchecked(14), 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 ^ BExample:
use bitvector_simd::BitVector;
let bitvector: BitVector = (0 .. 5_000).map(|x| x % 2 == 0).into();
let bitvector2 : BitVector = (0 .. 5_000).map(|x| x % 3 == 0).into();
assert_eq!(bitvector.difference_cloned(&bitvector2) | bitvector2.difference_cloned(&bitvector), bitvector.xor_cloned(&bitvector2));
let bitvector3 : BitVector = (0 .. 5_000).map(|x| x % 2 == 0 && x % 3 != 0).into();
assert_eq!(bitvector.difference(bitvector2), bitvector3);inverse 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
Count the number of elements existing in this bitvector.
Example:
use bitvector_simd::BitVector;
let bitvector: BitVector = (0..10_000).map(|x| x%2==0).into();
assert_eq!(bitvector.count(), 5000);
let bitvector: BitVector = (0..30_000).map(|x| x%3==0).into();
assert_eq!(bitvector.count(), 10_000);Consume self and generate a Vec<bool> with length == self.capacity().
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::from_bool_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_bool_iterator((0..10).map(|i| i%3 == 0));
let usize_vec = bitvector.into_usizes();
assert_eq!(usize_vec, vec![0,3,6,9]);Only compare the first bits instead of the whole bitvector.
Require self and other are both no shorter than bits.
Example:
use bitvector_simd::BitVector;
let bitvector = BitVector::from_slice(&[1,3,5,7]);
let bitvector2 = BitVector::from_slice(&[1,3,5,9,10,15]);
// compare first 6 bits (0..=5)
assert!(bitvector.eq_left(&bitvector2, 6));
// compare first 8 bits (0..=7)
assert!(!bitvector.eq_left(&bitvector2, 8));
// any bits > 8 call panic.Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for BitVector
impl UnwindSafe for BitVector
Blanket Implementations
Mutably borrows from an owned value. Read more