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>
impl<W: Word, B: AsRef<[W]>> MemWordWriterSlice<W, B>
Sourcepub const fn new(data: B) -> Self
pub const fn new(data: B) -> Self
Creates a new MemWordWriterSlice from a slice.
Sourcepub fn into_inner(self) -> B
pub fn into_inner(self) -> B
Consumes this writer and returns the underlying data.
Trait Implementations§
Source§impl<W: Word, B> FlatType for MemWordWriterSlice<W, B>
impl<W: Word, B> FlatType for MemWordWriterSlice<W, B>
Source§impl<W: Word, B> MemDbgImpl for MemWordWriterSlice<W, B>where
B: MemDbgImpl + FlatType,
usize: MemDbgImpl + FlatType,
PhantomData<W>: MemDbgImpl + FlatType,
impl<W: Word, B> MemDbgImpl for MemWordWriterSlice<W, B>where
B: MemDbgImpl + FlatType,
usize: MemDbgImpl + FlatType,
PhantomData<W>: MemDbgImpl + FlatType,
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
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 moreSource§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>
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>
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>
impl<W: Word, B> MemSize for MemWordWriterSlice<W, B>
impl<W: PartialEq + Word, B: PartialEq> StructuralPartialEq for MemWordWriterSlice<W, B>
Source§impl<W: Word, B: AsRef<[W]>> WordRead for MemWordWriterSlice<W, B>
impl<W: Word, B: AsRef<[W]>> WordRead for MemWordWriterSlice<W, B>
type Error = WordError
Source§type Word = W
type Word = W
The word type (the type of the result of
WordRead::read_word).Source§fn read_word(&mut self) -> Result<W, WordError>
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>
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 moreSource§impl<W: Word, B: AsRef<[W]>> WordSeek for MemWordWriterSlice<W, B>
impl<W: Word, B: AsRef<[W]>> WordSeek for MemWordWriterSlice<W, B>
Source§impl<W: Word, B: AsMut<[W]>> WordWrite for MemWordWriterSlice<W, B>
impl<W: Word, B: AsMut<[W]>> WordWrite for MemWordWriterSlice<W, B>
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> 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
Mutably borrows from an owned value. Read more
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>
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>
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>
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>
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.