Struct MemWordReader

Source
pub struct MemWordReader<W: Word, B: AsRef<[W]>, const INF: bool = true> { /* private fields */ }
Expand description

An implementation of WordRead and WordSeek for a slice.

The implementation depends on the INF parameter: if true, the reader will behave as if the slice is infinitely extended with zeros. If false, the reader will return an error when reading beyond the end of the slice. You can create a zero-extended reader with MemWordReader::new and a strict reader with MemWordReader::new_strict.

The zero-extended reader is usually much faster than the strict reader, but it might loop infinitely when reading beyond the end of the slice.

§Examples

use dsi_bitstream::prelude::*;

let words: [u32; 2] = [1, 2];

let mut word_reader = MemWordReader::new(&words);
assert_eq!(1, word_reader.read_word()?);
assert_eq!(2, word_reader.read_word()?);
assert_eq!(0, word_reader.read_word()?);
assert_eq!(0, word_reader.read_word()?);

let mut word_reader = MemWordReader::new_strict(&words);
assert_eq!(1, word_reader.read_word()?);
assert_eq!(2, word_reader.read_word()?);
assert!(word_reader.read_word().is_err());

Implementations§

Source§

impl<W: Word, B: AsRef<[W]>> MemWordReader<W, B>

Source

pub fn new(data: B) -> Self

Create a new MemWordReader from a slice of data

Source

pub fn into_inner(self) -> B

Source§

impl<W: Word, B: AsRef<[W]>> MemWordReader<W, B, false>

Source

pub fn new_strict(data: B) -> Self

Create a new MemWordReader from a slice of data

Trait Implementations§

Source§

impl<W: Clone + Word, B: Clone + AsRef<[W]>, const INF: bool> Clone for MemWordReader<W, B, INF>

Source§

fn clone(&self) -> MemWordReader<W, B, INF>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<W: Word, B, const INF: bool> CopyType for MemWordReader<W, B, INF>

Source§

impl<W: Debug + Word, B: Debug + AsRef<[W]>, const INF: bool> Debug for MemWordReader<W, B, INF>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<W: Word, B, const INF: bool> MemDbgImpl for MemWordReader<W, B, INF>

Source§

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

Source§

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<W: Word, B, const INF: bool> MemSize for MemWordReader<W, B, INF>

Source§

fn mem_size(&self, _memsize_flags: SizeFlags) -> usize

Returns the (recursively computed) overall memory size of the structure in bytes.
Source§

impl<W: PartialEq + Word, B: PartialEq + AsRef<[W]>, const INF: bool> PartialEq for MemWordReader<W, B, INF>

Source§

fn eq(&self, other: &MemWordReader<W, B, INF>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<W: Word, B: AsRef<[W]>> WordRead for MemWordReader<W, B, true>

Source§

type Error = Infallible

Source§

type Word = W

The word type (the type of the result of WordRead::read_word).
Source§

fn read_word(&mut self) -> Result<W, Infallible>

Read a word and advance the current position.
Source§

impl<W: Word, B: AsRef<[W]>> WordRead for MemWordReader<W, B, false>

Source§

type Error = Error

Source§

type Word = W

The word type (the type of the result of WordRead::read_word).
Source§

fn read_word(&mut self) -> Result<W, Error>

Read a word and advance the current position.
Source§

impl<W: Word, B: AsRef<[W]>> WordSeek for MemWordReader<W, B, true>

Source§

type Error = Infallible

Source§

fn word_pos(&mut self) -> Result<u64, Infallible>

Get the current position in words from the start of the file.
Source§

fn set_word_pos(&mut self, word_index: u64) -> Result<(), Infallible>

Set the current position in words from the start of the file to word_pos.
Source§

impl<W: Word, B: AsRef<[W]>> WordSeek for MemWordReader<W, B, false>

Source§

type Error = Error

Source§

fn word_pos(&mut self) -> Result<u64, Error>

Get the current position in words from the start of the file.
Source§

fn set_word_pos(&mut self, word_index: u64) -> Result<(), Error>

Set the current position in words from the start of the file to word_pos.
Source§

impl<W: Word, B: AsRef<[W]>, const INF: bool> StructuralPartialEq for MemWordReader<W, B, INF>

Auto Trait Implementations§

§

impl<W, B, const INF: bool> Freeze for MemWordReader<W, B, INF>
where B: Freeze,

§

impl<W, B, const INF: bool> RefUnwindSafe for MemWordReader<W, B, INF>

§

impl<W, B, const INF: bool> Send for MemWordReader<W, B, INF>
where B: Send,

§

impl<W, B, const INF: bool> Sync for MemWordReader<W, B, INF>
where B: Sync,

§

impl<W, B, const INF: bool> Unpin for MemWordReader<W, B, INF>
where B: Unpin, W: Unpin,

§

impl<W, B, const INF: bool> UnwindSafe for MemWordReader<W, B, INF>
where B: UnwindSafe, W: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CastableFrom<T> for T

Source§

fn cast_from(value: T) -> T

Call Self as W
Source§

impl<T, U> CastableInto<U> for T
where U: CastableFrom<T>,

Source§

fn cast(self) -> U

Call W::cast_from(self)
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DowncastableFrom<T> for T

Source§

fn downcast_from(value: T) -> T

Truncate the current UnsignedInt to a possibly smaller size
Source§

impl<T, U> DowncastableInto<U> for T
where U: DowncastableFrom<T>,

Source§

fn downcast(self) -> U

Call W::downcast_from(self)
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> MemDbg for T
where T: MemDbgImpl,

Source§

fn mem_dbg(&self, flags: DbgFlags) -> Result<(), Error>

Writes to stderr debug infos about the structure memory usage, expanding all levels of nested structures.
Source§

fn mem_dbg_on( &self, writer: &mut impl Write, flags: DbgFlags, ) -> Result<(), Error>

Writes to a 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>

Writes to stderr debug infos about the structure memory usage as 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>

Writes to a 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.
Source§

impl<T> Splat<T> for T

Source§

fn splat(value: T) -> T

Source§

impl<T> To<T> for T

Source§

fn to(self) -> T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UpcastableFrom<T> for T

Source§

fn upcast_from(value: T) -> T

Extend the current UnsignedInt to a possibly bigger size.
Source§

impl<T, U> UpcastableInto<U> for T
where U: UpcastableFrom<T>,

Source§

fn upcast(self) -> U

Call W::upcast_from(self)
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V