GA::kit v0.3
G&A's in-house C++ application framework
Loading...
Searching...
No Matches
timer.h
Go to the documentation of this file.
1#pragma once
2#include <chrono>
3#include <functional>
4#include <iostream>
5#include <string>
6
7namespace ga {
8
9// ---------------------
10// Time typedefs and utils
11// ---------------------
12
13using Clock = std::chrono::steady_clock;
14using TimePoint = std::chrono::time_point<Clock>;
15using Millis = std::chrono::milliseconds;
16
17// get millis since epoch for a point in time
18inline long timeMillis( const TimePoint& timePoint )
19{
20 return ( long )std::chrono::duration_cast<std::chrono::milliseconds>( timePoint.time_since_epoch() ).count();
21}
22
23// get current millis since epoch
24inline long timeMillis()
25{
26 return ( long )std::chrono::duration_cast<std::chrono::milliseconds>( Clock::now().time_since_epoch() ).count();
27}
28
29// get duration in millis between two points in time
30inline long durMillis( const TimePoint& begin, const TimePoint& end )
31{
32 return ( long )std::chrono::duration_cast<std::chrono::milliseconds>( end - begin ).count();
33}
34
35// ostream operator for a point in time, as millis since epoch
36inline std::ostream& operator<<( std::ostream& stream, const TimePoint& timePoint )
37{
38 return stream << timeMillis( timePoint );
39}
40
41// ---------------------
42// Timer class
43// ---------------------
44
45class Timer
46{
47public:
48 Timer();
49
50 // -------- setters
51
52 virtual void setStart( const TimePoint& time );
53 virtual void setEnd( const TimePoint& time );
54
55 virtual void set( const TimePoint& start, const TimePoint& end );
56 virtual void clear();
57
58 virtual void startNow(); // ends at set end time point
59 virtual void startNow( long durationMillis ); // ends at calc'd end point from now
60
61 // -------- getters
62
63 inline virtual const TimePoint& getStart() const { return mBegin_t; }
64 inline virtual const TimePoint& getEnd() const { return mEnd_t; }
65
66 inline virtual bool hasStart() { return mBegin_t != TimePoint(); }
67 inline virtual bool hasEnd() { return mEnd_t != TimePoint(); }
68 inline virtual bool isSet() { return hasStart() && hasEnd(); }
69 inline virtual bool isStarted() { return hasStart() && Clock::now() >= mBegin_t; }
70 inline virtual bool isDone() { return hasEnd() && Clock::now() >= mEnd_t; }
71 inline virtual bool isActive() { return hasStart() && Clock::now() >= mBegin_t && ( hasEnd() ? Clock::now() < mEnd_t : true ); }
72
73 double duration();
74 double elapsedMillis();
75 double elapsedSeconds();
76 double elapsedPercent();
77
78protected:
80};
81
82} // namespace ga
Definition: timer.h:46
virtual void setEnd(const TimePoint &time)
Definition: timer.cpp:16
virtual bool isActive()
Definition: timer.h:71
virtual const TimePoint & getEnd() const
Definition: timer.h:64
virtual bool isDone()
Definition: timer.h:70
virtual bool hasEnd()
Definition: timer.h:67
virtual void setStart(const TimePoint &time)
Definition: timer.cpp:11
TimePoint mBegin_t
Definition: timer.h:79
virtual void clear()
Definition: timer.cpp:27
TimePoint mEnd_t
Definition: timer.h:79
virtual bool isSet()
Definition: timer.h:68
double elapsedSeconds()
Definition: timer.cpp:56
virtual bool hasStart()
Definition: timer.h:66
virtual void startNow()
Definition: timer.cpp:33
virtual void set(const TimePoint &start, const TimePoint &end)
Definition: timer.cpp:21
virtual const TimePoint & getStart() const
Definition: timer.h:63
Timer()
Definition: timer.cpp:5
virtual bool isStarted()
Definition: timer.h:69
double elapsedPercent()
Definition: timer.cpp:61
double duration()
Definition: timer.cpp:46
double elapsedMillis()
Definition: timer.cpp:51
Definition: color.h:9
long timeMillis()
Definition: timer.h:24
std::ostream & operator<<(std::ostream &stream, const TimePoint &timePoint)
Definition: timer.h:36
std::chrono::time_point< Clock > TimePoint
Definition: timer.h:14
long durMillis(const TimePoint &begin, const TimePoint &end)
Definition: timer.h:30
std::chrono::steady_clock Clock
Definition: timer.h:13
std::chrono::milliseconds Millis
Definition: timer.h:15