diff --git a/sub/core/src/data.rs b/sub/core/src/data.rs index 1aa864b..9b1e8f9 100644 --- a/sub/core/src/data.rs +++ b/sub/core/src/data.rs @@ -44,8 +44,4 @@ pub fn distance(p1: impl As, p2: impl As) -> usize { Ordering::Greater => p1 - p2, Ordering::Equal => 0, } -} - -pub fn uarray() -> [T;LEN] { - unsafe { MaybeUninit::uninit().assume_init() } } \ No newline at end of file diff --git a/sub/core/src/lib.rs b/sub/core/src/lib.rs index 6022e4a..51d0ed1 100644 --- a/sub/core/src/lib.rs +++ b/sub/core/src/lib.rs @@ -5,6 +5,7 @@ // Internal modules // pub mod cast_traits; +pub mod pod; pub mod data; pub mod arrays; pub mod branching; @@ -33,7 +34,6 @@ pub mod prelude { slicify_mut, statify, statify_mut, - uarray }; pub use crate::arrays::{ fill_with, @@ -50,6 +50,7 @@ pub mod prelude { pub use crate::time::dur; pub use crate::fnv1::*; pub use crate::pstruct::struct_offset; + pub use crate::pod::Pod; } pub mod public { diff --git a/sub/core/src/pod.rs b/sub/core/src/pod.rs new file mode 100644 index 0000000..0e1f4d4 --- /dev/null +++ b/sub/core/src/pod.rs @@ -0,0 +1,20 @@ +use core::mem::MaybeUninit; + +/// Plain Old data type +pub trait Pod: Copy + 'static { + fn uninit() -> Self { unsafe { MaybeUninit::uninit().assume_init() } } + fn zeroed() -> Self { unsafe { MaybeUninit::zeroed().assume_init() } } +} + +macro_rules! primitive { + ($($p:ty),*) => { + $(impl Pod for $p {})* + } +} + +primitive!(u8, u16, u32, u64, u128); +primitive!(i8, i16, i32, i64, i128); +primitive!(f32, f64, usize, isize); +primitive!(()); + +impl Pod for [T;LEN] {} \ No newline at end of file