data_structure_traits/collections/
vec_deque.rs1#[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}