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 containing all 0 .. nbits elements.

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 ^ B

Example:

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);

return true if contains at least 1 element

return true if contains self.capacity elements

return true if set is empty

Return true if set is empty. Totally the same with self.none()

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

The resulting type after applying the & operator.

Performs the & operation. Read more

The resulting type after applying the | operator.

Performs the | operation. Read more

The resulting type after applying the ^ operator.

Performs the ^ operation. Read more

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Formats the value using the given formatter. Read more

Performs the conversion.

Performs the conversion.

Performs the conversion.

The returned type after indexing.

Performs the indexing (container[index]) operation. Read more

The resulting type after applying the ! operator.

Performs the unary ! operation. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Numeric cast from self to T.

Performs the conversion.

Numeric cast from T to Self.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

Converts the given value to a String. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.