pub struct ReadBuf<'a> { /* private fields */ }
Expand description
A wrapper around a byte buffer that is incrementally filled and initialized.
This type is a sort of “double cursor”. It tracks three regions in the buffer: a region at the beginning of the buffer that has been logically filled with data, a region that has been initialized at some point but not yet logically filled, and a region at the end that may be uninitialized. The filled region is guaranteed to be a subset of the initialized region.
In summary, the contents of the buffer can be visualized as:
[ capacity ]
[ filled | unfilled ]
[ initialized | uninitialized ]
It is undefined behavior to de-initialize any bytes from the uninitialized region, since it is merely unknown whether this region is uninitialized or not, and if part of it turns out to be initialized, it must stay initialized.
Implementations§
source§impl<'data> ReadBuf<'data>
impl<'data> ReadBuf<'data>
sourcepub fn new(raw: &'data mut [u8]) -> Self
pub fn new(raw: &'data mut [u8]) -> Self
Create a new ReadBuf
with a slice of initialized bytes.
sourcepub fn uninit(raw: &'data mut [MaybeUninit<u8>]) -> Self
pub fn uninit(raw: &'data mut [MaybeUninit<u8>]) -> Self
Create a new ReadBuf
with a slice of uninitialized bytes.
sourcepub fn unfilled<'cursor>(&'cursor mut self) -> ReadBufCursor<'cursor>
pub fn unfilled<'cursor>(&'cursor mut self) -> ReadBufCursor<'cursor>
Get a cursor to the unfilled portion of the buffer.