restructure and add documentation
[Mitarbeiter/Tim-Zeitz/stud-rust-base.git] / src / time.rs
1 use time_crate as time;
2
3 pub fn report_time<Out, F: FnOnce() -> Out>(name: &str, f: F) -> Out {
4     let start = time::now();
5     println!("starting {}", name);
6     let res = f();
7     println!("done {} - took: {}", name, (time::now() - start));
8     res
9 }
10
11 pub fn measure<Out, F: FnOnce() -> Out>(f: F) -> (Out, time::Duration) {
12     let start = time::now();
13     let res = f();
14     (res, time::now() - start)
15 }
16
17 #[derive(Debug)]
18 pub struct Timer {
19     start: time::Tm
20 }
21
22 impl Default for Timer {
23     fn default() -> Self {
24         Self::new()
25     }
26 }
27
28 impl Timer {
29     pub fn new() -> Timer {
30         Timer { start: time::now() }
31     }
32
33     pub fn restart(&mut self) {
34         self.start = time::now();
35     }
36
37     pub fn report_passed_ms(&self) {
38         println!("{}ms", (time::now() - self.start).num_milliseconds());
39     }
40
41     pub fn get_passed_ms(&self) -> i64 {
42         (time::now() - self.start).num_milliseconds()
43     }
44 }