[−][src]Trait uninit::VecReserveUninit
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!", );