use_prelude!();
pub
trait MaybeUninitExt {
#[allow(missing_docs)]
type T : ?Sized;
unsafe
fn assume_init_by_ref (self: &'_ Self)
-> &'_ Self::T
;
unsafe
fn assume_init_by_mut (self: &'_ mut Self)
-> &'_ mut Self::T
;
fn from_ref (init_ref: &'_ Self::T)
-> &'_ Self
;
}
#[allow(unused_unsafe)]
impl<T : Copy> MaybeUninitExt for MaybeUninit<T> {
type T = T;
#[inline]
unsafe
fn assume_init_by_ref (self: &'_ Self)
-> &'_ Self::T
{
unsafe {
mem::transmute(self)
}
}
#[inline]
unsafe
fn assume_init_by_mut (self: &'_ mut Self)
-> &'_ mut Self::T
{
unsafe {
mem::transmute(self)
}
}
#[inline]
fn from_ref (some_ref: &'_ Self::T)
-> &'_ Self
{
unsafe {
mem::transmute(some_ref)
}
}
}
#[allow(unused_unsafe)]
impl<T : Copy> MaybeUninitExt for [MaybeUninit<T>] {
type T = [T];
#[inline]
unsafe
fn assume_init_by_ref (self: &'_ Self)
-> &'_ Self::T
{
unsafe {
let len = self.len();
slice::from_raw_parts(
self.as_ptr().cast(),
len,
)
}
}
#[inline]
unsafe
fn assume_init_by_mut (self: &'_ mut Self)
-> &'_ mut Self::T
{
unsafe {
let len = self.len();
slice::from_raw_parts_mut(
self.as_mut_ptr().cast(),
len,
)
}
}
#[inline]
fn from_ref (slice: &'_ Self::T)
-> &'_ Self
{
unsafe {
let len = slice.len();
slice::from_raw_parts(
slice.as_ptr().cast(),
len,
)
}
}
}