pub(crate) struct FnOnceQueue<S: 'static> {
#[allow(clippy::type_complexity)]
vec: Vec<Box<dyn FnOnce(&mut S) + 'static>>,
}
impl<S> FnOnceQueue<S> {
pub fn new() -> Self {
Self { vec: Vec::new() }
}
pub fn sanity_check() {}
#[inline]
pub fn push(&mut self, value: impl FnOnce(&mut S) + 'static) {
self.vec.push(Box::new(value));
}
#[inline]
pub fn push_box(&mut self, value: Box<dyn FnOnce(&mut S) + 'static>) {
self.vec.push(value);
}
pub fn execute(&mut self, context: &mut S) {
for f in self.vec.drain(..) {
f(context);
}
}
pub fn is_empty(&self) -> bool {
self.vec.is_empty()
}
}
impl<S> Default for FnOnceQueue<S> {
fn default() -> Self {
Self::new()
}
}