Skip to main content

gcollections/wrappers/
vector_deque.rs

1// Copyright 2016 Pierre Talbot (IRCAM)
2
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. This file may not be copied, modified, or distributed
7// except according to those terms.
8
9use 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}