use core::mem::MaybeUninit;
use crate::drop_slice;
pub struct PanicGuard<'a, T> {
pub slice: &'a mut [MaybeUninit<T>],
pub initialized: usize,
}
impl<'a, T> PanicGuard<'a, T> {
#[inline]
pub unsafe fn init_next_unchecked(&mut self, item: T) {
self.slice.get_unchecked_mut(self.initialized).write(item);
self.initialized += 1;
}
}
impl<'a, T> Drop for PanicGuard<'a, T> {
fn drop(&mut self) {
unsafe { drop_slice(&mut self.slice[..self.initialized]) }
}
}