use crate::{
Array, AsMut, AsRef, Bare, BareBox, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor,
BitXorAssign, Borrow, BorrowMut, Deref, DerefMut, Hash, Hasher, Not, Ordering, Storage,
};
use ::core::fmt;
impl<T, const CAP: usize, S: Storage> Drop for ArrayUninit<T, CAP, S> {
fn drop(&mut self) {
for i in 0..self.len() {
unsafe {
self.data[i].assume_init_drop();
}
}
}
}
impl<T, const CAP: usize, S: Storage> AsRef<[T]> for ArrayUninit<T, CAP, S> {
fn as_ref(&self) -> &[T] {
unsafe { from_raw_parts(self.data.as_ptr() as *const T, self.init_len) }
}
}
impl<T, const CAP: usize, S: Storage> AsMut<[T]> for ArrayUninit<T, CAP, S> {
fn as_mut(&mut self) -> &mut [T] {
unsafe { from_raw_parts_mut(self.data.as_mut_ptr() as *mut T, self.init_len) }
}
}
impl<T, const CAP: usize, S: Storage> Borrow<[T]> for ArrayUninit<T, CAP, S> {
fn borrow(&self) -> &[T] {
unsafe { from_raw_parts(self.data.as_ptr() as *const T, self.init_len) }
}
}
impl<T, const CAP: usize, S: Storage> BorrowMut<[T]> for ArrayUninit<T, CAP, S> {
fn borrow_mut(&mut self) -> &mut [T] {
unsafe { from_raw_parts_mut(self.data.as_mut_ptr() as *mut T, self.init_len) }
}
}
impl<T: Clone, const CAP: usize, S: Storage> Clone for ArrayUninit<T, CAP, S>
where
S::Stored<[MaybeUninit<T>; CAP]>: Clone,
{
fn clone(&self) -> Self {
Self {
data: self.data.clone(),
init_len: self.init_len,
}
}
}