pub struct BufBitReader<E: Endianness, WR: WordRead, RP: ReadParams = DefaultReadParams>where
WR::Word: DoubleType,{ /* private fields */ }
Expand description
An implementation of BitRead
and BitSeek
for a WordRead
and a
WordSeek
.
This implementation uses a bit buffer to store bits that are not yet read.
The buffer is sized as twice the word size of the underlying WordRead
.
Typically, the best choice is to have a buffer that is sized as usize
,
which means that the word of the underlying WordRead
should be half of
that (i.e., u32
for a 64-bit architecture). However, results will vary
depending on the CPU.
The peek word is equal to the bit buffer. The value returned
by peek_bits
contains at least as
many bits as the word size plus one (extended with zeros beyond end of
stream).
This implementation is usually faster than
BitReader
.
The additional type parameter RP
is used to select the parameters for the
instantanous codes, but the casual user should be happy with the default
value. See ReadParams
for more details.
For additional flexibility, this structures implements std::io::Read
.
Note that because of coherence rules it is not possible to implement
std::io::Read
for a generic BitRead
.
Implementations§
Source§impl<E: Endianness, WR: WordRead, RP: ReadParams> BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
impl<E: Endianness, WR: WordRead, RP: ReadParams> BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
Sourcepub fn new(backend: WR) -> Self
pub fn new(backend: WR) -> Self
Create a new BufBitReader
around a WordRead
.
§Example
use dsi_bitstream::prelude::*;
let words: [u32; 2] = [0x0043b59f, 0xccf16077];
let word_reader = MemWordReader::new(&words);
let mut buf_bit_reader = <BufBitReader<BE, _>>::new(word_reader);
Sourcepub fn into_inner(self) -> Result<WR, Infallible>
pub fn into_inner(self) -> Result<WR, Infallible>
Return the backend, consuming this reader.
Trait Implementations§
Source§impl<WR: WordRead, RP: ReadParams> BitRead<BigEndian> for BufBitReader<BE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead, RP: ReadParams> BitRead<BigEndian> for BufBitReader<BE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
type Error = <WR as WordRead>::Error
Source§type PeekWord = <<WR as WordRead>::Word as DoubleType>::DoubleType
type PeekWord = <<WR as WordRead>::Word as DoubleType>::DoubleType
Source§fn peek_bits(&mut self, n_bits: usize) -> Result<Self::PeekWord, Self::Error>
fn peek_bits(&mut self, n_bits: usize) -> Result<Self::PeekWord, Self::Error>
n
bits without advancing the stream position.
n
must be nonzero, and at most PeekWord::BITS
.Source§fn read_bits(&mut self, n_bits: usize) -> Result<u64, Self::Error>
fn read_bits(&mut self, n_bits: usize) -> Result<u64, Self::Error>
n
bits and return them in the lowest bits. Read moreSource§fn skip_bits(&mut self, n_bits: usize) -> Result<(), Self::Error>
fn skip_bits(&mut self, n_bits: usize) -> Result<(), Self::Error>
n
bits from the stream. Read morefn copy_to<F: Endianness, W: BitWrite<F>>( &mut self, bit_write: &mut W, n: u64, ) -> Result<(), CopyError<Self::Error, W::Error>>
Source§impl<WR: WordRead, RP: ReadParams> BitRead<LittleEndian> for BufBitReader<LE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead, RP: ReadParams> BitRead<LittleEndian> for BufBitReader<LE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
type Error = <WR as WordRead>::Error
Source§type PeekWord = <<WR as WordRead>::Word as DoubleType>::DoubleType
type PeekWord = <<WR as WordRead>::Word as DoubleType>::DoubleType
Source§fn peek_bits(&mut self, n_bits: usize) -> Result<Self::PeekWord, Self::Error>
fn peek_bits(&mut self, n_bits: usize) -> Result<Self::PeekWord, Self::Error>
n
bits without advancing the stream position.
n
must be nonzero, and at most PeekWord::BITS
.Source§fn read_bits(&mut self, n_bits: usize) -> Result<u64, Self::Error>
fn read_bits(&mut self, n_bits: usize) -> Result<u64, Self::Error>
n
bits and return them in the lowest bits. Read moreSource§fn skip_bits(&mut self, n_bits: usize) -> Result<(), Self::Error>
fn skip_bits(&mut self, n_bits: usize) -> Result<(), Self::Error>
n
bits from the stream. Read morefn copy_to<F: Endianness, W: BitWrite<F>>( &mut self, bit_write: &mut W, n: u64, ) -> Result<(), CopyError<Self::Error, W::Error>>
Source§impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E> + WordSeek<Error = E>, RP: ReadParams> BitSeek for BufBitReader<BE, WR, RP>where
WR::Word: DoubleType,
impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E> + WordSeek<Error = E>, RP: ReadParams> BitSeek for BufBitReader<BE, WR, RP>where
WR::Word: DoubleType,
Source§impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E> + WordSeek<Error = E>, RP: ReadParams> BitSeek for BufBitReader<LE, WR, RP>where
WR::Word: DoubleType,
impl<E: Error + Send + Sync + 'static, WR: WordRead<Error = E> + WordSeek<Error = E>, RP: ReadParams> BitSeek for BufBitReader<LE, WR, RP>where
WR::Word: DoubleType,
Source§impl<E: Endianness, WR: WordRead + Clone, RP: ReadParams> Clone for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
impl<E: Endianness, WR: WordRead + Clone, RP: ReadParams> Clone for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
Source§impl<E: Endianness, WR, RP: ReadParams> CopyType for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
WR: MemSize + WordRead,
<<WR as WordRead>::Word as DoubleType>::DoubleType: MemSize,
usize: MemSize,
PhantomData<(E, RP)>: MemSize,
impl<E: Endianness, WR, RP: ReadParams> CopyType for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
WR: MemSize + WordRead,
<<WR as WordRead>::Word as DoubleType>::DoubleType: MemSize,
usize: MemSize,
PhantomData<(E, RP)>: MemSize,
Source§impl<E: Debug + Endianness, WR: Debug + WordRead, RP: Debug + ReadParams> Debug for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
impl<E: Debug + Endianness, WR: Debug + WordRead, RP: Debug + ReadParams> Debug for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
Source§impl<WR: WordRead> DeltaRead<BigEndian> for BufBitReader<BigEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead> DeltaRead<BigEndian> for BufBitReader<BigEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§impl<WR: WordRead> DeltaRead<LittleEndian> for BufBitReader<LittleEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead> DeltaRead<LittleEndian> for BufBitReader<LittleEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§impl<WR: WordRead> GammaRead<BigEndian> for BufBitReader<BigEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead> GammaRead<BigEndian> for BufBitReader<BigEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§impl<WR: WordRead> GammaRead<LittleEndian> for BufBitReader<LittleEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead> GammaRead<LittleEndian> for BufBitReader<LittleEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§impl<E: Endianness, WR, RP: ReadParams> MemDbgImpl for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
WR: MemDbgImpl + WordRead,
<<WR as WordRead>::Word as DoubleType>::DoubleType: MemDbgImpl,
usize: MemDbgImpl,
PhantomData<(E, RP)>: MemDbgImpl,
impl<E: Endianness, WR, RP: ReadParams> MemDbgImpl for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
WR: MemDbgImpl + WordRead,
<<WR as WordRead>::Word as DoubleType>::DoubleType: MemDbgImpl,
usize: MemDbgImpl,
PhantomData<(E, RP)>: MemDbgImpl,
fn _mem_dbg_rec_on( &self, _memdbg_writer: &mut impl Write, _memdbg_total_size: usize, _memdbg_max_depth: usize, _memdbg_prefix: &mut String, _memdbg_is_last: bool, _memdbg_flags: DbgFlags, ) -> Result
fn _mem_dbg_depth_on( &self, writer: &mut impl Write, total_size: usize, max_depth: usize, prefix: &mut String, field_name: Option<&str>, is_last: bool, padded_size: usize, flags: DbgFlags, ) -> Result<(), Error>
Source§impl<E: Endianness, WR, RP: ReadParams> MemSize for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
WR: MemSize + WordRead,
<<WR as WordRead>::Word as DoubleType>::DoubleType: MemSize,
usize: MemSize,
PhantomData<(E, RP)>: MemSize,
impl<E: Endianness, WR, RP: ReadParams> MemSize for BufBitReader<E, WR, RP>where
WR::Word: DoubleType,
WR: MemSize + WordRead,
<<WR as WordRead>::Word as DoubleType>::DoubleType: MemSize,
usize: MemSize,
PhantomData<(E, RP)>: MemSize,
Source§impl<WR: WordRead, RP: ReadParams> Read for BufBitReader<BE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead, RP: ReadParams> Read for BufBitReader<BE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read moreSource§impl<WR: WordRead, RP: ReadParams> Read for BufBitReader<LE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead, RP: ReadParams> Read for BufBitReader<LE, WR, RP>where
WR::Word: DoubleType + UpcastableInto<u64>,
<<WR as WordRead>::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read moreSource§impl<WR: WordRead> ZetaRead<BigEndian> for BufBitReader<BigEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead> ZetaRead<BigEndian> for BufBitReader<BigEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
Source§impl<WR: WordRead> ZetaRead<LittleEndian> for BufBitReader<LittleEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
impl<WR: WordRead> ZetaRead<LittleEndian> for BufBitReader<LittleEndian, WR, DefaultReadParams>where
WR::Word: DoubleType + UpcastableInto<u64>,
<WR::Word as DoubleType>::DoubleType: CastableInto<u64>,
Auto Trait Implementations§
impl<E, WR, RP> Freeze for BufBitReader<E, WR, RP>where
<WR as WordRead>::Word: Sized,
WR: Freeze,
<<WR as WordRead>::Word as DoubleType>::DoubleType: Freeze,
impl<E, WR, RP> RefUnwindSafe for BufBitReader<E, WR, RP>where
<WR as WordRead>::Word: Sized,
WR: RefUnwindSafe,
<<WR as WordRead>::Word as DoubleType>::DoubleType: RefUnwindSafe,
E: RefUnwindSafe,
RP: RefUnwindSafe,
impl<E, WR, RP> Send for BufBitReader<E, WR, RP>
impl<E, WR, RP> Sync for BufBitReader<E, WR, RP>
impl<E, WR, RP> Unpin for BufBitReader<E, WR, RP>
impl<E, WR, RP> UnwindSafe for BufBitReader<E, WR, RP>where
<WR as WordRead>::Word: Sized,
WR: UnwindSafe,
<<WR as WordRead>::Word as DoubleType>::DoubleType: UnwindSafe,
E: UnwindSafe,
RP: UnwindSafe,
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, U> CastableInto<U> for Twhere
U: CastableFrom<T>,
impl<T, U> CastableInto<U> for Twhere
U: CastableFrom<T>,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<B> DeltaReadParam<BigEndian> for Bwhere
B: GammaReadParam<BigEndian>,
impl<B> DeltaReadParam<BigEndian> for Bwhere
B: GammaReadParam<BigEndian>,
Source§impl<B> DeltaReadParam<LittleEndian> for Bwhere
B: GammaReadParam<LittleEndian>,
impl<B> DeltaReadParam<LittleEndian> for Bwhere
B: GammaReadParam<LittleEndian>,
fn read_delta_param<const USE_DELTA_TABLE: bool, const USE_GAMMA_TABLE: bool>( &mut self, ) -> Result<u64, <B as BitRead<LittleEndian>>::Error>
Source§impl<T> DowncastableFrom<T> for T
impl<T> DowncastableFrom<T> for T
Source§fn downcast_from(value: T) -> T
fn downcast_from(value: T) -> T
Source§impl<T, U> DowncastableInto<U> for Twhere
U: DowncastableFrom<T>,
impl<T, U> DowncastableInto<U> for Twhere
U: DowncastableFrom<T>,
Source§impl<E, B> ExpGolombRead<E> for B
impl<E, B> ExpGolombRead<E> for B
Source§impl<B> GammaReadParam<BigEndian> for B
impl<B> GammaReadParam<BigEndian> for B
Source§impl<B> GammaReadParam<LittleEndian> for Bwhere
B: BitRead<LittleEndian>,
impl<B> GammaReadParam<LittleEndian> for Bwhere
B: BitRead<LittleEndian>,
fn read_gamma_param<const USE_TABLE: bool>( &mut self, ) -> Result<u64, <B as BitRead<LittleEndian>>::Error>
Source§impl<E, B> GolombRead<E> for Bwhere
E: Endianness,
B: BitRead<E>,
impl<E, B> GolombRead<E> for Bwhere
E: Endianness,
B: BitRead<E>,
Source§impl<T> MemDbg for Twhere
T: MemDbgImpl,
impl<T> MemDbg for Twhere
T: MemDbgImpl,
Source§fn mem_dbg(&self, flags: DbgFlags) -> Result<(), Error>
fn mem_dbg(&self, flags: DbgFlags) -> Result<(), Error>
Source§fn mem_dbg_on(
&self,
writer: &mut impl Write,
flags: DbgFlags,
) -> Result<(), Error>
fn mem_dbg_on( &self, writer: &mut impl Write, flags: DbgFlags, ) -> Result<(), Error>
core::fmt::Write
debug infos about the structure memory
usage, expanding all levels of nested structures.Source§fn mem_dbg_depth(&self, max_depth: usize, flags: DbgFlags) -> Result<(), Error>
fn mem_dbg_depth(&self, max_depth: usize, flags: DbgFlags) -> Result<(), Error>
mem_dbg
, but expanding only up to max_depth
levels of nested structures.Source§fn mem_dbg_depth_on(
&self,
writer: &mut impl Write,
max_depth: usize,
flags: DbgFlags,
) -> Result<(), Error>
fn mem_dbg_depth_on( &self, writer: &mut impl Write, max_depth: usize, flags: DbgFlags, ) -> Result<(), Error>
core::fmt::Write
debug infos about the structure memory
usage as mem_dbg_on
, but expanding only up to
max_depth
levels of nested structures.