mod test;
use crate::{FromOcts, Immutable, Init};
use core::mem::MaybeUninit;
use core::slice;
#[cfg(target_arch = "x86")]
use core::arch::x86::{
__m128,
__m128bh,
__m128d,
__m128i,
__m256,
__m256bh,
__m256d,
__m256i,
__m512,
__m512bh,
__m512d,
__m512i,
};
pub unsafe trait IntoOcts {
#[inline(always)]
#[must_use]
fn as_octs(&self) -> &[u8]
where
Self: Init + Immutable,
{
let len = size_of_val(self);
let data = &raw const *self as *const u8;
unsafe { slice::from_raw_parts(data, len) }
}
#[inline(always)]
#[must_use]
fn as_octs_mut(&mut self) -> &mut [u8]
where
Self: Init + FromOcts,
{
let len = size_of_val(self);
let data = &raw mut *self as *mut u8;
unsafe { slice::from_raw_parts_mut(data, len) }
}
#[inline(always)]
#[must_use]
fn as_uninit_octs(&self) -> &[MaybeUninit<u8>]
where
Self: Immutable,
{
let len = size_of_val(self);
let data = &raw const *self as *const MaybeUninit<u8>;
unsafe { slice::from_raw_parts(data, len) }
}
#[inline(always)]
#[must_use]
fn as_uninit_octs_mut(&mut self) -> &mut [MaybeUninit<u8>]
where
Self: FromOcts,
{
let len = size_of_val(self);
let data = &raw mut *self as *mut MaybeUninit<u8>;
unsafe { slice::from_raw_parts_mut(data, len) }
}
}
unsafe impl<T: ?Sized> IntoOcts for T {}