in timer/src/lib.rs [83:102]
fn do_tick(&mut self) -> Vec<T> {
let mut expired = Vec::with_capacity(self.buckets[self.tick].timers.len());
let mut remaining = HashSet::new();
for token in &self.buckets[self.tick].timers {
if self.timers[token].remaining == 0 {
expired.push(*token);
self.timers.remove(token);
} else {
remaining.insert(*token);
self.timers.get_mut(token).unwrap().remaining -= 1;
}
}
self.buckets[self.tick].timers = remaining;
if self.tick == (self.buckets.len() - 1) {
self.tick = 0;
} else {
self.tick += 1;
}
expired
}