Lines Matching refs:Alignment
21 /// This is a temporary substitute for the [`Alignment`] nightly type from the standard library,
24 /// [`Alignment`]: https://github.com/rust-lang/rust/issues/102070
31 pub struct Alignment(NonZero<usize>);
33 impl Alignment {
34 /// Validates that `ALIGN` is a power of two at build-time, and returns an [`Alignment`] of the
42 /// use kernel::ptr::Alignment;
44 /// let v = Alignment::new::<16>();
60 /// [`Alignment`] of the same value.
67 /// use kernel::ptr::Alignment;
69 /// assert_eq!(Alignment::new_checked(16), Some(Alignment::new::<16>()));
70 /// assert_eq!(Alignment::new_checked(15), None);
71 /// assert_eq!(Alignment::new_checked(1), Some(Alignment::new::<1>()));
72 /// assert_eq!(Alignment::new_checked(0), None);
87 /// This is equivalent to [`align_of`], but with the return value provided as an [`Alignment`].
93 const { Alignment::new_checked(align_of::<T>()).unwrap() }
103 /// use kernel::ptr::Alignment;
105 /// assert_eq!(Alignment::new::<16>().as_usize(), 16);
119 /// use kernel::ptr::Alignment;
121 /// assert_eq!(Alignment::new::<16>().as_nonzero().get(), 16);
140 /// use kernel::ptr::Alignment;
142 /// assert_eq!(Alignment::of::<u8>().log2(), 0);
143 /// assert_eq!(Alignment::new::<16>().log2(), 4);
157 /// use kernel::ptr::Alignment;
159 /// assert_eq!(Alignment::new::<0x10>().mask(), !0xf);
169 /// Trait for items that can be aligned against an [`Alignment`].
176 /// use kernel::ptr::{Alignable, Alignment};
178 /// assert_eq!(0x2f_usize.align_down(Alignment::new::<0x10>()), 0x20);
179 /// assert_eq!(0x30usize.align_down(Alignment::new::<0x10>()), 0x30);
180 /// assert_eq!(0xf0u8.align_down(Alignment::new::<0x1000>()), 0x0);
182 fn align_down(self, alignment: Alignment) -> Self;
189 /// use kernel::ptr::{Alignable, Alignment};
191 /// assert_eq!(0x4fusize.align_up(Alignment::new::<0x10>()), Some(0x50));
192 /// assert_eq!(0x40usize.align_up(Alignment::new::<0x10>()), Some(0x40));
193 /// assert_eq!(0x0usize.align_up(Alignment::new::<0x10>()), Some(0x0));
194 /// assert_eq!(u8::MAX.align_up(Alignment::new::<0x10>()), None);
195 /// assert_eq!(0x10u8.align_up(Alignment::new::<0x100>()), None);
196 /// assert_eq!(0x0u8.align_up(Alignment::new::<0x100>()), Some(0x0));
198 fn align_up(self, alignment: Alignment) -> Option<Self>;
207 fn align_down(self, alignment: Alignment) -> Self {
217 fn align_up(self, alignment: Alignment) -> Option<Self> {
242 const MIN_ALIGN: Alignment;
250 const MIN_ALIGN: Alignment = Alignment::of::<T>();
260 const MIN_ALIGN: Alignment = Alignment::of::<T>();
280 /// Alignment, //
285 /// assert_eq!(const_align_up(0x4f, Alignment::new::<16>()), Some(0x50));
286 /// assert_eq!(const_align_up(0x40, Alignment::new::<16>()), Some(0x40));
287 /// assert_eq!(const_align_up(1, Alignment::new::<SZ_4K>()), Some(SZ_4K));
290 pub const fn const_align_up(value: usize, align: Alignment) -> Option<usize> {