[][src]Trait uninit::VecReserveUninit

pub trait VecReserveUninit {
    fn reserve_uninit(&mut self, additional: usize) -> &mut [MaybeUninit<u8>];
}

Extension trait for Vec, that reserves extra uninitialized memory for it, and returns a mutable handle on those extra (uninitialized) bytes.

Example

use ::uninit::VecReserveUninit;

let mut vec = b"Hello, ".to_vec();
const WORLD: &[u8] = b"World!";
let uninit_start: *mut u8 = vec.as_mut_ptr().wrapping_add(vec.len());

let extra: &mut [MaybeUninit<u8>] = vec.reserve_uninit(WORLD.len());
assert_eq!(extra.as_mut_ptr() as *mut u8, uninit_start);
unsafe {
    assert_eq!(extra.len(), WORLD.len());
    ::core::ptr::copy_nonoverlapping(
        WORLD.as_ptr(),
        extra.as_mut_ptr() as *mut u8,
        extra.len(),
    );
    vec.set_len(vec.len() + 6);
}
assert_eq!(
    vec,
    b"Hello, World!",
);

Required methods

fn reserve_uninit(&mut self, additional: usize) -> &mut [MaybeUninit<u8>]

Loading content...

Implementations on Foreign Types

impl VecReserveUninit for Vec<u8>[src]

Loading content...

Implementors

Loading content...