#[derive(Default, Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[derive(Deserialize, Serialize)]
pub struct TickDuration(u64);
impl Display for TickDuration
{
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
write!(f, "{}", self.0)
}
}
impl Mul<u64> for TickDuration
{
type Output = Self;
#[inline(always)]
fn mul(self, rhs: u64) -> Self::Output
{
TickDuration(self.0 * rhs)
}
}
impl From<u64> for TickDuration
{
#[inline(always)]
fn from(value: u64) -> Self
{
Self::new(value)
}
}
impl Into<u64> for TickDuration
{
#[inline(always)]
fn into(self) -> u64
{
self.0
}
}
impl TickDuration
{
pub const Zero: Self = TickDuration(0);
#[inline(always)]
pub const fn new(ticks: u64) -> Self
{
TickDuration(ticks)
}
#[inline(always)]
pub fn milliseconds_to_ticks_rounded_down(milliseconds: MillisecondDuration) -> Self
{
let milliseconds: u64 = milliseconds.into();
TickDuration(milliseconds / Tick::MillisecondsPerTick)
}
#[inline(always)]
pub fn milliseconds_to_ticks_rounded_up(milliseconds: MillisecondDuration) -> Self
{
let milliseconds: u64 = milliseconds.into();
let ticks_rounded_up = (milliseconds + Tick::MillisecondsPerTick - 1) / Tick::MillisecondsPerTick;
TickDuration(ticks_rounded_up)
}
#[inline(always)]
pub fn is_zero(self) -> bool
{
self.0 == Self::Zero.0
}
}