gmsol_utils/
dynamic_access.rs1use std::mem::size_of;
2
3use bytemuck::Pod;
4
5pub fn get<T: Pod>(data: &[u8], index: usize) -> Option<&T> {
7 let start = index.checked_mul(size_of::<T>())?;
8 let end = start.checked_add(size_of::<T>())?;
9 if data.len() < end {
10 None
11 } else {
12 Some(bytemuck::from_bytes(&data[start..end]))
13 }
14}
15
16pub fn get_mut<T: Pod>(data: &mut [u8], index: usize) -> Option<&mut T> {
18 let start = index.checked_mul(size_of::<T>())?;
19 let end = start.checked_add(size_of::<T>())?;
20 if data.len() < end {
21 None
22 } else {
23 Some(bytemuck::from_bytes_mut(&mut data[start..end]))
24 }
25}