You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yuurei/src/bytes.rs

27 lines
662 B

pub unsafe fn refer<'a, T>(src: &'a T) -> &'a [u8]
where T: ?Sized
{
std::slice::from_raw_parts(src as *const T as *const u8, std::mem::size_of_val(src))
}
pub unsafe fn refer_mut<'a, T>(src: &'a mut T) -> &'a mut [u8]
where T: ?Sized
{
std::slice::from_raw_parts_mut(src as *mut T as *mut u8, std::mem::size_of_val(src))
}
pub unsafe fn derefer<'a, T>(src: &'a [u8]) -> &'a T
{
assert!(src.len() >= std::mem::size_of::<T>());
&*(&src[0] as *const u8 as *const T)
}
pub unsafe fn derefer_mut<'a, T>(src: &'a mut [u8]) -> &'a mut T
{
assert!(src.len() >= std::mem::size_of::<T>());
&mut *(&mut src[0] as *mut u8 as *mut T)
}