mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: utils: add utils for casting array
This commit is contained in:
parent
0ed0720ba8
commit
5b40dabb7b
17
lib/utils/src/array.rs
Normal file
17
lib/utils/src/array.rs
Normal 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) }
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
#![feature(step_trait)]
|
||||
|
||||
pub mod addr;
|
||||
pub mod array;
|
||||
pub mod assert;
|
||||
pub mod atomic;
|
||||
pub mod bin;
|
||||
|
Loading…
Reference in New Issue
Block a user