data_structure_traits/collections/
vec_deque.rs

1#[cfg(not(feature = "std"))]
2use alloc::vec_deque::VecDeque;
3#[cfg(feature = "std")]
4use std::collections::VecDeque;
5
6use super::super::*;
7
8impl<T> Collection for VecDeque<T> {
9    #[inline(always)]
10    fn len(&self) -> usize {
11        VecDeque::<T>::len(self)
12    }
13}
14
15impl<T> CollectionMut for VecDeque<T> {
16    #[inline(always)]
17    fn clear(&mut self) {
18        VecDeque::<T>::truncate(self, 0);
19    }
20}
21
22impl<T> Create<T> for VecDeque<T> {
23    #[inline(always)]
24    fn create() -> Self {
25        VecDeque::<T>::new()
26    }
27    #[inline(always)]
28    fn create_with_capacity(capacity: usize) -> Self {
29        VecDeque::<T>::with_capacity(capacity)
30    }
31
32    #[inline(always)]
33    fn add_element(mut self, value: T) -> Self {
34        VecDeque::<T>::push(&mut self, value);
35        self
36    }
37}
38
39impl<T> Deque<T> for VecDeque<T> {
40    #[inline(always)]
41    fn push_front(&mut self, element: T) {
42        VecDeque::<T>::insert(self, 0, element)
43    }
44    #[inline(always)]
45    fn push_back(&mut self, element: T) {
46        VecDeque::<T>::push(self, element)
47    }
48
49    #[inline(always)]
50    fn pop_front(&mut self) -> Option<T> {
51        if VecDeque::<T>::len(self) == 0 {
52            None
53        } else {
54            VecDeque::<T>::remove(self, 0)
55        }
56    }
57    #[inline(always)]
58    fn pop_back(&mut self) -> Option<T> {
59        VecDeque::<T>::pop(self)
60    }
61
62    #[inline(always)]
63    fn front(&self) -> Option<&T> {
64        VecDeque::<T>::front(self)
65    }
66    #[inline(always)]
67    fn back(&self) -> Option<&T> {
68        VecDeque::<T>::back(self)
69    }
70
71    #[inline(always)]
72    fn front_mut(&mut self) -> Option<&mut T> {
73        VecDeque::<T>::front_mut(self)
74    }
75    #[inline(always)]
76    fn back_mut(&mut self) -> Option<&mut T> {
77        VecDeque::<T>::back_mut(self)
78    }
79}
80
81impl<T> Insert<usize, T> for VecDeque<T> {
82    type Output = ();
83
84    #[inline(always)]
85    fn insert(&mut self, index: usize, element: T) -> Self::Output {
86        VecDeque::<T>::insert(self, index, element)
87    }
88}
89
90impl<T> Add<T> for VecDeque<T> {
91    type Output = ();
92
93    #[inline(always)]
94    fn add(&mut self, v: T) -> Self::Output {
95        VecDeque::<T>::push(self, v)
96    }
97}
98
99impl<T> Remove<usize> for VecDeque<T> {
100    type Output = Option<T>;
101
102    #[inline(always)]
103    fn remove(&mut self, index: usize) -> Self::Output {
104        VecDeque::<T>::remove(self, index)
105    }
106}
107
108impl<T> Stack<T> for VecDeque<T> {
109    #[inline(always)]
110    fn push(&mut self, element: T) {
111        VecDeque::<T>::push_front(self, element)
112    }
113    #[inline(always)]
114    fn pop(&mut self) -> Option<T> {
115        VecDeque::<T>::pop_front(self)
116    }
117    #[inline(always)]
118    fn top(&self) -> Option<&T> {
119        VecDeque::<T>::front(self)
120    }
121    #[inline(always)]
122    fn top_mut(&mut self) -> Option<&mut T> {
123        VecDeque::<T>::front_mut(self)
124    }
125}
126
127impl<T> Queue<T> for VecDeque<T> {
128    #[inline(always)]
129    fn enqueue(&mut self, element: T) {
130        VecDeque::<T>::push_back(self, element)
131    }
132    #[inline(always)]
133    fn dequeue(&mut self) -> Option<T> {
134        VecDeque::<T>::pop_front(self)
135    }
136    #[inline(always)]
137    fn peek(&self) -> Option<&T> {
138        VecDeque::<T>::front(self)
139    }
140    #[inline(always)]
141    fn peek_mut(&mut self) -> Option<&mut T> {
142        VecDeque::<T>::front_mut(self)
143    }
144}
145
146impl<T> Get<usize> for VecDeque<T> {
147    type Output = T;
148
149    #[inline(always)]
150    fn get(&self, index: usize) -> Option<&Self::Output> {
151        VecDeque::<T>::get(self, index)
152    }
153}
154impl<T> GetMut<usize> for VecDeque<T> {
155    #[inline(always)]
156    fn get_mut(&mut self, index: usize) -> Option<&mut Self::Output> {
157        VecDeque::<T>::get_mut(self, index)
158    }
159}