use crate::utils::ptr_ext::{MutPtrExt, PtrExt}; use std::cell::UnsafeCell; pub struct Stack { vec: UnsafeCell>, } impl Default for Stack { fn default() -> Self { Self { vec: Default::default(), } } } impl Stack { pub fn push(&self, v: T) { unsafe { self.vec.get().deref_mut().push(v); } } pub fn pop(&self) -> Option { unsafe { self.vec.get().deref_mut().pop() } } pub fn to_vec(&self) -> Vec where T: Clone, { unsafe { let v = self.vec.get().deref(); (*v).clone() } } }