pub trait StableIndexOffset: Clone + Debug + Neg + PartialEq<Self> + Eq {
fn try_increment(&mut self) -> Option<()>;
fn try_decrement(&mut self) -> Option<()>;
fn zero() -> Self;
fn index_input(&self, input: Self) -> Option<usize>;
fn index_output(&self, inner: usize) -> Option<Self>;
}Expand description
Types that can be used as an index for a Deque.
The (fallible) operations required are a very limited subset of
arithmetic, combined with conversion between Offset and usize.
The provided generic implementation covers isize, i64, etc.
Required Methods
fn try_increment(&mut self) -> Option<()>
fn try_increment(&mut self) -> Option<()>
Should return None on overflow.
Currently, this will cause the library to panic,
but that may not always be the case.
fn try_decrement(&mut self) -> Option<()>
fn try_decrement(&mut self) -> Option<()>
Should return None on overflow.
Currently, this will cause the library to panic,
but that may not always be the case.
fn zero() -> Self
fn index_input(&self, input: Self) -> Option<usize>
fn index_input(&self, input: Self) -> Option<usize>
Should return Some(input - self), or None on overflow.
Overflows can easily happen with a very old index, if the index
type is bigger than usize; this is handled gracefully by the
library.
So index_input must not panic on overflow.
fn index_output(&self, inner: usize) -> Option<Self>
fn index_output(&self, inner: usize) -> Option<Self>
Should return Some(output + self).
Should return None on overflow;
Currently, this will cause the library to panic,
but that may not always be the case.