1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13


pub trait StackImmut<T>: Sized {
    fn push(&self, T) -> Self;
    fn pop(&self) -> Self;

    fn top(&self) -> Option<&T>;

    #[inline(always)]
    fn pop_and_top(&self) -> (Self, Option<&T>) {
        (self.pop(), self.top())
    }
}