pub struct Aligned<T, Alignment: IsAlignment> {
pub value: T,
/* private fields */
}Expand description
Force minimum alignment of a type.
§Invariants
The wrapped Self::value is guaranteed, for specifically unsafe code, to have
a minimum alignment of Alignment::VALUE
bytes. The wrapped value is also guaranteed
to have a zero offset from the start of the alignment block. This makes
it sound to construct a reference the wrapped value for a different type
with an alignment of maximum Alignment::VALUE
bytes, given the other unsafe rules
are followed.
Additionally the layout of this struct is #[repr(C)] with a single field
value of type T and a private zero sized type with an alignment of
Alignment::VALUE bytes.
§Examples
use std::mem::*;
use dungeon_cell::align::Aligned;
use dungeon_cell::layout::Alignment;
// 1 byte aligned buffer
let x: [u8; 4] = 1234567890u32.to_ne_bytes();
assert_eq!(size_of_val(&x), 4);
assert_eq!(align_of_val(&x), 1);
// 4 byte aligned buffer
let y = Aligned::<_, Alignment<4>>::new(x);
assert_eq!(size_of_val(&y), 4);
assert_eq!(align_of_val(&y), 4);
// this cast back to a u32 is sound because Aligned
// makes the value field aligned to 4 bytes
let z = &y.value as *const [u8; 4] as *const u32;
let z = unsafe { &*z };
assert_eq!(z, &1234567890);Fields§
§value: TStored value.
This field is guaranteed to be aligned to
Alignment::VALUE bytes.
Implementations§
Source§impl<T, Alignment: IsAlignment> Aligned<T, Alignment>
impl<T, Alignment: IsAlignment> Aligned<T, Alignment>
Sourcepub const fn new(value: T) -> Self
pub const fn new(value: T) -> Self
Construct a new aligned value.
§Examples
use dungeon_cell::align::Aligned;
use dungeon_cell::layout::Alignment;
let a = Aligned::<_, Alignment<16>>::new(4);
assert_eq!(a.value, 4);Sourcepub const fn into_inner(this: Self) -> T
pub const fn into_inner(this: Self) -> T
Convert to the inner T.
The returned value does not keep it’s alignment and has the alignment of type T.
§Examples
use dungeon_cell::align::Aligned;
use dungeon_cell::layout::Alignment;
let aligned = Aligned::<_, Alignment<16>>::new(4);
let num = Aligned::into_inner(aligned);
assert_eq!(num, 4);Trait Implementations§
Source§impl<T, Alignment: IsAlignment> Deref for Aligned<T, Alignment>
impl<T, Alignment: IsAlignment> Deref for Aligned<T, Alignment>
Source§impl<T, Alignment: IsAlignment> DerefMut for Aligned<T, Alignment>
impl<T, Alignment: IsAlignment> DerefMut for Aligned<T, Alignment>
impl<T: Copy, Alignment: IsAlignment> Copy for Aligned<T, Alignment>
Auto Trait Implementations§
impl<T, Alignment> Freeze for Aligned<T, Alignment>
impl<T, Alignment> RefUnwindSafe for Aligned<T, Alignment>where
T: RefUnwindSafe,
impl<T, Alignment> Send for Aligned<T, Alignment>where
T: Send,
impl<T, Alignment> Sync for Aligned<T, Alignment>where
T: Sync,
impl<T, Alignment> Unpin for Aligned<T, Alignment>where
T: Unpin,
impl<T, Alignment> UnwindSafe for Aligned<T, Alignment>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Dynamic<Bound<Send, Sync, Copy, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, Sync, Copy, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, Copy, Clone, __, __>> for T
impl<T> Dynamic<Bound<Send, Sync, Copy, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, Copy, __, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, Sync, Copy, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, Copy, __, __, __>> for T
impl<T> Dynamic<Bound<Send, Sync, Copy, __, __, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, __, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, Sync, __, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, __, Clone, __, __>> for T
impl<T> Dynamic<Bound<Send, Sync, __, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, __, __, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, Sync, __, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, Sync, __, __, __, __>> for T
impl<T> Dynamic<Bound<Send, Sync, __, __, __, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, Copy, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, __, Copy, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, Copy, Clone, __, __>> for T
impl<T> Dynamic<Bound<Send, __, Copy, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, Copy, __, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, __, Copy, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, Copy, __, __, __>> for T
impl<T> Dynamic<Bound<Send, __, Copy, __, __, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, __, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, __, __, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, __, Clone, __, __>> for T
impl<T> Dynamic<Bound<Send, __, __, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, __, __, Unpin, __>> for T
impl<T> Dynamic<Bound<Send, __, __, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<Send, __, __, __, __, __>> for Twhere
T: Send,
impl<T> Dynamic<Bound<Send, __, __, __, __, __>> for Twhere
T: Send,
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, Copy, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<__, Sync, Copy, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, Copy, Clone, __, __>> for T
impl<T> Dynamic<Bound<__, Sync, Copy, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, Copy, __, Unpin, __>> for T
impl<T> Dynamic<Bound<__, Sync, Copy, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, Copy, __, __, __>> for T
impl<T> Dynamic<Bound<__, Sync, Copy, __, __, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, __, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<__, Sync, __, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, __, Clone, __, __>> for T
impl<T> Dynamic<Bound<__, Sync, __, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, __, __, Unpin, __>> for T
impl<T> Dynamic<Bound<__, Sync, __, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, Sync, __, __, __, __>> for Twhere
T: Sync,
impl<T> Dynamic<Bound<__, Sync, __, __, __, __>> for Twhere
T: Sync,
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, Copy, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<__, __, Copy, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, Copy, Clone, __, __>> for T
impl<T> Dynamic<Bound<__, __, Copy, Clone, __, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, Copy, __, Unpin, __>> for T
impl<T> Dynamic<Bound<__, __, Copy, __, Unpin, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, Copy, __, __, __>> for Twhere
T: Copy,
impl<T> Dynamic<Bound<__, __, Copy, __, __, __>> for Twhere
T: Copy,
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, __, Clone, Unpin, __>> for T
impl<T> Dynamic<Bound<__, __, __, Clone, Unpin, __>> for T
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, __, Clone, __, __>> for Twhere
T: Clone,
impl<T> Dynamic<Bound<__, __, __, Clone, __, __>> for Twhere
T: Clone,
Source§unsafe fn clone_unchecked(this: &T) -> T
unsafe fn clone_unchecked(this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, __, __, Unpin, __>> for Twhere
T: Unpin,
impl<T> Dynamic<Bound<__, __, __, __, Unpin, __>> for Twhere
T: Unpin,
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read moreSource§impl<T> Dynamic<Bound<__, __, __, __, __, __>> for T
impl<T> Dynamic<Bound<__, __, __, __, __, __>> for T
Source§unsafe fn clone_unchecked(_this: &T) -> T
unsafe fn clone_unchecked(_this: &T) -> T
Self::clone(). Read moreSource§unsafe fn debug_unchecked(
_this: &T,
_f: &mut Formatter<'_>,
) -> Result<(), Error>
unsafe fn debug_unchecked( _this: &T, _f: &mut Formatter<'_>, ) -> Result<(), Error>
Self::debug(). Read more