Skip to main content

libtw2_common/
vec.rs

1use crate::relative_size_of_mult;
2use crate::slice;
3use std::mem;
4
5pub unsafe fn transmute<T, U>(vec: Vec<T>) -> Vec<U> {
6    slice::transmute::<T, U>(&vec); // Error checking done there.
7
8    let ptr = vec.as_ptr();
9    let len = vec.len();
10    let cap = vec.capacity();
11    mem::forget(vec);
12    let new_cap = cap * mem::size_of::<T>() / mem::size_of::<U>();
13
14    Vec::from_raw_parts(ptr as *mut U, relative_size_of_mult::<T, U>(len), new_cap)
15}