alignment macro

This commit is contained in:
Intege-rs
2024-12-29 14:01:25 -05:00
parent c95c8567df
commit d2aa7ca9fe
2 changed files with 28 additions and 0 deletions

26
sub/core/src/align.rs Normal file
View File

@@ -0,0 +1,26 @@
pub struct Align<const ALIGNMENT: usize>( <Self as Aligned>::Alignment ) where Self: Aligned;
pub trait Aligned { type Alignment; }
macro_rules! gen_alignment {
($($alignment:literal),+) => {
$(
const _: () = {
#[repr(align($alignment))] pub struct Anon;
impl Aligned for Align<$alignment> {
type Alignment = Anon;
}
assert!(align_of::<Align<$alignment>>() == $alignment)
};
)+
};
}
gen_alignment!(
1, 2, 4, 8, 16, 32, 64, 128, 256, 512,
1024, 2048, 4096, 8192, 16384, 32768,
65536, 131072, 262144, 524288, 1048576,
2097152, 4194304, 8388608, 16777216,
33554432, 67108864, 134217728, 268435456,
536870912);

View File

@@ -20,6 +20,7 @@ pub mod time;
pub mod fnv1;
pub mod pstruct;
pub mod align;
//
// Export Preludes:
@@ -51,6 +52,7 @@ pub mod prelude {
pub use crate::fnv1::*;
pub use crate::pstruct::struct_offset;
pub use crate::pod::{Pod,Mut};
pub use crate::align::Align;
}
pub mod public {