pub struct BitBufferView<'a> { /* private fields */ }Expand description
An immutable, borrowed view over a packed bitset.
This is the borrowing analogue of BitBuffer: it stores a byte slice together with a bit
offset (always < 8) and a logical bit len, without owning or reference-counting the
backing allocation. Use it to read a bitset without cloning the underlying ByteBuffer.
Implementations§
Source§impl<'a> BitBufferView<'a>
impl<'a> BitBufferView<'a>
Sourcepub fn new(buffer: &'a [u8], len: usize) -> Self
pub fn new(buffer: &'a [u8], len: usize) -> Self
Create a new view over buffer with len bits, starting at bit zero.
Panics if the buffer is not large enough to hold len bits.
Sourcepub fn new_with_offset(buffer: &'a [u8], len: usize, offset: usize) -> Self
pub fn new_with_offset(buffer: &'a [u8], len: usize, offset: usize) -> Self
Create a new view over buffer with len bits, starting at the given bit offset.
Panics if the buffer is not large enough to hold len bits after the offset.
Sourcepub fn from_meta(buffer: &'a [u8], meta: BitBufferMeta) -> Self
pub fn from_meta(buffer: &'a [u8], meta: BitBufferMeta) -> Self
Create a new view over buffer described by meta.
Sourcepub fn meta(&self) -> BitBufferMeta
pub fn meta(&self) -> BitBufferMeta
Returns the BitBufferMeta (offset and length) describing this view.
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 view.
Sourcepub fn slice(&self, range: impl RangeBounds<usize>) -> BitBufferView<'a>
pub fn slice(&self, range: impl RangeBounds<usize>) -> BitBufferView<'a>
Create a new view over the range [start, end) of this view.
Panics if the slice would extend beyond the end of the view.
Sourcepub fn unaligned_chunks(&self) -> UnalignedBitChunk<'a>
pub fn unaligned_chunks(&self) -> UnalignedBitChunk<'a>
Access chunks of the buffer aligned to an 8 byte boundary as
[prefix, <full chunks>, suffix].
Sourcepub fn chunks(&self) -> BitChunks<'a>
pub fn chunks(&self) -> BitChunks<'a>
Access chunks of the underlying buffer as 8 byte chunks with a final trailer.
Sourcepub fn true_count(&self) -> usize
pub fn true_count(&self) -> usize
Get the number of set bits in the view.
Sourcepub fn false_count(&self) -> usize
pub fn false_count(&self) -> usize
Get the number of unset bits in the view.
Sourcepub fn select(&self, nth: usize) -> Option<usize>
pub fn select(&self, nth: usize) -> Option<usize>
Returns the position of the nth set bit (0-indexed), or None if out of range.
Sourcepub fn iter(&self) -> BitIterator<'a> ⓘ
pub fn iter(&self) -> BitIterator<'a> ⓘ
Iterator over bits in the view.
Sourcepub fn set_indices(&self) -> BitIndexIterator<'a> ⓘ
pub fn set_indices(&self) -> BitIndexIterator<'a> ⓘ
Iterator over set indices of the underlying buffer.
Sourcepub fn set_slices(&self) -> BitSliceIterator<'a> ⓘ
pub fn set_slices(&self) -> BitSliceIterator<'a> ⓘ
Iterator over set slices of the underlying buffer.
Sourcepub fn to_bit_buffer(&self) -> BitBuffer
pub fn to_bit_buffer(&self) -> BitBuffer
Copy this view into an owned BitBuffer.
Trait Implementations§
Source§impl<'a> Clone for BitBufferView<'a>
impl<'a> Clone for BitBufferView<'a>
Source§fn clone(&self) -> BitBufferView<'a>
fn clone(&self) -> BitBufferView<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl<'a> Copy for BitBufferView<'a>
Source§impl<'a> Debug for BitBufferView<'a>
impl<'a> Debug for BitBufferView<'a>
impl Eq for BitBufferView<'_>
Source§impl<'a> IntoIterator for BitBufferView<'a>
impl<'a> IntoIterator for BitBufferView<'a>
Source§impl PartialEq for BitBufferView<'_>
impl PartialEq for BitBufferView<'_>
Auto Trait Implementations§
impl<'a> Freeze for BitBufferView<'a>
impl<'a> RefUnwindSafe for BitBufferView<'a>
impl<'a> Send for BitBufferView<'a>
impl<'a> Sync for BitBufferView<'a>
impl<'a> Unpin for BitBufferView<'a>
impl<'a> UnsafeUnpin for BitBufferView<'a>
impl<'a> UnwindSafe for BitBufferView<'a>
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
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.