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: usizeHow 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.