bucket_queue/bucket/double_ended/
mod.rs1use super::*;
2
3pub trait DoubleEndedBucket: Bucket {
4 fn push_back(&mut self, item: Self::Item);
5 fn push_front(&mut self, item: Self::Item);
6
7 fn pop_back(&mut self) -> Option<Self::Item>;
8 fn pop_front(&mut self) -> Option<Self::Item>;
9}
10
11use std::collections::VecDeque;
16
17impl<T> DoubleEndedBucket for VecDeque<T> {
18 fn push_back(&mut self, item: Self::Item) {
19 self.push_back(item)
20 }
21
22 fn push_front(&mut self, item: Self::Item) {
23 self.push_front(item)
24 }
25
26 fn pop_back(&mut self) -> Option<Self::Item> {
27 self.pop_back()
28 }
29
30 fn pop_front(&mut self) -> Option<Self::Item> {
31 self.pop_front()
32 }
33}
34
35
36impl<'a, Q, B> DoubleEndedBucket for DeferredBucket<'a, Q, B>
41 where Q: DoubleEndedQueue<B>,
42 B: DoubleEndedBucket,
43{
44 fn push_back(&mut self, item: Self::Item) {
45 self.adding().push_back(item)
46 }
47
48 fn push_front(&mut self, item: Self::Item) {
49 self.adding().push_front(item)
50 }
51
52 fn pop_back(&mut self) -> Option<Self::Item> {
53 self.removing()?.pop_back()
54 }
55
56 fn pop_front(&mut self) -> Option<Self::Item> {
57 self.removing()?.pop_front()
58 }
59}