Struct BitReader
struct BitReader<R: io::Read, E: Endianness> { ... }
For reading non-aligned bits from a stream of bytes in a given endianness.
This will read exactly as many whole bytes needed to return the requested number of bits. It may cache up to a single partial byte but no more.
Implementations
impl<R, E> BitReader<R, E>
fn seek_bits(self: &mut Self, from: SeekFrom) -> Result<u64>Example
use ; use ; let data = ; let mut reader = endian; assert_eq!; let pos = reader.seek_bits.unwrap; assert!; let pos = reader.seek_bits.unwrap; assert!; /// let pos = reader.seek_bits.unwrap; assert!;fn position_in_bits(self: &mut Self) -> Result<u64>Example
use read; use ; use ; let data = ; let mut reader = endian; assert_eq!; let _: i32 = reader.read_signed.unwrap; assert_eq!; reader.read_bit.unwrap; assert_eq!;
impl<R: io::Read, E: Endianness> BitReader<R, E>
fn new(reader: R) -> BitReader<R, E>Wraps a BitReader around something that implements
Readfn endian(reader: R, _endian: E) -> BitReader<R, E>Wraps a BitReader around something that implements
Readwith the given endianness.fn into_reader(self: Self) -> RUnwraps internal reader and disposes of BitReader.
Warning
Any unread partial bits are discarded.
fn reader(self: &mut Self) -> Option<&mut R>If stream is byte-aligned, provides mutable reference to internal reader. Otherwise returns
Nonefn into_bytereader(self: Self) -> ByteReader<R, E>Converts
BitReadertoByteReaderin the same endianness.Warning
Any unread partial bits are discarded.
fn bytereader(self: &mut Self) -> Option<ByteReader<&mut R, E>>If stream is byte-aligned, provides temporary
ByteReaderin the same endianness. Otherwise returnsNoneWarning
Any reader bits left over when
ByteReaderis dropped are lost.fn into_unread(self: Self) -> (u32, u8)Consumes reader and returns any un-read partial byte as a
(bits, value)tuple.Examples
use ; use ; let data = ; let mut reader = endian; assert_eq!; let = reader.into_unread; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; let = reader.into_unread; assert_eq!; assert_eq!;
impl<R, E> Freeze for BitReader<R, E>
impl<R, E> RefUnwindSafe for BitReader<R, E>
impl<R, E> Send for BitReader<R, E>
impl<R, E> Sync for BitReader<R, E>
impl<R, E> Unpin for BitReader<R, E>
impl<R, E> UnsafeUnpin for BitReader<R, E>
impl<R, E> UnwindSafe for BitReader<R, E>
impl<R: $crate::clone::Clone + io::Read, E: $crate::clone::Clone + Endianness> Clone for BitReader<R, E>
fn clone(self: &Self) -> BitReader<R, E>
impl<R: $crate::fmt::Debug + io::Read, E: $crate::fmt::Debug + Endianness> Debug for BitReader<R, E>
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl<R: io::Read, E: Endianness> BitRead for BitReader<R, E>
fn read_bit(self: &mut Self) -> Result<bool>Examples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!; assert_eq!;fn read<U>(self: &mut Self, bits: u32) -> Result<U> where U: NumericExamples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert!; // can't read 9 bits to u8 assert!; // can't read 17 bits to u16 assert!; // can't read 33 bits to u32 assert!; // can't read 65 bits to u64fn read_in<BITS: u32, U>(self: &mut Self) -> Result<U> where U: NumericExamples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;fn read_signed<S>(self: &mut Self, bits: u32) -> Result<S> where S: SignedNumericExamples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!;use ; use ; let data = ; let mut r = endian; assert!; // can't read 9 bits to i8 assert!; // can't read 17 bits to i16 assert!; // can't read 33 bits to i32 assert!; // can't read 65 bits to i64fn read_signed_in<BITS: u32, S>(self: &mut Self) -> Result<S> where S: SignedNumericExamples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!;fn read_to<V>(self: &mut Self) -> Result<V> where V: Primitivefn read_as_to<F, V>(self: &mut Self) -> Result<V> where F: Endianness, V: Primitivefn skip(self: &mut Self, bits: u32) -> Result<()>Examples
use ; use ; let data = ; let mut reader = endian; assert!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert!; assert_eq!;fn read_bytes(self: &mut Self, buf: &mut [u8]) -> Result<()>Example
use ; use ; let data = b"foobar"; let mut reader = endian; assert!; let mut buf = ; assert!; assert_eq!;fn read_unary0(self: &mut Self) -> Result<u32>Examples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;fn read_unary1(self: &mut Self) -> Result<u32>Examples
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;use ; use ; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;fn byte_aligned(self: &Self) -> boolExample
use ; use ; let data = ; let mut reader = endian; assert_eq!; assert!; assert_eq!; assert!; assert_eq!;fn byte_align(self: &mut Self)Example
use ; use ; let data = ; let mut reader = endian; assert_eq!; reader.byte_align; assert_eq!;
impl<R: io::Read, E: Endianness> HuffmanRead for BitReader<R, E>
fn read_huffman<T>(self: &mut Self, tree: &[ReadHuffmanTree<E, T>]) -> Result<T> where T: CloneExample
use ; use ; use compile_read_tree; let tree = compile_read_tree.unwrap; let data = ; let mut reader = endian; assert_eq!; assert_eq!; assert_eq!;
impl<T> Any for BitReader<R, E>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for BitReader<R, E>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for BitReader<R, E>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for BitReader<R, E>
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for BitReader<R, E>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for BitReader<R, E>
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for BitReader<R, E>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for BitReader<R, E>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for BitReader<R, E>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>