use std::{cell::UnsafeCell, collections::VecDeque};
pub(crate) struct LocalQueue<T> {
queue: UnsafeCell<VecDeque<T>>,
}
impl<T> LocalQueue<T> {
pub(crate) const fn new() -> Self {
Self {
queue: UnsafeCell::new(VecDeque::new()),
}
}
pub(crate) fn push(&self, item: T) {
let queue = unsafe { &mut *self.queue.get() };
queue.push_back(item);
}
pub(crate) fn pop(&self) -> Option<T> {
let queue = unsafe { &mut *self.queue.get() };
queue.pop_front()
}
pub(crate) fn is_empty(&self) -> bool {
let queue = unsafe { &mut *self.queue.get() };
queue.is_empty()
}
}