[][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::{InitWithCopyFromSlice, 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);
assert_eq!(extra.len(), WORLD.len());

extra.init_with_copy_from_slice(WORLD);
unsafe {
    // # Safety
    //
    //   - `.init_with_copy_from_slice()` contract guarantees initialization
    //     of `extra`, which, in turn, from `reserve_uninit`'s contract,
    //     leads to the `vec` extra capacity having been initialized.
    vec.set_len(vec.len() + WORLD.len());
}
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...