Struct virtio_queue::Reader
source · pub struct Reader<'a, B = ()> { /* private fields */ }
Expand description
Provides high-level interface over the sequence of memory regions defined by readable descriptors in the descriptor chain.
Note that virtio spec requires driver to place any device-writable descriptors after any device-readable descriptors (2.6.4.2 in Virtio Spec v1.1). Reader will skip iterating over descriptor chain when first writable descriptor is encountered.
Implementations§
source§impl<'a, B: BitmapSlice> Reader<'a, B>
impl<'a, B: BitmapSlice> Reader<'a, B>
sourcepub fn new<M, T>(
mem: &'a M,
desc_chain: DescriptorChain<T>
) -> Result<Reader<'a, B>, Error>where
M: GuestMemory,
<<M as GuestMemory>::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>,
T: Deref,
T::Target: GuestMemory + Sized,
pub fn new<M, T>(
mem: &'a M,
desc_chain: DescriptorChain<T>
) -> Result<Reader<'a, B>, Error>where
M: GuestMemory,
<<M as GuestMemory>::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>,
T: Deref,
T::Target: GuestMemory + Sized,
Construct a new Reader wrapper over desc_chain
.
sourcepub fn read_obj<T: ByteValued>(&mut self) -> Result<T>
pub fn read_obj<T: ByteValued>(&mut self) -> Result<T>
Reads an object from the descriptor chain buffer.
sourcepub fn available_bytes(&self) -> usize
pub fn available_bytes(&self) -> usize
Returns number of bytes available for reading. May return an error if the combined lengths of all the buffers in the DescriptorChain would cause an integer overflow.
sourcepub fn bytes_read(&self) -> usize
pub fn bytes_read(&self) -> usize
Returns number of bytes already read from the descriptor chain buffer.
sourcepub fn split_at(&mut self, offset: usize) -> Result<Reader<'a, B>, Error>
pub fn split_at(&mut self, offset: usize) -> Result<Reader<'a, B>, Error>
Splits this Reader
into two at the given offset in the DescriptorChain
buffer.
After the split, self
will be able to read up to offset
bytes while the returned
Reader
can read up to available_bytes() - offset
bytes. Returns an error if
offset > self.available_bytes()
.
Trait Implementations§
source§impl<'a, B: BitmapSlice> Read for Reader<'a, B>
impl<'a, B: BitmapSlice> Read for Reader<'a, B>
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 more