bucket_queue/bucket/first_in_first_out/
mod.rs

1use super::*;
2
3pub trait FirstInFirstOutBucket: Bucket {
4    fn enqueue(&mut self, item: Self::Item);
5
6    fn dequeue(&mut self) -> Option<Self::Item>;
7}
8
9// ---------------------------------------------------------------------------
10// Provide a canonical implementation of FirstInFirstOutBucket using VecDeque:
11// ---------------------------------------------------------------------------
12
13use std::collections::VecDeque;
14
15impl<T> FirstInFirstOutBucket for VecDeque<T> {
16    fn enqueue(&mut self, item: Self::Item) {
17        self.push_back(item)
18    }
19
20    fn dequeue(&mut self) -> Option<Self::Item> {
21        self.pop_front()
22    }
23}
24
25
26// -----------------------------------------------------------------------
27// Implement FirstInFirstOutBucket for DeferredBucket to support deferral:
28// -----------------------------------------------------------------------
29
30impl<'a, Q, B> FirstInFirstOutBucket for DeferredBucket<'a, Q, B>
31    where Q: FirstInFirstOutQueue<B>,
32          B: FirstInFirstOutBucket,
33{
34    fn enqueue(&mut self, item: Self::Item) {
35        self.adding().enqueue(item)
36    }
37
38    fn dequeue(&mut self) -> Option<Self::Item> {
39        self.removing()?.dequeue()
40    }
41}