common_stdx/
drop_stack.rs1use 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}