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}