#[derive(Debug)]
struct Item<T> {
_value: T,
ttl: u32,
}
#[derive(Debug)]
pub struct DeletionQueue<T> {
max_ttl: u32,
items: Vec<Item<T>>,
}
impl<T> DeletionQueue<T> {
pub fn new(max_ttl: u32) -> DeletionQueue<T> {
DeletionQueue {
max_ttl,
items: vec![],
}
}
pub fn push(&mut self, value: T) {
self.items.push(Item {
_value: value,
ttl: self.max_ttl,
});
}
pub fn next_frame(&mut self) {
self.items.iter_mut().for_each(|item| item.ttl -= 1);
self.items.retain(|item| item.ttl != 0);
}
}