rafx_base/
memory.rs

1pub fn round_size_up_to_alignment_u32(
2    size: u32,
3    required_alignment: u32,
4) -> u32 {
5    assert!(required_alignment > 0);
6    ((size + required_alignment - 1) / required_alignment) * required_alignment
7}
8
9pub fn round_size_up_to_alignment_u64(
10    size: u64,
11    required_alignment: u64,
12) -> u64 {
13    assert!(required_alignment > 0);
14    ((size + required_alignment - 1) / required_alignment) * required_alignment
15}
16
17pub fn round_size_up_to_alignment_usize(
18    size: usize,
19    required_alignment: usize,
20) -> usize {
21    assert!(required_alignment > 0);
22    ((size + required_alignment - 1) / required_alignment) * required_alignment
23}
24
25pub fn any_as_bytes<T: Copy>(data: &T) -> &[u8] {
26    let ptr: *const T = data;
27    let ptr = ptr as *const u8;
28    let slice: &[u8] = unsafe { std::slice::from_raw_parts(ptr, std::mem::size_of::<T>()) };
29
30    slice
31}
32
33pub fn any_slice_as_bytes<T: Copy>(data: &[T]) -> &[u8] {
34    let ptr: *const T = data.as_ptr();
35    let ptr = ptr as *const u8;
36    let slice: &[u8] =
37        unsafe { std::slice::from_raw_parts(ptr, data.len() * std::mem::size_of::<T>()) };
38
39    slice
40}
41
42pub fn slice_size_in_bytes<T>(slice: &[T]) -> usize {
43    let range = slice.as_ptr_range();
44    (range.end as *const u8 as usize) - (range.start as *const u8 as usize)
45}
46
47pub unsafe fn force_to_static_lifetime<T>(value: &T) -> &'static T {
48    std::mem::transmute(value)
49}
50
51pub unsafe fn force_to_static_lifetime_mut<T>(value: &mut T) -> &'static mut T {
52    std::mem::transmute(value)
53}