pub struct BitBuffer { /* private fields */ }Expand description
An immutable bitset stored as a packed byte buffer.
Implementations§
Source§impl BitBuffer
impl BitBuffer
Sourcepub fn new(buffer: ByteBuffer, len: usize) -> Self
pub fn new(buffer: ByteBuffer, len: usize) -> Self
Create a new BoolBuffer backed by a ByteBuffer with len bits in view.
Panics if the buffer is not large enough to hold len bits.
Sourcepub fn new_with_offset(buffer: ByteBuffer, len: usize, offset: usize) -> Self
pub fn new_with_offset(buffer: ByteBuffer, len: usize, offset: usize) -> Self
Create a new BoolBuffer backed by a ByteBuffer with len bits in view, starting at the
given offset (in bits).
Panics if the buffer is not large enough to hold len bits or if the offset is greater than
Sourcepub fn new_set(len: usize) -> Self
pub fn new_set(len: usize) -> Self
Create a new BoolBuffer of length len where all bits are set (true).
Sourcepub fn new_unset(len: usize) -> Self
pub fn new_unset(len: usize) -> Self
Create a new BoolBuffer of length len where all bits are unset (false).
Sourcepub fn full(value: bool, len: usize) -> Self
pub fn full(value: bool, len: usize) -> Self
Create a new BitBuffer of length len where all bits are set to value.
Sourcepub fn collect_bool<F: FnMut(usize) -> bool>(len: usize, f: F) -> Self
pub fn collect_bool<F: FnMut(usize) -> bool>(len: usize, f: F) -> Self
Invokes f with indexes 0..len collecting the boolean results into a new BitBuffer
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Get the logical length of this BoolBuffer.
This may differ from the physical length of the backing buffer, for example if it was
created using the new_with_offset constructor, or if it was sliced.
Sourcepub fn inner(&self) -> &ByteBuffer
pub fn inner(&self) -> &ByteBuffer
Get a reference to the underlying buffer.
Sourcepub fn value(&self, index: usize) -> bool
pub fn value(&self, index: usize) -> bool
Retrieve the value at the given index.
Panics if the index is out of bounds.
Sourcepub unsafe fn value_unchecked(&self, index: usize) -> bool
pub unsafe fn value_unchecked(&self, index: usize) -> bool
Retrieve the value at the given index without bounds checking
§SAFETY
Caller must ensure that index is within the range of the buffer
Sourcepub fn slice(&self, range: Range<usize>) -> Self
pub fn slice(&self, range: Range<usize>) -> Self
Create a new zero-copy slice of this BoolBuffer that begins at the start index and extends
for len bits.
Panics if the slice would extend beyond the end of the buffer.
Sourcepub fn shrink_offset(self) -> Self
pub fn shrink_offset(self) -> Self
Slice any full bytes from the buffer, leaving the offset < 8.
Sourcepub fn unaligned_chunks(&self) -> UnalignedBitChunk<'_>
pub fn unaligned_chunks(&self) -> UnalignedBitChunk<'_>
Access chunks of the buffer aligned to 8 byte boundary as [prefix, <full chunks>, suffix]
Sourcepub fn chunks(&self) -> BitChunks<'_>
pub fn chunks(&self) -> BitChunks<'_>
Access chunks of the underlying buffer as 8 byte chunks with a final trailer
If you’re performing operations on a single buffer, prefer BitBuffer::unaligned_chunks
Sourcepub fn true_count(&self) -> usize
pub fn true_count(&self) -> usize
Get the number of set bits in the buffer.
Sourcepub fn false_count(&self) -> usize
pub fn false_count(&self) -> usize
Get the number of unset bits in the buffer.
Sourcepub fn iter(&self) -> BitIterator<'_> ⓘ
pub fn iter(&self) -> BitIterator<'_> ⓘ
Iterator over bits in the buffer
Sourcepub fn set_indices(&self) -> BitIndexIterator<'_> ⓘ
pub fn set_indices(&self) -> BitIndexIterator<'_> ⓘ
Iterator over set indices of the underlying buffer
Sourcepub fn set_slices(&self) -> BitSliceIterator<'_> ⓘ
pub fn set_slices(&self) -> BitSliceIterator<'_> ⓘ
Iterator over set slices of the underlying buffer
Source§impl BitBuffer
impl BitBuffer
Sourcepub fn into_inner(self) -> ByteBuffer
pub fn into_inner(self) -> ByteBuffer
Consumes this BoolBuffer and returns the backing Buffer<u8> with any offset
and length information applied.
Sourcepub fn into_mut(self) -> BitBufferMut
pub fn into_mut(self) -> BitBufferMut
Get a mutable version of this BitBuffer along with bit offset in the first byte.
If the caller doesn’t hold only reference to the underlying buffer, a copy is created. The second value of the tuple is a bit_offset of the first value in the first byte
Trait Implementations§
Source§impl From<BitBuffer> for BooleanBuffer
impl From<BitBuffer> for BooleanBuffer
Source§impl From<BooleanBuffer> for BitBuffer
impl From<BooleanBuffer> for BitBuffer
Source§fn from(value: BooleanBuffer) -> Self
fn from(value: BooleanBuffer) -> Self
Source§impl FromIterator<bool> for BitBuffer
impl FromIterator<bool> for BitBuffer
Source§impl<'a> IntoIterator for &'a BitBuffer
impl<'a> IntoIterator for &'a BitBuffer
impl Eq for BitBuffer
Auto Trait Implementations§
impl !Freeze for BitBuffer
impl RefUnwindSafe for BitBuffer
impl Send for BitBuffer
impl Sync for BitBuffer
impl Unpin for BitBuffer
impl UnwindSafe for BitBuffer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.