1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
pub mod bucket;

use super::*;

pub trait Deferred<B: Bucket>: Queue<B> + Sized {
    fn bucket(&mut self, priority: usize) -> DeferredBucket<Self, B> {
        DeferredBucket::new(self, priority)
    }

    fn min_bucket(&mut self) -> DeferredBucket<Self, B> {
        self.bucket(self.min_priority().unwrap_or(0))
    }

    fn max_bucket(&mut self) -> DeferredBucket<Self, B> {
        self.bucket(self.max_priority().unwrap_or(0))
    }
}

impl<B: Bucket> Deferred<B> for BucketQueue<B> { }

impl<'a, Q, B, C> Deferred<C> for DeferredBucket<'a, Q, B>
    where Q: Queue<B>,
          B: Bucket + Queue<C>,
          C: Bucket,
{ }