diff -r ed3b510b860c -r 6af892a0a4b8 rust/hedgewars-server/src/core/events.rs --- a/rust/hedgewars-server/src/core/events.rs Mon Jun 21 20:11:22 2021 +0300 +++ b/rust/hedgewars-server/src/core/events.rs Tue Jun 22 01:41:33 2021 +0300 @@ -23,6 +23,7 @@ current_time: Instant, current_tick_index: u32, next_event_id: u32, + events_count: u32, } impl TimedEvents { @@ -37,6 +38,7 @@ current_time: Instant::now(), current_tick_index: 0, next_event_id: 0, + events_count: 0, } } @@ -51,6 +53,9 @@ let entry = self.events[tick_index as usize].vacant_entry(); let event_index = entry.key() as u32; entry.insert(event); + + self.events_count += 1; + Timeout { tick_index, event_index, @@ -62,6 +67,7 @@ let events = &mut self.events[timeout.tick_index as usize]; if matches!(events.get(timeout.event_index as usize), Some(Event { event_id: id, ..}) if *id == timeout.event_id) { + self.events_count -= 1; Some(events.remove(timeout.event_index as usize).data) } else { None @@ -80,8 +86,13 @@ .map(|e| e.data), ); } + self.events_count -= result.len() as u32; result } + + pub fn is_empty(&self) -> bool { + self.events_count == 0 + } } mod test {