IoVectoredBufMut

Trait IoVectoredBufMut 

pub trait IoVectoredBufMut: IoVectoredBuf + SetLen {
    // Required method
    fn iter_uninit_slice(
        &mut self,
    ) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>;

    // Provided methods
    fn total_capacity(&mut self) -> usize { ... }
    fn slice_mut(self, begin: usize) -> VectoredSlice<Self>
       where Self: Sized { ... }
}
Expand description

A trait for mutable vectored buffers.

Required Methods§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

An iterator of maybe uninitialized slice of the buffers.

Provided Methods§

fn total_capacity(&mut self) -> usize

The total capacity of all buffers.

fn slice_mut(self, begin: usize) -> VectoredSlice<Self>
where Self: Sized,

Get an owned view of the vectored buffer.

Unlike IoVectoredBuf::slice, the iterator returned by this function will skip both initialized and uninitialized bytes.

§Examples
use compio_buf::{IoBuf, IoVectoredBuf, IoVectoredBufMut, VectoredSlice};

/// Create a buffer with given content and capacity.
fn new_buf(slice: &[u8], cap: usize) -> Vec<u8> {
    let mut buf = Vec::new();
    buf.reserve_exact(cap);
    buf.extend_from_slice(slice);
    buf
}

let bufs = [new_buf(b"hello", 10), new_buf(b"world", 10)];
let vectored_buf = bufs.slice_mut(13);
let mut iter = vectored_buf.iter_slice();
let buf1 = iter.next().unwrap();
assert!(iter.next().is_none());
assert_eq!(buf1.as_init(), b"ld");

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

§

impl IoVectoredBufMut for ()

§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

§

impl<T> IoVectoredBufMut for &'static mut [T]
where T: IoBufMut,

§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

§

impl<T> IoVectoredBufMut for (T,)
where T: IoBufMut,

§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

§

impl<T, Rest> IoVectoredBufMut for (T, Rest)
where T: IoBufMut, Rest: IoVectoredBufMut,

§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

§

impl<T, const N: usize> IoVectoredBufMut for [T; N]
where T: IoBufMut,

§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

§

impl<T, const N: usize> IoVectoredBufMut for SmallVec<[T; N]>
where T: IoBufMut, [T; N]: Array<Item = T>,

Available on crate feature smallvec only.
§

fn iter_uninit_slice(&mut self) -> impl Iterator<Item = &mut [MaybeUninit<u8>]>

Implementors§

§

impl<T> IoVectoredBufMut for VectoredSlice<T>

§

impl<T, A> IoVectoredBufMut for Vec<T, A>
where T: IoBufMut, A: Allocator + 'static,

§

impl<T, const N: usize> IoVectoredBufMut for ArrayVec<T, N>
where T: IoBufMut,

Available on crate feature arrayvec only.