rust/hedgewars-server/src/core/events.rs
changeset 15800 6af892a0a4b8
parent 15799 ed3b510b860c
child 15818 0c21cdbc5207
--- 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<Data, const MAX_TIMEOUT: usize> TimedEvents<Data, MAX_TIMEOUT> {
@@ -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 {