[−][src]Struct bv::BitVec
A bit-vector, akin to Vec<bool>
but packed.
BitVec
stores its bits in an array of Block
s, where Block
is given as a type parameter
that defaults to usize
. You might find that a different Block
size is preferable, but
only benchmarking will tell.
Several useful methods are exported in traits, rather than inherent to BitVec
. In
particular, see:
You will likely want to use
these traits (or bv::*
) when you use BitVec
.
Examples
use bv::BitVec; let mut bv: BitVec = BitVec::new(); assert_eq!(bv.len(), 0); bv.push(true); bv.push(false); bv.push(true); assert_eq!(bv.len(), 3); assert_eq!(bv[0], true); assert_eq!(bv[1], false); assert_eq!(bv[2], true);
Methods
impl<Block: BlockType> BitVec<Block>
[src]
pub fn new() -> Self
[src]
Creates a new, empty bit-vector with a capacity of one block.
Examples
use bv::BitVec; let mut bv: BitVec = BitVec::new(); assert_eq!(bv.len(), 0); bv.push(true); bv.push(false); bv.push(true); assert_eq!(bv.len(), 3); assert_eq!(bv[0], true); assert_eq!(bv[1], false); assert_eq!(bv[2], true);
pub fn with_capacity(nbits: u64) -> Self
[src]
Creates a new, empty bit-vector with the given bit capacity.
Examples
use bv::BitVec; let mut bv: BitVec<u16> = BitVec::with_capacity(20); assert_eq!(bv.capacity(), 32);
pub fn with_block_capacity(nblocks: usize) -> Self
[src]
Creates a new, empty bit-vector with the given block capacity.
Examples
use bv::BitVec; let mut bv: BitVec<u16> = BitVec::with_block_capacity(8); assert_eq!(bv.capacity(), 128);
pub fn new_fill(value: bool, len: u64) -> Self
[src]
Creates a new bit-vector of size len
, filled with all 0s or 1s
depending on value
.
Examples
use bv::*; let mut bv: BitVec<u64> = BitVec::new_fill(false, 100); assert_eq!( bv.get(0), false ); assert_eq!( bv.len(), 100 );
pub fn from_bits<B: Bits<Block = Block>>(bits: B) -> Self
[src]
Creates a new BitVec
from any value implementing the Bits
trait with
the same block type.
pub fn len(&self) -> u64
[src]
The number of bits in the bit-vector.
Examples
use bv::BitVec; let mut bv: BitVec = BitVec::new(); assert_eq!(bv.len(), 0); bv.push(false); assert_eq!(bv.len(), 1); bv.push(false); assert_eq!(bv.len(), 2); bv.push(false); assert_eq!(bv.len(), 3);
pub fn block_len(&self) -> usize
[src]
The number of blocks used by this bit-vector.
Examples
use bv::*; let mut bv: BitVec<u64> = BitVec::new_fill(false, 100); assert_eq!( bv.len(), 100 ); assert_eq!( bv.block_len(), 2 );
pub fn capacity(&self) -> u64
[src]
The capacity of the bit-vector in bits.
This is the number of bits that can be held without reallocating.
Examples
use bv::*; let bv: BitVec<u64> = bit_vec![false; 100]; assert_eq!( bv.len(), 100 ); assert_eq!( bv.capacity(), 128 );
Note that this example holds because bit_vec!
does not introduces excess
capacity.
pub fn block_capacity(&self) -> usize
[src]
The capacity of the bit-vector in blocks.
Examples
use bv::*; let bv: BitVec<u64> = BitVec::with_capacity(250); assert_eq!( bv.len(), 0 ); assert_eq!( bv.block_len(), 0 ); assert_eq!( bv.capacity(), 256 ); assert_eq!( bv.block_capacity(), 4 );
Note that this example holds because bit_vec!
does not introduces excess
capacity.
pub fn reserve(&mut self, additional: u64)
[src]
Adjust the capacity to hold at least additional
additional bits.
May reserve more to avoid frequent reallocations.
Examples
use bv::*; let mut bv: BitVec<u32> = bit_vec![ false, false, true ]; assert_eq!( bv.capacity(), 32 ); bv.reserve(100); assert!( bv.capacity() >= 103 );
pub fn block_reserve(&mut self, additional: usize)
[src]
Adjust the capacity to hold at least additional
additional blocks.
May reserve more to avoid frequent reallocations.
Examples
use bv::*; let mut bv: BitVec<u32> = bit_vec![ false, false, true ]; assert_eq!( bv.block_capacity(), 1 ); bv.block_reserve(3); assert!( bv.block_capacity() >= 4 );
pub fn reserve_exact(&mut self, additional: u64)
[src]
Adjust the capacity to hold at least additional
additional bits.
Examples
use bv::*; let mut bv: BitVec<u32> = bit_vec![ false, false, true ]; assert_eq!( bv.capacity(), 32 ); bv.reserve_exact(100); assert_eq!( bv.capacity(), 128 );
pub fn block_reserve_exact(&mut self, additional: usize)
[src]
Adjusts the capacity to at least additional
blocks beyond those used.
Examples
use bv::*; let mut bv: BitVec<u32> = bit_vec![ false, false, true ]; assert_eq!( bv.block_capacity(), 1 ); bv.block_reserve_exact(3); assert_eq!( bv.block_capacity(), 4 );
pub fn shrink_to_fit(&mut self)
[src]
Shrinks the capacity of the vector as much as possible.
Examples
use bv::BitVec; let mut bv: BitVec<u8> = BitVec::new(); for i in 0 .. 23 { bv.push(i % 3 == 0); } assert!(bv.capacity() >= 24); bv.shrink_to_fit(); assert_eq!(bv.capacity(), 24);
pub fn into_boxed_slice(self) -> Box<[Block]>
[src]
Converts the vector into Box<[Block]>
.
Note that this will not drop any excess capacity.
Examples
use bv::*; let bv: BitVec<u8> = bit_vec![true, true, false, false, true, false, true, false]; let bs = bv.into_boxed_slice(); assert!( bs.len() >= 1 ); assert_eq!( bs[0], 0b01010011 );
pub fn truncate(&mut self, len: u64)
[src]
Shortens the vector, keeping the first len
elements and dropping the rest.
If len
is greater than the vector's current length, this has no effect.
Note that this method has no effect on the capacity of the bit-vector.
Examples
use bv::*; let mut v1: BitVec = bit_vec![ true, true, false, false ]; let v2: BitVec = bit_vec![ true, true ]; assert_ne!( v1, v2 ); v1.truncate(2); assert_eq!( v1, v2 );
pub fn resize(&mut self, len: u64, value: bool)
[src]
Resizes the bit-vector, filling with value
if it has to grow.
Examples
use bv::*; let v1: BitVec = bit_vec![ true, true, false, false ]; let mut v2: BitVec = bit_vec![ true, true ]; let mut v3: BitVec = bit_vec![ true, true ]; v2.resize(4, false); v3.resize(4, true); assert_eq!( v1, v2 ); assert_ne!( v1, v3 );
pub fn as_slice(&self) -> BitSlice<Block>
[src]
Gets a slice to a BitVec
.
Examples
use bv::*; let bv: BitVec = bit_vec![true, false, true]; let slice = bv.as_slice(); assert_eq!( slice.len(), 3 ); assert_eq!( slice[0], true ); assert_eq!( slice[1], false ); assert_eq!( slice[2], true );
pub fn as_mut_slice(&mut self) -> BitSliceMut<Block>
[src]
Gets a mutable slice to a BitVec
.
Examples
use bv::*; let mut bv: BitVec = bit_vec![true, false, true]; { let mut slice = bv.as_mut_slice(); slice.set_bit(1, true); } assert_eq!( bv[1], true );
pub fn get(&self, position: u64) -> bool
[src]
Gets the value of the bit at the given position.
This is an alias for Bits::get_bit
.
Panics
If the position is out of bounds.
pub fn set(&mut self, position: u64, value: bool)
[src]
Sets the value of the bit at the given position.
This is an alias for BitsMut::set_bit
.
Panics
If the position is out of bounds.
pub fn push(&mut self, value: bool)
[src]
Adds the given bool
to the end of the bit-vector.
Examples
use bv::*; let mut bv0: BitVec = bit_vec![ ]; let bv1: BitVec = bit_vec![ true ]; let bv2: BitVec = bit_vec![ true, false ]; let bv3: BitVec = bit_vec![ true, false, true ]; assert_ne!( bv0, bv1 ); assert_ne!( bv0, bv2 ); assert_ne!( bv0, bv3 ); bv0.push(true); assert_eq!( bv0, bv1 ); bv0.push(false); assert_eq!( bv0, bv2 ); bv0.push(true); assert_eq!( bv0, bv3 );
pub fn pop(&mut self) -> Option<bool>
[src]
Removes and returns the last element of the bit-vector, or None
if empty.
Examples
use bv::*; let mut bv: BitVec = bit_vec![ true, false, true ]; assert_eq!( bv.pop(), Some(true) ); assert_eq!( bv.pop(), Some(false) ); assert_eq!( bv.pop(), Some(true) ); assert_eq!( bv.pop(), None );
pub fn clear(&mut self)
[src]
Removes all elements from the bit-vector.
Does not change the capacity.
Examples
use bv::*; let mut bv: BitVec<u32> = bit_vec![ true ]; assert_eq!( bv.len(), 1 ); assert_eq!( bv.capacity(), 32 ); bv.clear(); assert_eq!( bv.len(), 0 ); assert_eq!( bv.capacity(), 32 );
pub fn is_empty(&self) -> bool
[src]
Does the bit-vector have no elements?
Examples
use bv::*; let mut bv: BitVec<u32> = bit_vec![ true ]; assert!( !bv.is_empty() ); bv.clear(); assert!( bv.is_empty() );
Trait Implementations
impl<Block: BlockType> Bits for BitVec<Block>
[src]
type Block = Block
The underlying block type used to store the bits of the vector.
fn bit_len(&self) -> u64
[src]
fn get_bit(&self, position: u64) -> bool
[src]
fn get_block(&self, position: usize) -> Block
[src]
fn get_raw_block(&self, position: usize) -> Block
[src]
fn block_len(&self) -> usize
[src]
fn get_bits(&self, start: u64, count: usize) -> Self::Block
[src]
fn to_bit_vec(&self) -> BitVec<Self::Block>
[src]
impl<Block: BlockType> BitsMut for BitVec<Block>
[src]
fn set_bit(&mut self, position: u64, value: bool)
[src]
fn set_block(&mut self, position: usize, value: Block)
[src]
fn set_bits(&mut self, start: u64, count: usize, value: Self::Block)
[src]
impl<Block: BlockType> BitsPush for BitVec<Block>
[src]
fn push_bit(&mut self, value: bool)
[src]
fn pop_bit(&mut self) -> Option<bool>
[src]
fn align_block(&mut self, value: bool)
[src]
fn push_block(&mut self, value: Block)
[src]
impl<'a, Block: BlockType> BitSliceable<Range<u64>> for &'a BitVec<Block>
[src]
type Slice = BitSlice<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: Range<u64>) -> BitSlice<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<Range<u64>> for &'a mut BitVec<Block>
[src]
type Slice = BitSliceMut<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: Range<u64>) -> BitSliceMut<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeInclusive<u64>> for &'a BitVec<Block>
[src]
type Slice = BitSlice<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeInclusive<u64>) -> BitSlice<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeInclusive<u64>> for &'a mut BitVec<Block>
[src]
type Slice = BitSliceMut<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeInclusive<u64>) -> BitSliceMut<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeFrom<u64>> for &'a BitVec<Block>
[src]
type Slice = BitSlice<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeFrom<u64>) -> BitSlice<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeFrom<u64>> for &'a mut BitVec<Block>
[src]
type Slice = BitSliceMut<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeFrom<u64>) -> BitSliceMut<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeTo<u64>> for &'a BitVec<Block>
[src]
type Slice = BitSlice<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeTo<u64>) -> BitSlice<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeTo<u64>> for &'a mut BitVec<Block>
[src]
type Slice = BitSliceMut<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeTo<u64>) -> BitSliceMut<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeToInclusive<u64>> for &'a BitVec<Block>
[src]
type Slice = BitSlice<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeToInclusive<u64>) -> BitSlice<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeToInclusive<u64>> for &'a mut BitVec<Block>
[src]
type Slice = BitSliceMut<'a, Block>
The type of the slice produced.
fn bit_slice(self, range: RangeToInclusive<u64>) -> BitSliceMut<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeFull> for &'a BitVec<Block>
[src]
type Slice = BitSlice<'a, Block>
The type of the slice produced.
fn bit_slice(self, _: RangeFull) -> BitSlice<'a, Block>
[src]
impl<'a, Block: BlockType> BitSliceable<RangeFull> for &'a mut BitVec<Block>
[src]
type Slice = BitSliceMut<'a, Block>
The type of the slice produced.
fn bit_slice(self, _: RangeFull) -> BitSliceMut<'a, Block>
[src]
impl<Block: BlockType> From<Box<[Block]>> for BitVec<Block>
[src]
impl<Block: BlockType> From<Vec<Block>> for BitVec<Block>
[src]
impl<Block: Clone + BlockType> Clone for BitVec<Block>
[src]
impl<Block: BlockType> Default for BitVec<Block>
[src]
impl<Block: BlockType> Eq for BitVec<Block>
[src]
impl<Block: BlockType> Ord for BitVec<Block>
[src]
fn cmp(&self, other: &Self) -> Ordering
[src]
fn max(self, other: Self) -> Self
1.21.0[src]
fn min(self, other: Self) -> Self
1.21.0[src]
fn clamp(self, min: Self, max: Self) -> Self
[src]
impl<Other: Bits> PartialEq<Other> for BitVec<Other::Block>
[src]
impl<Block: BlockType> PartialOrd<BitVec<Block>> for BitVec<Block>
[src]
fn partial_cmp(&self, other: &BitVec<Block>) -> Option<Ordering>
[src]
#[must_use]
fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]
fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]
fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]
fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<Block: BlockType> Debug for BitVec<Block>
[src]
impl<Block: BlockType> Index<u64> for BitVec<Block>
[src]
impl<Block: BlockType + Hash> Hash for BitVec<Block>
[src]
Auto Trait Implementations
impl<Block> Send for BitVec<Block> where
Block: Send,
Block: Send,
impl<Block> Sync for BitVec<Block> where
Block: Sync,
Block: Sync,
impl<Block> Unpin for BitVec<Block>
impl<Block> UnwindSafe for BitVec<Block> where
Block: UnwindSafe,
Block: UnwindSafe,
impl<Block> RefUnwindSafe for BitVec<Block> where
Block: RefUnwindSafe,
Block: RefUnwindSafe,
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,