Skip to main content

luaur_common/functions/
read.rs

1pub fn read<T: Copy>(data: &[u8], offset: &mut usize) -> T {
2    let size = core::mem::size_of::<T>();
3    assert!(*offset + size <= data.len(), "read out of bounds");
4
5    let mut result = core::mem::MaybeUninit::<T>::uninit();
6    unsafe {
7        core::ptr::copy_nonoverlapping(
8            data.as_ptr().add(*offset),
9            result.as_mut_ptr() as *mut u8,
10            size,
11        );
12        *offset += size;
13        result.assume_init()
14    }
15}