pub(crate) struct ChunkVecBuffer {
prefix_used: usize,
chunks: VecDeque<Vec<u8>>,
limit: Option<usize>,
}
Expand description
This is a byte buffer that is built from a deque of byte vectors.
This avoids extra copies when appending a new byte vector, at the expense of more complexity when reading out.
Fields§
§prefix_used: usize
How many bytes have been consumed in the first chunk.
Invariant: zero if chunks.is_empty()
Invariant: 0 <= prefix_used
< chunks[0].len()
chunks: VecDeque<Vec<u8>>
§limit: Option<usize>
The total upper limit (in bytes) of this object.
Implementations§
Source§impl ChunkVecBuffer
impl ChunkVecBuffer
pub(crate) fn new(limit: Option<usize>) -> Self
Sourcepub(crate) fn set_limit(&mut self, new_limit: Option<usize>)
pub(crate) fn set_limit(&mut self, new_limit: Option<usize>)
Sets the upper limit on how many bytes this object can store.
Setting a lower limit than the currently stored data is not an error.
A None
limit is interpreted as no limit.
Sourcepub(crate) fn apply_limit(&self, len: usize) -> usize
pub(crate) fn apply_limit(&self, len: usize) -> usize
For a proposed append of len
bytes, how many
bytes should we actually append to adhere to the
currently set limit
?
Source§impl ChunkVecBuffer
impl ChunkVecBuffer
pub(crate) fn is_full(&self) -> bool
Sourcepub(crate) fn append_limited_copy(
&mut self,
payload: OutboundChunks<'_>,
) -> usize
pub(crate) fn append_limited_copy( &mut self, payload: OutboundChunks<'_>, ) -> usize
Append a copy of bytes
, perhaps a prefix if
we’re near the limit.
Sourcepub(crate) fn read(&mut self, buf: &mut [u8]) -> Result<usize>
pub(crate) fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Read data out of this object, writing it into buf
and returning how many bytes were written there.