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}