Trait bv::BlockType[][src]

pub trait BlockType: Copy + PartialEq + Ord + BitAnd<Output = Self> + BitOr<Output = Self> + BitXor<Output = Self> + Not<Output = Self> + Shl<usize, Output = Self> + Shr<usize, Output = Self> + Sub<Output = Self> {
Show methods fn wrapping_shl(self, shift: u32) -> Self;
fn wrapping_sub(self, other: Self) -> Self;
fn leading_zeros(self) -> usize;
fn to_usize(self) -> Option<usize>;
fn zero() -> Self;
fn one() -> Self; fn nbits() -> usize { ... }
fn div_nbits(index: u64) -> usize { ... }
fn checked_div_nbits(index: u64) -> Option<usize> { ... }
fn ceil_div_nbits(index: u64) -> usize { ... }
fn checked_ceil_div_nbits(index: u64) -> Option<usize> { ... }
fn mod_nbits(index: u64) -> usize { ... }
fn mul_nbits(index: usize) -> u64 { ... }
fn block_bits(len: u64, position: usize) -> usize { ... }
fn lg_nbits() -> usize { ... }
fn lg_nbits_mask<Result: BlockType>() -> Result { ... }
fn low_mask(element_bits: usize) -> Self { ... }
fn nth_mask(bit_index: usize) -> Self { ... }
fn get_bit(self, bit_index: usize) -> bool { ... }
fn with_bit(self, bit_index: usize, bit_value: bool) -> Self { ... }
fn get_bits(self, start: usize, len: usize) -> Self { ... }
fn with_bits(self, start: usize, len: usize, value: Self) -> Self { ... }
fn ceil_lg(self) -> usize { ... }
fn floor_lg(self) -> usize { ... }
}
Expand description

Interface to primitive bit storage.

Types implementing this trait can be used as the blocks of a bit-vector.

Required methods

A shift-left operation that does not overflow.

A subtraction operation that does not overflow.

Returns the number of leading zero bits in the given number.

Converts the number to a usize, if it fits.

Returns 0.

Returns 1.

Provided methods

The number of bits in a block.

Returns index / Self::nbits(), computed by shifting.

This is intended for converting a bit address into a block address, which is why it takes u64 and returns usize. There is no check that the result actually fits in a usize, so this should only be used when index is already known to be small enough.

Returns index / Self::nbits(), computed by shifting.

This is intended for converting a bit address into a block address, which is why it takes u64 and returns usize. It can only fail (returning None) if usize is 32 bits.

Returns index / Self::nbits() rounded up, computed by shifting.

This is intended for converting a bit size into a block size, which is why it takes u64 and returns usize.

Returns index / Self::nbits() rounded up, computed by shifting.

This is intended for converting a bit size into a block size, which is why it takes u64 and returns usize. There is no check that the result actually fits in a usize, so this should only be used when index is already known to be small enough.

Returns index % Self::nbits(), computed by masking.

This is intended for converting a bit address into a bit offset within a block, which is why it takes u64 and returns usize.

Returns index * Self::nbits(), computed by shifting.

This is intended for converting a block address into a bit address, which is why it takes a usize and returns a u64.

The number of bits in the block at position, given a total bit length of len.

This will be Self::nbits() for all but the last block, for which it may be less.

Precondition

position * Self::nbits() <= len, or the block doesn’t exist and the result is undefined.

Log-base-2 of the number of bits in a block.

Mask with the lowest-order lg_nbits() set.

The bit mask consisting of Self::nbits() - element_bits zeroes followed by element_bits ones.

The default implementation has a branch, but should be overrided with a branchless algorithm if possible.

Precondition

element_bits <= Self::nbits()

The bit mask with the bit_indexth bit set.

Bits are indexed in little-endian style based at 0.

Precondition

bit_index < Self::nbits()

Extracts the value of the bit_indexth bit.

Panics

Panics if bit_index is out of bounds.

Functionally updates the value of the bit_indexth bit to bit_value.

Panics

Panics if bit_index is out of bounds.

Extracts len bits starting at bit offset start.

Panics

Panics of the bit span is out of bounds.

Functionally updates len bits to value starting at offset start.

Panics

Panics of the bit span is out of bounds.

Returns the smallest number n such that 2.pow(n) >= self.

Returns the largest number n such that 2.pow(n) <= self.

Implementations on Foreign Types

Implementors