#[derive(Clone, Copy, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
pub struct Epoch {
value: u8,
}
impl Epoch {
const NUM_EPOCHS: u8 = 4;
#[inline]
#[must_use]
pub const fn next_generation(self) -> Epoch {
self.prev()
}
#[inline]
#[must_use]
pub const fn next(self) -> Epoch {
Epoch {
value: (self.value + 1) % Self::NUM_EPOCHS,
}
}
#[inline]
#[must_use]
pub const fn prev(self) -> Epoch {
Epoch {
value: (self.value + Self::NUM_EPOCHS - 1) % Self::NUM_EPOCHS,
}
}
#[inline]
pub(super) const fn from_u8(value: u8) -> Epoch {
Epoch { value }
}
}
impl From<Epoch> for u8 {
#[inline]
fn from(epoch: Epoch) -> Self {
epoch.value
}
}