use std::mem::MaybeUninit;
pub(super) struct ArrayGuard<'a, T, const N: usize> {
array: &'a mut [MaybeUninit<T>; N],
len: usize,
}
impl<T, const N: usize> Drop for ArrayGuard<'_, T, N> {
#[inline]
fn drop(&mut self) {
for i in 0..self.len {
unsafe {
self.array[i].as_mut_ptr().drop_in_place();
}
}
}
}
impl<'a, T, const N: usize> ArrayGuard<'a, T, N> {
#[inline]
pub(crate) fn new(array: &'a mut [MaybeUninit<T>; N]) -> Self {
Self { array, len: 0 }
}
#[inline]
pub(crate) unsafe fn push_unchecked(&mut self, value: T) {
let _ = self.array.get_unchecked_mut(self.len).write(value);
self.len = self.len.wrapping_add(1);
}
}