1pub trait BidirectedQueue<T>: Default {
3 fn push_front(&mut self, t: T);
5 fn push_back(&mut self, t: T);
7 fn pop_front(&mut self) -> Option<T>;
9 fn pop_back(&mut self) -> Option<T>;
11 fn clear(&mut self);
13 fn len(&self) -> usize;
15 fn is_empty(&self) -> bool {
17 self.len() == 0
18 }
19}
20
21impl<T> BidirectedQueue<T> for std::collections::LinkedList<T> {
22 fn push_front(&mut self, t: T) {
23 std::collections::LinkedList::<T>::push_front(self, t)
24 }
25
26 fn push_back(&mut self, t: T) {
27 std::collections::LinkedList::<T>::push_back(self, t)
28 }
29
30 fn pop_front(&mut self) -> Option<T> {
31 std::collections::LinkedList::<T>::pop_front(self)
32 }
33
34 fn pop_back(&mut self) -> Option<T> {
35 std::collections::LinkedList::<T>::pop_back(self)
36 }
37
38 fn clear(&mut self) {
39 self.clear();
40 }
41
42 fn len(&self) -> usize {
43 std::collections::LinkedList::<T>::len(self)
44 }
45}
46
47impl<T> BidirectedQueue<T> for std::collections::VecDeque<T> {
48 fn push_front(&mut self, t: T) {
49 std::collections::VecDeque::<T>::push_front(self, t)
50 }
51
52 fn push_back(&mut self, t: T) {
53 std::collections::VecDeque::<T>::push_back(self, t)
54 }
55
56 fn pop_front(&mut self) -> Option<T> {
57 std::collections::VecDeque::<T>::pop_front(self)
58 }
59
60 fn pop_back(&mut self) -> Option<T> {
61 std::collections::VecDeque::<T>::pop_back(self)
62 }
63
64 fn clear(&mut self) {
65 self.clear();
66 }
67
68 fn len(&self) -> usize {
69 std::collections::VecDeque::<T>::len(self)
70 }
71}