tokio_util/time/wheel/
stack.rs

1use std::borrow::Borrow;
2use std::cmp::Eq;
3use std::hash::Hash;
4
5/// Abstracts the stack operations needed to track timeouts.
6pub(crate) trait Stack: Default {
7    /// Type of the item stored in the stack
8    type Owned: Borrow<Self::Borrowed>;
9
10    /// Borrowed item
11    type Borrowed: Eq + Hash;
12
13    /// Item storage, this allows a slab to be used instead of just the heap
14    type Store;
15
16    /// Returns `true` if the stack is empty
17    fn is_empty(&self) -> bool;
18
19    /// Push an item onto the stack
20    fn push(&mut self, item: Self::Owned, store: &mut Self::Store);
21
22    /// Pop an item from the stack
23    fn pop(&mut self, store: &mut Self::Store) -> Option<Self::Owned>;
24
25    /// Peek into the stack.
26    fn peek(&self) -> Option<Self::Owned>;
27
28    fn remove(&mut self, item: &Self::Borrowed, store: &mut Self::Store);
29
30    fn when(item: &Self::Borrowed, store: &Self::Store) -> u64;
31}