1 /**
2  *
3  *   Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU)
4  *   info_at_agrum_dot_org
5  *
6  *  This library is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU Lesser General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public License
17  *  along with this library.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 // to ease IDE parser
23 #include <chrono>
24 
25 #include <agrum/tools/core/timer.h>
26 
27 namespace gum {
28 
29 
30   INLINE
reset()31   void Timer::reset() {
32     sleeping_ = false;
33     start_    = std::chrono::high_resolution_clock::now();
34     pause_    = std::chrono::high_resolution_clock::now();
35 
36     // do start_ = clock(); while ( start_ == k );// to be sure to start at the
37     // beginning of a tick
38   }
39 
40   INLINE
step()41   double Timer::step() const {
42     std::chrono::duration< double, std::milli > ms;
43     ;
44     if (sleeping_)
45       ms = pause_ - start_;
46     else
47       ms = std::chrono::high_resolution_clock::now() - start_;
48     return ms.count() / 1000.0;
49   }
50 
51   INLINE
pause()52   double Timer::pause() {
53     if (!sleeping_) {
54       pause_    = std::chrono::high_resolution_clock::now();
55       sleeping_ = true;
56     }
57 
58     return step();
59   }
60 
61   INLINE
resume()62   double Timer::resume() {
63     if (sleeping_) {
64       start_ += std::chrono::high_resolution_clock::now() - pause_;
65       sleeping_ = false;
66     }
67 
68     return step();
69   }
70 } /* namespace gum */
71