pub(crate) trait Counter: Default {
fn inc(&mut self);
fn dec(&mut self) -> usize;
fn count(&self) -> usize;
}
impl Counter for usize {
#[inline(always)]
fn inc(&mut self) {
*self += 1;
}
#[inline(always)]
fn dec(&mut self) -> usize {
let prev = *self;
*self -= 1;
prev
}
#[inline(always)]
fn count(&self) -> usize {
*self
}
}