tree_table/types/
bounded_deque.rs1use alloc::collections::VecDeque;
2
3#[derive(Debug, Clone)]
4pub struct BoundedDeque<T> {
5 deque: VecDeque<T>,
6 maxlen: usize,
7}
8
9impl<T> BoundedDeque<T> {
10 pub fn new(maxlen: usize) -> Self {
12 BoundedDeque {
13 deque: VecDeque::new(),
14 maxlen,
15 }
16 }
17
18 pub fn len(&self) -> usize {
20 self.deque.len()
21 }
22
23 pub fn set_maxlen(&mut self, new_maxlen: usize) {
27 self.maxlen = new_maxlen;
28 while self.deque.len() > self.maxlen {
29 self.deque.pop_front();
30 }
31 }
32
33 pub fn get_maxlen(&self) -> usize {
35 self.maxlen
36 }
37
38 pub fn push_back(&mut self, item: T) {
40 if self.deque.len() == self.maxlen {
41 self.deque.pop_front();
42 }
43 self.deque.push_back(item);
44 }
45
46 pub fn push_front(&mut self, item: T) {
48 if self.deque.len() == self.maxlen {
49 self.deque.pop_back();
50 }
51 self.deque.push_front(item);
52 }
53
54 pub fn pop_front(&mut self) -> Option<T> {
56 self.deque.pop_front()
57 }
58
59 pub fn pop_back(&mut self) -> Option<T> {
61 self.deque.pop_back()
62 }
63
64 pub fn front(&self) -> Option<&T> {
66 self.deque.front()
67 }
68
69 pub fn back(&self) -> Option<&T> {
71 self.deque.back()
72 }
73
74 pub fn is_empty(&self) -> bool {
76 self.deque.is_empty()
77 }
78
79 pub fn clear(&mut self) {
81 self.deque.clear();
82 }
83
84 pub fn last(&self) -> Option<&T> {
86 self.deque.back()
87 }
88
89 pub fn last_mut(&mut self) -> Option<&mut T> {
91 self.deque.back_mut()
92 }
93}