Skip to main content

MemWordWriterSlice

Struct MemWordWriterSlice 

Source
pub struct MemWordWriterSlice<W: Word, B> { /* private fields */ }
Expand description

An implementation of WordRead, WordWrite, and WordSeek for a mutable slice.

Writing beyond the end of the slice will return an error.

§Examples

use dsi_bitstream::prelude::*;

let mut words: [u64; 2] = [
    0x0043b59fcdf16077,
    0x702863e6f9739b86,
];

let mut word_writer = MemWordWriterSlice::new(&mut words);

// the stream is read sequentially
assert_eq!(word_writer.word_pos()?, 0);
assert_eq!(word_writer.read_word()?, 0x0043b59fcdf16077);
assert_eq!(word_writer.word_pos()?, 1);
assert_eq!(word_writer.read_word()?, 0x702863e6f9739b86);
assert_eq!(word_writer.word_pos()?, 2);
assert!(word_writer.read_word().is_err());

// you can change position
assert!(word_writer.set_word_pos(1).is_ok());
assert_eq!(word_writer.word_pos()?, 1);
assert_eq!(word_writer.read_word()?, 0x702863e6f9739b86);

// errored set position doesn't change the current position
assert_eq!(word_writer.word_pos()?, 2);
assert!(word_writer.set_word_pos(100).is_err());
assert_eq!(word_writer.word_pos()?, 2);

// we can write and read back!
assert!(word_writer.set_word_pos(0).is_ok());
assert!(word_writer.write_word(0x0b801b2bf696e8d2).is_ok());
assert_eq!(word_writer.word_pos()?, 1);
assert!(word_writer.set_word_pos(0).is_ok());
assert_eq!(word_writer.read_word()?, 0x0b801b2bf696e8d2);
assert_eq!(word_writer.word_pos()?, 1);

Implementations§

Source§

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

Source

pub const fn new(data: B) -> Self

Creates a new MemWordWriterSlice from a slice.

Source

pub fn len(&self) -> usize

Returns the number of words in the underlying slice.

Source

pub fn is_empty(&self) -> bool

Returns true if the underlying slice is empty.

Source

pub fn into_inner(self) -> B

Consumes this writer and returns the underlying data.

Trait Implementations§

Source§

impl<W: Debug + Word, B: Debug> Debug for MemWordWriterSlice<W, B>

Source§

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

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

impl<W: Word, B> FlatType for MemWordWriterSlice<W, B>

Source§

type Flat = False

Whether the type is flat (True) or not (False).
Source§

impl<W: Word, B> MemDbgImpl for MemWordWriterSlice<W, B>

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, _memdbg_refs: &mut HashSet<usize>, ) -> Result

Recursively displays the fields of self below the current line. Read more
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, dbg_refs: &mut HashSet<usize>, ) -> Result<(), Error>

Displays self at the given depth without any reference-address annotation; forwards to _mem_dbg_depth_on_impl with RefDisplay::None.
Source§

fn _mem_dbg_depth_on_impl( &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, dbg_refs: &mut HashSet<usize>, ref_display: RefDisplay, ) -> Result<(), Error>

Internal implementation for depth display. Read more
Source§

impl<W: Word, B> MemSize for MemWordWriterSlice<W, B>

Source§

fn mem_size_rec( &self, _memsize_flags: SizeFlags, _memsize_refs: &mut HashMap<usize, usize>, ) -> usize

Recursive implementation that tracks visited references for deduplication. Read more
Source§

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

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

impl<W: PartialEq + Word, B: PartialEq> PartialEq for MemWordWriterSlice<W, B>

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl<W: PartialEq + Word, B: PartialEq> StructuralPartialEq for MemWordWriterSlice<W, B>

Source§

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

Source§

type Error = WordError

Source§

type Word = W

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

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

Reads a word and advances the current position.
Source§

fn read_word_opt(&mut self) -> Option<Self::Word>

Reads and consumes the next word if the backend can determine cheaply that one is available, returning None otherwise (in particular, at the end of the stream, or when availability cannot be determined without blocking or performing I/O). Read more
Source§

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

Source§

type Error = WordError

Source§

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

Gets the current position in words from the start of the stream. Read more
Source§

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

Sets the current position in words from the start of the stream to word_pos.
Source§

impl<W: Word, B: AsMut<[W]>> WordWrite for MemWordWriterSlice<W, B>

Source§

type Error = WordError

Source§

type Word = W

The word type (the type of the argument of WordWrite::write_word).
Source§

fn write_word(&mut self, word: W) -> Result<(), WordError>

Writes a word and advances the current position.
Source§

fn flush(&mut self) -> Result<(), Self::Error>

Flushes the stream.

Auto Trait Implementations§

§

impl<W, B> Freeze for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: Freeze,

§

impl<W, B> RefUnwindSafe for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: RefUnwindSafe,

§

impl<W, B> Send for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: Send,

§

impl<W, B> Sync for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: Sync,

§

impl<W, B> Unpin for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: Unpin,

§

impl<W, B> UnsafeUnpin for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: UnsafeUnpin,

§

impl<W, B> UnwindSafe for MemWordWriterSlice<W, B>
where <W as TryInto<usize>>::Error: Sized, <W as TryInto<u128>>::Error: Sized, <W as TryInto<u64>>::Error: Sized, <W as TryInto<u32>>::Error: Sized, <W as TryInto<u16>>::Error: Sized, <W as TryInto<u8>>::Error: Sized, <W as TryInto<isize>>::Error: Sized, <W as TryInto<i128>>::Error: Sized, <W as TryInto<i64>>::Error: Sized, <W as TryInto<i32>>::Error: Sized, <W as TryInto<i16>>::Error: Sized, <W as TryInto<i8>>::Error: Sized, <W as TryFrom<usize>>::Error: Sized, <W as TryFrom<u128>>::Error: Sized, <W as TryFrom<u64>>::Error: Sized, <W as TryFrom<u32>>::Error: Sized, <W as TryFrom<u16>>::Error: Sized, <W as TryFrom<u8>>::Error: Sized, <W as TryFrom<isize>>::Error: Sized, <W as TryFrom<i128>>::Error: Sized, <W as TryFrom<i64>>::Error: Sized, <W as TryFrom<i32>>::Error: Sized, <W as TryFrom<i16>>::Error: Sized, <W as TryFrom<i8>>::Error: Sized, <W as FromStr>::Err: Sized, B: 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> 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 info 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 info 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 info 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 info about the structure memory usage as mem_dbg_on, but expanding only up to max_depth levels of nested structures.
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.