use std::collections::VecDeque;
#[derive(Clone)]
pub struct ConsumptionHistory {
samples: VecDeque<u64>,
sum: u64,
window_size: usize,
}
impl ConsumptionHistory {
pub fn new(window_size: usize) -> Self {
Self {
samples: VecDeque::with_capacity(window_size),
sum: 0,
window_size,
}
}
pub fn add_sample(&mut self, consumption: u64) {
if self.window_size == 0 {
return;
}
if self.samples.len() == self.window_size {
let oldest_sample = self.samples.pop_front().unwrap();
self.sum -= oldest_sample;
}
self.samples.push_back(consumption);
self.sum += consumption;
}
pub fn average(&self) -> u64 {
if self.samples.is_empty() {
return 0;
}
self.sum / self.samples.len() as u64
}
}