use crate::private;
use crate::traits::private::Value;
use crate::{Delta, TArch, TDesc};
#[derive(Default, Debug, Clone, Copy)]
pub struct BaseTimer<const S: bool>
where
TDesc<S>: TArch,
{
start: <TDesc<S> as private::ArchDesc>::Value,
}
impl<const S: bool> BaseTimer<S>
where
TDesc<S>: TArch,
{
#[inline(always)]
fn now() -> <TDesc<S> as private::ArchDesc>::Value {
<TDesc<S> as private::ArchDesc>::get_timer()
}
#[inline(always)]
pub fn start(&mut self) {
self.start = Self::now();
}
#[inline(always)]
pub(crate) fn elapsed_delta(&self) -> Delta {
Self::now().since(self.start)
}
#[inline(always)]
pub(crate) fn elapsed_delta_and_update(&mut self) -> Delta {
self.start.since_and_update(Self::now())
}
#[inline(always)]
pub fn elapsed(&self) -> u64 {
self.elapsed_delta().into()
}
#[inline(always)]
pub fn elapsed_and_update(&mut self) -> u64 {
self.elapsed_delta_and_update().into()
}
}