use slice_trait::AsSlice;
pub const trait AsArray: ~const AsSlice
{
const LENGTH: usize;
fn as_array(&self) -> &[Self::Elem; Self::LENGTH];
fn as_array_mut(&mut self) -> &mut [Self::Elem; Self::LENGTH];
}
impl<T, const LENGTH: usize> const AsArray for [T; LENGTH]
{
const LENGTH: usize = LENGTH;
fn as_array(&self) -> &[Self::Elem; Self::LENGTH]
{
unsafe {core::mem::transmute(self)}
}
fn as_array_mut(&mut self) -> &mut [Self::Elem; Self::LENGTH]
{
unsafe {core::mem::transmute(self)}
}
}
#[cfg(feature = "alloc")]
impl<T, const N: usize> const AsArray for alloc::boxed::Box<[T; N]>
{
const LENGTH: usize = N;
fn as_array(&self) -> &[Self::Elem; Self::LENGTH]
{
let a: &[T; N] = self;
unsafe {core::mem::transmute(a)}
}
fn as_array_mut(&mut self) -> &mut [Self::Elem; Self::LENGTH]
{
let a: &mut [T; N] = self;
unsafe {core::mem::transmute(a)}
}
}