1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
pub trait DequeImmut<T>: Sized {
    fn push_front(&self, T) -> Self;
    fn push_back(&self, T) -> Self;

    fn pop_front(&self) -> Self;
    fn pop_back(&self) -> Self;

    fn front(&self) -> Option<&T>;
    fn back(&self) -> Option<&T>;

    #[inline(always)]
    fn pop_and_front(&self) -> (Self, Option<&T>) {
        (self.pop_front(), self.front())
    }
    #[inline(always)]
    fn pop_and_back(&self) -> (Self, Option<&T>) {
        (self.pop_back(), self.back())
    }
}