pub unsafe trait WriteBuf {
// Required methods
fn as_slice(&self) -> &[u8] ⓘ;
fn capacity(&self) -> usize;
fn as_mut_ptr(&mut self) -> *mut u8;
unsafe fn filled_until(&mut self, n: usize);
// Provided method
unsafe fn write_from<F>(&mut self, f: F) -> Result<usize, usize>
where F: FnOnce(*mut c_void, usize) -> Result<usize, usize> { ... }
}
Expand description
Describe a bytes container, like Vec<u8>
.
Represents a contiguous segment of allocated memory, a prefix of which is initialized.
It allows starting from an uninitializes chunk of memory and writing to it, progressively initializing it. No re-allocation typically occur after the initial creation.
The main implementors are:
-
Vec<u8>
and similar structures. These hold both a length (initialized data) and a capacity (allocated memory).Use
Vec::with_capacity
to create an emptyVec
with non-zero capacity, and the length field will be updated to cover the data written to it (as long as it fits in the given capacity). -
[u8]
and[u8; N]
. These must start already-initialized, and will not be resized. It will be up to the caller to only use the part that was written (as returned by the various writing operations). -
std::io::Cursor<T: WriteBuf>
. This will ignore data before the cursor’s position, and append data after that.
Required Methods§
sourcefn as_slice(&self) -> &[u8] ⓘ
fn as_slice(&self) -> &[u8] ⓘ
Returns the valid data part of this container. Should only cover initialized data.
sourcefn capacity(&self) -> usize
fn capacity(&self) -> usize
Returns the full capacity of this container. May include uninitialized data.
sourcefn as_mut_ptr(&mut self) -> *mut u8
fn as_mut_ptr(&mut self) -> *mut u8
Returns a pointer to the start of the data.
sourceunsafe fn filled_until(&mut self, n: usize)
unsafe fn filled_until(&mut self, n: usize)
Indicates that the first n
bytes of the container have been written.
Safety: this should only be called if the n
first bytes of this buffer have actually been
initialized.
Provided Methods§
sourceunsafe fn write_from<F>(&mut self, f: F) -> Result<usize, usize>
unsafe fn write_from<F>(&mut self, f: F) -> Result<usize, usize>
Call the given closure using the pointer and capacity from self
.
Assumes the given function returns a parseable code, which if valid, represents how many
bytes were written to self
.
The given closure must treat its first argument as pointing to potentially uninitialized memory, and should not read from it.
In addition, it must have written at least n
bytes contiguously from this pointer, where
n
is the returned value.