aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
timer.h
Go to the documentation of this file.
1 /**
2  *
3  * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@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 /**
23  * @file
24  * @brief Class used to compute response times for benchmark purposes.
25  *
26  * @author Pierre-Henri WUILLEMIN(@LIP6) & Jean-Philippe Dubus
27  */
28 #ifndef GUM_TIMER_H
29 #define GUM_TIMER_H
30 #include <chrono>
31 
32 #include <agrum/agrum.h>
33 
34 
35 namespace gum {
36 
37  /**
38  * @class Timer
39  * @headerfile timer.h <agrum/tools/core/timer.h>
40  * @brief Class used to compute response times for benchmark purposes
41  * @ingroup basicstruct_group
42  *
43  * This class represents a classic timer, it starts in the constructor, you
44  * can reset it with method reset() and you can get the delta time with the
45  * method step().
46  *
47  * This class uses double for representing time data, all the values are in
48  * seconds, and the precision is about 0.001 s
49  */
50  class Timer {
51  public:
52  // ============================================================================
53  /// @name Constructors / Destructors
54  // ============================================================================
55  /// @{
56 
57  /**
58  * @brief Default constructor (launching the timer).
59  */
60  Timer();
61 
62  /**
63  * @brief Copy constructor.
64  * @param timer The gum::Timer to copy.
65  */
66  Timer(const Timer& timer);
67 
68  /**
69  * Destructor
70  */
71  ~Timer();
72 
73  /// @}
74  // ============================================================================
75  /// @name Operators
76  // ============================================================================
77  /// @{
78 
79  /**
80  * @brief Copy operator.
81  * @param timer The gum::Timer to copy.
82  */
83  Timer& operator=(const Timer& timer);
84 
85  /// @}
86  // ============================================================================
87  /// @name Timer manipulation
88  // ============================================================================
89  /// @{
90 
91  /**
92  * @brief Reset the timer.
93  */
94  void reset();
95  /**
96  * @brief Pause the timer and return the delta (@see gum::Timer::step() ).
97  * @brief Returns the delta (@see gum::Timer::step() ).
98  */
99  double pause();
100  /**
101  * @brief Resume the timer and return the delta (@see gum::Timer::step() ).
102  * @brief Returns the delta (@see gum::Timer::step() ).
103  */
104  double resume();
105 
106  /**
107  * @brief Returns the delta time between now and the last reset() call (or
108  * the constructor).
109  *
110  * @return Returns the delta time in seconds (accuracy : 0.001 ms).
111  */
112  double step() const;
113 
114  /// @}
115 
116  protected:
117  /// Time of the last call to reset() or the constructor.
118  std::chrono::high_resolution_clock::time_point start_;
119 
120  /// Time of the last call to pause().
121  std::chrono::high_resolution_clock::time_point pause_;
122 
123  /// False if running.
124  bool sleeping_;
125  };
126 
127 } /* namespace gum */
128 
129 #ifndef GUM_NO_INLINE
130 # include <agrum/tools/core/timer_inl.h>
131 #endif // GUM_NO_INLINE
132 
133 #endif // GUM_TIMER_H
double step() const
Returns the delta time between now and the last reset() call (or the constructor).
Definition: timer_inl.h:41
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643
std::chrono::high_resolution_clock::time_point start_
Time of the last call to reset() or the constructor.
Definition: timer.h:118
void reset()
Reset the timer.
Definition: timer_inl.h:31
Timer()
Default constructor (launching the timer).
Definition: timer.cpp:37
double pause()
Pause the timer and return the delta (.
Definition: timer_inl.h:52
bool sleeping_
False if running.
Definition: timer.h:124
Timer(const Timer &timer)
Copy constructor.
Definition: timer.cpp:42
double resume()
Resume the timer and return the delta (.
Definition: timer_inl.h:62
Timer & operator=(const Timer &timer)
Copy operator.
Definition: timer.cpp:52
std::chrono::high_resolution_clock::time_point pause_
Time of the last call to pause().
Definition: timer.h:121
Class used to compute response times for benchmark purposesThis class represents a classic timer...
Definition: timer.h:50
~Timer()
Destructor.
Definition: timer.cpp:47