[−][src]Struct chunked_bytes::strictly::ChunkedBytes
A non-contiguous buffer for efficient serialization of data structures.
A ChunkedBytes
container has a staging buffer to coalesce small byte
sequences of source data, and a queue of byte chunks split off the staging
buffer that can be incrementally consumed by an output API such as an object
implementing AsyncWrite
. Once the number of bytes in the staging
buffer reaches a certain configured chunk size, the buffer content is
split off to form a new chunk.
Unlike loosely::ChunkedBytes
, this variant of the ChunkedBytes
container
never produces chunks larger than the configured size. This comes at a cost
of increased processing overhead and sometimes more allocated memory needed
to keep the buffered data, so the applications that don't benefit from
the strict limit should prefer loosely::ChunkedBytes
.
Refer to the documentation on the methods available for ChunkedBytes
,
including the methods of traits Buf
and BufMut
, for details on working
with this container.
Implementations
impl ChunkedBytes
[src]
pub fn new() -> Self
[src]
Creates a new ChunkedBytes
container with the chunk size limit
set to a default value.
pub fn with_chunk_size_limit(chunk_size: usize) -> Self
[src]
Creates a new ChunkedBytes
container with the given chunk size limit.
pub fn with_profile(chunk_size: usize, chunking_capacity: usize) -> Self
[src]
The fully detailed constructor for ChunkedBytes
.
The chunk size limit is given in chunk_size
, and an upper
estimate of the number of chunks this container could be expected to
have at any moment of time should be given in chunking_capacity
.
More chunks can still be held, but this may cause reallocations of
internal data structures.
pub fn chunk_size_limit(&self) -> usize
[src]
Returns the size this ChunkedBytes
container uses as the limit
for splitting off complete chunks.
Note that the size of produced chunks may be smaller than the configured value, due to the allocation strategy used internally by the implementation and also depending on the pattern of usage.
pub fn is_empty(&self) -> bool
[src]
Returns true if the ChunkedBytes
container has no complete chunks
and the staging buffer is empty.
pub fn flush(&mut self)
[src]
Splits any bytes that are currently in the staging buffer into a new complete chunk. If the staging buffer is empty, this method does nothing.
Most users should not need to call this method. It is called internally when needed by the methods that advance the writing position.
pub fn put_bytes(&mut self, src: Bytes)
[src]
Appends a Bytes
slice to the container without copying the data.
If src
is empty, this method does nothing. Otherwise,
if there are any bytes currently in the staging buffer, they are split
to form a complete chunk. Next, src
is appended as a sequence of
chunks, split if necessary so that all chunks except the last are
sized to the chunk size limit.
pub fn drain_chunks(&mut self) -> DrainChunks
[src]
Returns an iterator that removes complete chunks from the
ChunkedBytes
container and yields the removed chunks as Bytes
slice handles. This does not include bytes in the staging buffer.
The chunks are removed even if the iterator is dropped without being
consumed until the end. It is unspecified how many chunks are removed
if the DrainChunks
value is not dropped, but the borrow it holds
expires (e.g. due to std::mem::forget
).
pub fn into_chunks(self) -> IntoChunks
[src]
Consumes the ChunkedBytes
container to produce an iterator over
its chunks. If there are bytes in the staging buffer, they are yielded
as the last src.
The memory allocated for IntoChunks
may be slightly more than the
ChunkedBytes
container it consumes. This is an infrequent side effect
of making the internal state efficient in general for iteration.
Trait Implementations
impl Buf for ChunkedBytes
[src]
fn remaining(&self) -> usize
[src]
fn has_remaining(&self) -> bool
[src]
fn bytes(&self) -> &[u8]
[src]
Returns a slice of the bytes in the first extant complete chunk, or the bytes in the staging buffer if there are no unconsumed chunks.
It is more efficient to use bytes_vectored
to gather all the disjoint
slices for vectored output, as is done in many specialized
implementations of the AsyncWrite::poll_write_buf
method.
fn advance(&mut self, cnt: usize)
[src]
Advances the reading position by cnt
, dropping the Bytes
references
to any complete chunks that the position has been advanced past
and then advancing the starting position of the first remaining chunk.
If there are no complete chunks left, the reading position is advanced
in the staging buffer, effectively removing the consumed bytes.
Panics
This function may panic when cnt > self.remaining()
.
fn bytes_vectored<'a>(&'a self, dst: &mut [IoSlice<'a>]) -> usize
[src]
Fills dst
sequentially with the slice views of the chunks, then
the bytes in the staging buffer if any remain and there is
another unfilled entry left in dst
. Returns the number of IoSlice
entries filled.
fn to_bytes(&mut self) -> Bytes
[src]
fn copy_to_slice(&mut self, dst: &mut [u8])
[src]
fn get_u8(&mut self) -> u8
[src]
fn get_i8(&mut self) -> i8
[src]
fn get_u16(&mut self) -> u16
[src]
fn get_u16_le(&mut self) -> u16
[src]
fn get_i16(&mut self) -> i16
[src]
fn get_i16_le(&mut self) -> i16
[src]
fn get_u32(&mut self) -> u32
[src]
fn get_u32_le(&mut self) -> u32
[src]
fn get_i32(&mut self) -> i32
[src]
fn get_i32_le(&mut self) -> i32
[src]
fn get_u64(&mut self) -> u64
[src]
fn get_u64_le(&mut self) -> u64
[src]
fn get_i64(&mut self) -> i64
[src]
fn get_i64_le(&mut self) -> i64
[src]
fn get_u128(&mut self) -> u128
[src]
fn get_u128_le(&mut self) -> u128
[src]
fn get_i128(&mut self) -> i128
[src]
fn get_i128_le(&mut self) -> i128
[src]
fn get_uint(&mut self, nbytes: usize) -> u64
[src]
fn get_uint_le(&mut self, nbytes: usize) -> u64
[src]
fn get_int(&mut self, nbytes: usize) -> i64
[src]
fn get_int_le(&mut self, nbytes: usize) -> i64
[src]
fn get_f32(&mut self) -> f32
[src]
fn get_f32_le(&mut self) -> f32
[src]
fn get_f64(&mut self) -> f64
[src]
fn get_f64_le(&mut self) -> f64
[src]
impl BufMut for ChunkedBytes
[src]
fn remaining_mut(&self) -> usize
[src]
unsafe fn advance_mut(&mut self, cnt: usize)
[src]
fn bytes_mut(&mut self) -> &mut [MaybeUninit<u8>]
[src]
fn has_remaining_mut(&self) -> bool
[src]
fn bytes_vectored_mut(&'a mut self, dst: &mut [IoSliceMut<'a>]) -> usize
[src]
fn put<T>(&mut self, src: T) where
T: Buf,
[src]
T: Buf,
fn put_slice(&mut self, src: &[u8])
[src]
fn put_u8(&mut self, n: u8)
[src]
fn put_i8(&mut self, n: i8)
[src]
fn put_u16(&mut self, n: u16)
[src]
fn put_u16_le(&mut self, n: u16)
[src]
fn put_i16(&mut self, n: i16)
[src]
fn put_i16_le(&mut self, n: i16)
[src]
fn put_u32(&mut self, n: u32)
[src]
fn put_u32_le(&mut self, n: u32)
[src]
fn put_i32(&mut self, n: i32)
[src]
fn put_i32_le(&mut self, n: i32)
[src]
fn put_u64(&mut self, n: u64)
[src]
fn put_u64_le(&mut self, n: u64)
[src]
fn put_i64(&mut self, n: i64)
[src]
fn put_i64_le(&mut self, n: i64)
[src]
fn put_u128(&mut self, n: u128)
[src]
fn put_u128_le(&mut self, n: u128)
[src]
fn put_i128(&mut self, n: i128)
[src]
fn put_i128_le(&mut self, n: i128)
[src]
fn put_uint(&mut self, n: u64, nbytes: usize)
[src]
fn put_uint_le(&mut self, n: u64, nbytes: usize)
[src]
fn put_int(&mut self, n: i64, nbytes: usize)
[src]
fn put_int_le(&mut self, n: i64, nbytes: usize)
[src]
fn put_f32(&mut self, n: f32)
[src]
fn put_f32_le(&mut self, n: f32)
[src]
fn put_f64(&mut self, n: f64)
[src]
fn put_f64_le(&mut self, n: f64)
[src]
impl Debug for ChunkedBytes
[src]
impl Default for ChunkedBytes
[src]
fn default() -> ChunkedBytes
[src]
impl Write for ChunkedBytes
[src]
Auto Trait Implementations
impl RefUnwindSafe for ChunkedBytes
impl Send for ChunkedBytes
impl Sync for ChunkedBytes
impl Unpin for ChunkedBytes
impl UnwindSafe for ChunkedBytes
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<B> BufExt for B where
B: Buf + ?Sized,
[src]
B: Buf + ?Sized,
fn take(self, limit: usize) -> Take<Self>
[src]
fn chain<U>(self, next: U) -> Chain<Self, U> where
U: Buf,
[src]
U: Buf,
fn reader(self) -> Reader<Self>
[src]
impl<B> BufMutExt for B where
B: BufMut + ?Sized,
[src]
B: BufMut + ?Sized,
fn limit(self, limit: usize) -> Limit<Self>
[src]
fn writer(self) -> Writer<Self>
[src]
fn chain_mut<U>(self, next: U) -> Chain<Self, U> where
U: BufMut,
[src]
U: BufMut,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,