gcollections/wrappers/
vector_deque.rs1use crate::kind::*;
10use crate::ops::*;
11use crate::ops::sequence::ordering::*;
12use crate::stack::*;
13use crate::queue::*;
14use std::ops::{Deref, DerefMut};
15use std::collections::VecDeque;
16
17pub type DequeFrontStack<T> = Stack<VectorDeque<T>, Front>;
18pub type DequeBackStack<T> = Stack<VectorDeque<T>, Back>;
19pub type DequeFrontBackQueue<T> = Queue<VectorDeque<T>, Front, Back>;
20pub type DequeBackFrontQueue<T> = Queue<VectorDeque<T>, Back, Front>;
21
22pub struct VectorDeque<T>
23{
24 deque: VecDeque<T>
25}
26
27impl<T> SequenceKind for VectorDeque<T> {}
28
29impl<T> VectorDeque<T>
30{
31 pub fn wrap(deque: VecDeque<T>) -> VectorDeque<T> {
32 VectorDeque {
33 deque: deque
34 }
35 }
36}
37
38impl<T> Collection for VectorDeque<T> {
39 type Item = T;
40}
41
42impl<T> Deref for VectorDeque<T>
43{
44 type Target = VecDeque<T>;
45
46 fn deref<'a>(&'a self) -> &'a VecDeque<T> {
47 &self.deque
48 }
49}
50
51impl<T> DerefMut for VectorDeque<T>
52{
53 fn deref_mut<'a>(&'a mut self) -> &'a mut VecDeque<T> {
54 &mut self.deque
55 }
56}
57
58impl<T> Empty for VectorDeque<T> {
59 fn empty() -> VectorDeque<T> {
60 VectorDeque::wrap(VecDeque::new())
61 }
62}
63
64impl<T> Push<Front> for VectorDeque<T> {
65 fn push(&mut self, value: T) {
66 self.deque.push_front(value);
67 }
68}
69
70impl<T> Push<Back> for VectorDeque<T> {
71 fn push(&mut self, value: T) {
72 self.deque.push_back(value);
73 }
74}
75
76impl<T> Pop<Front> for VectorDeque<T> {
77 fn pop(&mut self) -> Option<T> {
78 self.deque.pop_front()
79 }
80}
81
82impl<T> Pop<Back> for VectorDeque<T> {
83 fn pop(&mut self) -> Option<T> {
84 self.deque.pop_back()
85 }
86}
87
88impl<T> Cardinality for VectorDeque<T> {
89 type Size = usize;
90 fn size(&self) -> usize {
91 self.deque.len()
92 }
93}