engine/ring_buffer/src/lib.rs

37 lines
656 B
Rust
Raw Normal View History

2024-08-23 11:22:09 +00:00
pub struct RingBuffer<T, const N: usize>
where
T: Clone + Copy,
{
data: [Option<T>; N],
pointer: usize,
}
impl<T, const N: usize> RingBuffer<T, N>
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;
}
}