feat: utils: add utils for casting array

This commit is contained in:
Paul Pan 2024-09-03 19:29:42 +08:00
parent 0ed0720ba8
commit 5b40dabb7b
2 changed files with 18 additions and 0 deletions

17
lib/utils/src/array.rs Normal file
View File

@ -0,0 +1,17 @@
pub fn cast_arr_mut<T, U>(slice: &mut [T]) -> &mut [U] {
assert_eq!(slice.len() % core::mem::align_of::<U>(), 0);
let len = core::mem::size_of_val(slice) / core::mem::size_of::<U>();
let ptr = slice.as_mut_ptr() as *mut U;
unsafe { core::slice::from_raw_parts_mut(ptr, len) }
}
pub fn cast_arr<T, U>(slice: &[T]) -> &[U] {
assert_eq!(slice.len() % core::mem::align_of::<U>(), 0);
let len = core::mem::size_of_val(slice) / core::mem::size_of::<U>();
let ptr = slice.as_ptr() as *const U;
unsafe { core::slice::from_raw_parts(ptr, len) }
}

View File

@ -3,6 +3,7 @@
#![feature(step_trait)]
pub mod addr;
pub mod array;
pub mod assert;
pub mod atomic;
pub mod bin;