From fa20f1839448f9d5c7ccb9dcbabeb6d0785f6083 Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 26 Mar 2025 23:28:02 +0100 Subject: feat: add get_field function --- src/util.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/util.rs (limited to 'src/util.rs') diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..6b7180a --- /dev/null +++ b/src/util.rs @@ -0,0 +1,31 @@ +use std::mem::MaybeUninit; + +pub trait MaybeUninitByteSlice +{ + unsafe fn cast(&self) -> &[Item]; +} + +impl MaybeUninitByteSlice for &[MaybeUninit] +{ + unsafe fn cast(&self) -> &[Item] + { + assert_eq!(self.len() % size_of::(), 0, "Invalid item size"); + + assert_eq!( + self.as_ptr().addr() % align_of::(), + 0, + "Invalid item alignment" + ); + + if size_of::() == 0 { + return &[]; + } + + unsafe { + std::slice::from_raw_parts( + self.as_ptr().cast::(), + self.len() / size_of::(), + ) + } + } +} -- cgit v1.2.3-18-g5258