1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
use super::precision::*; use std::ops::*; #[derive(Clone, Eq, PartialEq)] pub struct Timestamp(pub(crate) u64); #[derive(Clone, Eq, PartialEq, Ord, PartialOrd)] pub struct Elapsed(u64); impl Sub for Timestamp { type Output = Elapsed; #[inline] fn sub(self, ts: Timestamp) -> Self::Output { if self.0 >= ts.0 { Elapsed(self.0 - ts.0) } else { Elapsed(self.0 + (!ts.0) + 1) } } } impl Add for Elapsed { type Output = Elapsed; #[inline] fn add(self, other: Elapsed) -> Self::Output { Elapsed(self.0 + other.0) } } impl Elapsed { #[inline] pub fn ticks(&self) -> u64 { self.0 } #[inline] pub fn as_secs(&self, precision: &Precision) -> u64 { self.0 / precision.frequency } #[inline] pub fn as_secs_f64(&self, precision: &Precision) -> f64 { self.0 as f64 / precision.frequency as f64 } #[inline] pub fn as_millis(&self, precision: &Precision) -> u64 { self.0 * 1_000 / precision.frequency } }