use crate::event::events::TimestampedEvent;
use std::collections::VecDeque;
pub struct EventHistory {
events: VecDeque<TimestampedEvent>,
max_duration_ms: f64,
}
impl EventHistory {
pub fn new(max_duration_ms: f64) -> Self {
Self {
events: VecDeque::new(),
max_duration_ms,
}
}
pub fn record(&mut self, event: TimestampedEvent) {
self.events.push_back(event);
self.prune();
}
fn prune(&mut self) {
if let Some(last) = self.events.back() {
let threshold = last.timestamp - self.max_duration_ms;
while let Some(first) = self.events.front() {
if first.timestamp < threshold {
self.events.pop_front();
} else {
break;
}
}
}
}
pub fn get_events_since(&self, timestamp: f64) -> Vec<&TimestampedEvent> {
self.events
.iter()
.filter(|e| e.timestamp >= timestamp)
.collect()
}
}