pub trait Alignable: Sized {
// Required methods
fn align_down(self, alignment: Alignment) -> Self;
fn align_up(self, alignment: Alignment) -> Option<Self>;
}
Expand description
Trait for items that can be aligned against an Alignment
.
Required Methods§
Sourcefn align_down(self, alignment: Alignment) -> Self
fn align_down(self, alignment: Alignment) -> Self
Aligns self
down to alignment
.
§Examples
use kernel::ptr::{Alignable, Alignment};
assert_eq!(0x2f_usize.align_down(Alignment::new::<0x10>()), 0x20);
assert_eq!(0x30usize.align_down(Alignment::new::<0x10>()), 0x30);
assert_eq!(0xf0u8.align_down(Alignment::new::<0x1000>()), 0x0);
Sourcefn align_up(self, alignment: Alignment) -> Option<Self>
fn align_up(self, alignment: Alignment) -> Option<Self>
Aligns self
up to alignment
, returning None
if aligning would result in an overflow.
§Examples
use kernel::ptr::{Alignable, Alignment};
assert_eq!(0x4fusize.align_up(Alignment::new::<0x10>()), Some(0x50));
assert_eq!(0x40usize.align_up(Alignment::new::<0x10>()), Some(0x40));
assert_eq!(0x0usize.align_up(Alignment::new::<0x10>()), Some(0x0));
assert_eq!(u8::MAX.align_up(Alignment::new::<0x10>()), None);
assert_eq!(0x10u8.align_up(Alignment::new::<0x100>()), None);
assert_eq!(0x0u8.align_up(Alignment::new::<0x100>()), Some(0x0));
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.