From 754a48b7ff6d8c58b1ee08651e60112900b60455 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Tue, 25 Aug 2020 22:10:25 +0200 Subject: First public release of Rapier. --- src/counters/timer.rs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/counters/timer.rs (limited to 'src/counters/timer.rs') diff --git a/src/counters/timer.rs b/src/counters/timer.rs new file mode 100644 index 0000000..fd25063 --- /dev/null +++ b/src/counters/timer.rs @@ -0,0 +1,53 @@ +use std::fmt::{Display, Error, Formatter}; + +/// A timer. +#[derive(Copy, Clone, Debug, Default)] +pub struct Timer { + time: f64, + start: Option, +} + +impl Timer { + /// Creates a new timer initialized to zero and not started. + pub fn new() -> Self { + Timer { + time: 0.0, + start: None, + } + } + + /// Resets the timer to 0. + pub fn reset(&mut self) { + self.time = 0.0 + } + + /// Start the timer. + pub fn start(&mut self) { + self.time = 0.0; + self.start = Some(instant::now()); + } + + /// Pause the timer. + pub fn pause(&mut self) { + if let Some(start) = self.start { + self.time += instant::now() - start; + } + self.start = None; + } + + /// Resume the timer. + pub fn resume(&mut self) { + self.start = Some(instant::now()); + } + + /// The measured time between the last `.start()` and `.pause()` calls. + pub fn time(&self) -> f64 { + self.time + } +} + +impl Display for Timer { + fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { + write!(f, "{}s", self.time) + } +} -- cgit