common_stdx/
drop_stack.rs

1use std::collections::VecDeque;
2use std::ops::{Deref, DerefMut};
3
4#[derive(Debug, Default, Clone, PartialEq, Eq)]
5pub struct DropStack<T> {
6    stack: VecDeque<T>,
7    max_size: usize,
8}
9
10impl<T> DropStack<T> {
11    pub fn new(max_size: usize) -> Self {
12        Self {
13            stack: VecDeque::with_capacity(max_size),
14            max_size,
15        }
16    }
17
18    pub fn push_top(&mut self, v: T) {
19        if self.stack.len() == self.max_size {
20            self.stack.pop_front();
21        }
22        self.stack.push_back(v);
23    }
24}
25
26impl<T> Deref for DropStack<T> {
27    type Target = VecDeque<T>;
28    fn deref(&self) -> &Self::Target {
29        &self.stack
30    }
31}
32impl<T> DerefMut for DropStack<T> {
33    fn deref_mut(&mut self) -> &mut Self::Target {
34        &mut self.stack
35    }
36}