1use core::mem::MaybeUninit;
2
3#[derive(Clone, Copy, Debug)] #[repr(C)] pub struct AlignN<const A : usize, T> where [(); A] : ValidAlignLessThan1GiB {
9 align: MaybeUninit<<[(); A] as ValidAlignLessThan1GiB>::Align>,
10 value: T,
11}
12
13#[allow(dead_code)] impl<const A : usize, T> AlignN<A, T> where [(); A] : _align_impl::ValidAlignLessThan1GiB {
14 pub const fn new(value: T) -> Self { Self { value, align: MaybeUninit::uninit() } }
15 pub fn into_inner(self) -> T { self.value }
16}
17
18impl<const A : usize, T> core::ops::Deref for AlignN<A, T> where [(); A] : _align_impl::ValidAlignLessThan1GiB {
19 type Target = T;
20 fn deref(&self) -> &Self::Target { &self.value }
21}
22
23impl<const A : usize, T> core::ops::DerefMut for AlignN<A, T> where [(); A] : _align_impl::ValidAlignLessThan1GiB {
24 fn deref_mut(&mut self) -> &mut Self::Target { &mut self.value }
25}
26
27impl<const A : usize, T: Default> Default for AlignN<A, T> where [(); A] : _align_impl::ValidAlignLessThan1GiB {
28 fn default() -> Self { Self { value: Default::default(), align: MaybeUninit::uninit() } }
29}
30
31impl<const A : usize, T> From<T> for AlignN<A, T> where [(); A] : _align_impl::ValidAlignLessThan1GiB {
32 fn from(value: T) -> Self { Self { value, align: MaybeUninit::uninit() } }
33}
34
35
36
37use _align_impl::*;
38#[doc(hidden)] pub mod _align_impl {
39 pub trait ValidAlignLessThan1GiB {
40 #[doc(hidden)] type Align : Clone + Copy + Default + core::fmt::Debug + PartialEq + Eq + PartialOrd + Ord + core::hash::Hash;
41 }
42
43 impl ValidAlignLessThan1GiB for [(); 1] { type Align = Align1; }
44 impl ValidAlignLessThan1GiB for [(); 2] { type Align = Align2; }
45 impl ValidAlignLessThan1GiB for [(); 4] { type Align = Align4; }
46 impl ValidAlignLessThan1GiB for [(); 8] { type Align = Align8; }
47 impl ValidAlignLessThan1GiB for [(); 16] { type Align = Align16; }
48 impl ValidAlignLessThan1GiB for [(); 32] { type Align = Align32; }
49 impl ValidAlignLessThan1GiB for [(); 64] { type Align = Align64; }
50 impl ValidAlignLessThan1GiB for [(); 128] { type Align = Align128; }
51 impl ValidAlignLessThan1GiB for [(); 256] { type Align = Align256; }
52 impl ValidAlignLessThan1GiB for [(); 512] { type Align = Align512; }
53 impl ValidAlignLessThan1GiB for [(); 1024] { type Align = Align1024; }
54 impl ValidAlignLessThan1GiB for [(); 2048] { type Align = Align2048; }
55 impl ValidAlignLessThan1GiB for [(); 4096] { type Align = Align4096; }
56 impl ValidAlignLessThan1GiB for [(); 8192] { type Align = Align8192; }
57 impl ValidAlignLessThan1GiB for [(); 16384] { type Align = Align16384; }
58 impl ValidAlignLessThan1GiB for [(); 32768] { type Align = Align32768; }
59 impl ValidAlignLessThan1GiB for [(); 65536] { type Align = Align65536; }
60 impl ValidAlignLessThan1GiB for [(); 131072] { type Align = Align131072; }
61 impl ValidAlignLessThan1GiB for [(); 262144] { type Align = Align262144; }
62 impl ValidAlignLessThan1GiB for [(); 524288] { type Align = Align524288; }
63 impl ValidAlignLessThan1GiB for [(); 1048576] { type Align = Align1048576; }
64 impl ValidAlignLessThan1GiB for [(); 2097152] { type Align = Align2097152; }
65 impl ValidAlignLessThan1GiB for [(); 4194304] { type Align = Align4194304; }
66 impl ValidAlignLessThan1GiB for [(); 8388608] { type Align = Align8388608; }
67 impl ValidAlignLessThan1GiB for [(); 16777216] { type Align = Align16777216; }
68 impl ValidAlignLessThan1GiB for [(); 33554432] { type Align = Align33554432; }
69 impl ValidAlignLessThan1GiB for [(); 67108864] { type Align = Align67108864; }
70 impl ValidAlignLessThan1GiB for [(); 134217728] { type Align = Align134217728; }
71 impl ValidAlignLessThan1GiB for [(); 268435456] { type Align = Align268435456; }
72 impl ValidAlignLessThan1GiB for [(); 536870912] { type Align = Align536870912; }
73
74 pub trait ByAlign<const A : usize> where Self : Sized {
75 #[doc(hidden)] type Align : Clone + Copy + Default + core::fmt::Debug + PartialEq + Eq + PartialOrd + Ord + core::hash::Hash;
76 }
77
78 impl ByAlign< 1> for () { type Align = Align1; }
79 impl ByAlign< 2> for () { type Align = Align2; }
80 impl ByAlign< 4> for () { type Align = Align4; }
81 impl ByAlign< 8> for () { type Align = Align8; }
82 impl ByAlign< 16> for () { type Align = Align16; }
83 impl ByAlign< 32> for () { type Align = Align32; }
84 impl ByAlign< 64> for () { type Align = Align64; }
85 impl ByAlign< 128> for () { type Align = Align128; }
86 impl ByAlign< 256> for () { type Align = Align256; }
87 impl ByAlign< 512> for () { type Align = Align512; }
88 impl ByAlign< 1024> for () { type Align = Align1024; }
89 impl ByAlign< 2048> for () { type Align = Align2048; }
90 impl ByAlign< 4096> for () { type Align = Align4096; }
91 impl ByAlign< 8192> for () { type Align = Align8192; }
92 impl ByAlign< 16384> for () { type Align = Align16384; }
93 impl ByAlign< 32768> for () { type Align = Align32768; }
94 impl ByAlign< 65536> for () { type Align = Align65536; }
95 impl ByAlign< 131072> for () { type Align = Align131072; }
96 impl ByAlign< 262144> for () { type Align = Align262144; }
97 impl ByAlign< 524288> for () { type Align = Align524288; }
98 impl ByAlign< 1048576> for () { type Align = Align1048576; }
99 impl ByAlign< 2097152> for () { type Align = Align2097152; }
100 impl ByAlign< 4194304> for () { type Align = Align4194304; }
101 impl ByAlign< 8388608> for () { type Align = Align8388608; }
102 impl ByAlign< 16777216> for () { type Align = Align16777216; }
103 impl ByAlign< 33554432> for () { type Align = Align33554432; }
104 impl ByAlign< 67108864> for () { type Align = Align67108864; }
105 impl ByAlign<134217728> for () { type Align = Align134217728; }
106 impl ByAlign<268435456> for () { type Align = Align268435456; }
107 impl ByAlign<536870912> for () { type Align = Align536870912; }
108
109 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 1))] pub struct Align1; #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 2))] pub struct Align2;
111 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 4))] pub struct Align4;
112 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 8))] pub struct Align8;
113 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 16))] pub struct Align16;
114 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 32))] pub struct Align32;
115 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 64))] pub struct Align64;
116 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 128))] pub struct Align128;
117 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 256))] pub struct Align256;
118 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 512))] pub struct Align512;
119 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 1024))] pub struct Align1024; #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 2048))] pub struct Align2048;
121 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 4096))] pub struct Align4096;
122 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 8192))] pub struct Align8192;
123 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 16384))] pub struct Align16384;
124 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 32768))] pub struct Align32768;
125 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 65536))] pub struct Align65536;
126 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 131072))] pub struct Align131072;
127 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 262144))] pub struct Align262144;
128 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 524288))] pub struct Align524288;
129 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 1048576))] pub struct Align1048576; #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 2097152))] pub struct Align2097152;
131 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 4194304))] pub struct Align4194304;
132 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 8388608))] pub struct Align8388608;
133 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 16777216))] pub struct Align16777216;
134 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 33554432))] pub struct Align33554432;
135 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align( 67108864))] pub struct Align67108864;
136 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align(134217728))] pub struct Align134217728;
137 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align(268435456))] pub struct Align268435456;
138 #[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C, align(536870912))] pub struct Align536870912;
139 }