pub unsafe trait WriteBuf {
fn as_slice(&self) -> &[u8]ⓘNotable traits for &'_ [u8]impl<'_> Read for &'_ [u8]impl<'_> Write for &'_ mut [u8]
;
fn capacity(&self) -> usize;
fn as_mut_ptr(&mut self) -> *mut u8;
unsafe fn filled_until(&mut self, n: usize);
unsafe fn write_from<F>(&mut self, f: F) -> SafeResult
where
F: FnOnce(*mut c_void, usize) -> SafeResult,
{ ... }
}
Expand description
Describe a resizeable bytes container like Vec<u8>
.
Can start from uninitialized memory, and will be partially filled.
Should be implemented by a contiguous chunk of memory.
The main implementors are:
Vec<u8>
and similar structures. These can start empty with a non-zero capacity, and they will be resized to cover the data written.[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.
Required methods
Returns the valid data part of this container. Should only cover initialized data.
Returns the full capacity of this container. May include uninitialized data.
fn as_mut_ptr(&mut self) -> *mut u8
fn as_mut_ptr(&mut self) -> *mut u8
Returns a pointer to the start of the data.
unsafe 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.
Provided methods
unsafe fn write_from<F>(&mut self, f: F) -> SafeResult where
F: FnOnce(*mut c_void, usize) -> SafeResult,
unsafe fn write_from<F>(&mut self, f: F) -> SafeResult where
F: FnOnce(*mut c_void, usize) -> SafeResult,
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.