use std::collections::VecDeque;
#[derive(Debug)]
pub struct CircularBuffer<A> {
queue: VecDeque<A>,
cap: usize,
}
impl<A> CircularBuffer<A> {
pub fn new(size: usize) -> Self {
CircularBuffer {
queue: VecDeque::with_capacity(size),
cap: size,
}
}
pub fn push(&mut self, elem: A) -> Option<A> {
let out = if self.queue.len() == self.cap {
self.queue.pop_front()
} else {
None
};
self.queue.push_back(elem);
out
}
pub fn queue(&self) -> &VecDeque<A> {
&self.queue
}
pub fn capacity(&self) -> usize {
self.cap
}
}