pub struct RingBuffer where T: Clone + Copy, { data: [Option; N], pointer: usize, } impl RingBuffer where T: Clone + Copy, { pub fn new() -> Self { Self { data: [None; N], pointer: 0, } } pub fn data(&self) -> Vec<&T> { let mut d = Vec::new(); for date in self.data.iter() { if let Some(t) = date.as_ref() { d.push(t); } } d } pub fn push(&mut self, t: T) { self.data[self.pointer] = Some(t); self.pointer = (self.pointer + 1) % N; } }