alignment macro
This commit is contained in:
26
sub/core/src/align.rs
Normal file
26
sub/core/src/align.rs
Normal 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);
|
||||||
|
|
||||||
@@ -20,6 +20,7 @@ pub mod time;
|
|||||||
|
|
||||||
pub mod fnv1;
|
pub mod fnv1;
|
||||||
pub mod pstruct;
|
pub mod pstruct;
|
||||||
|
pub mod align;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Export Preludes:
|
// Export Preludes:
|
||||||
@@ -51,6 +52,7 @@ pub mod prelude {
|
|||||||
pub use crate::fnv1::*;
|
pub use crate::fnv1::*;
|
||||||
pub use crate::pstruct::struct_offset;
|
pub use crate::pstruct::struct_offset;
|
||||||
pub use crate::pod::{Pod,Mut};
|
pub use crate::pod::{Pod,Mut};
|
||||||
|
pub use crate::align::Align;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod public {
|
pub mod public {
|
||||||
|
|||||||
Reference in New Issue
Block a user