use crate::utils::ptr_ext::MutPtrExt; use std::cell::UnsafeCell; use std::collections::VecDeque; use std::mem; pub struct SyncQueue { el: UnsafeCell>, } impl Default for SyncQueue { fn default() -> Self { Self { el: Default::default(), } } } impl SyncQueue { pub fn push(&self, t: T) { unsafe { self.el.get().deref_mut().push_back(t); } } pub fn pop(&self) -> Option { unsafe { self.el.get().deref_mut().pop_front() } } pub fn is_empty(&self) -> bool { unsafe { self.el.get().deref_mut().is_empty() } } pub fn swap(&self, queue: &mut VecDeque) { unsafe { mem::swap(self.el.get().deref_mut(), queue); } } }