libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
timestamp.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <chrono>
11#include <thread>
13#include <promeki/core/string.h>
14
16
32class TimeStamp {
33 public:
35 using Clock = std::chrono::steady_clock;
37 using Value = std::chrono::time_point<Clock>;
39 using Duration = Clock::duration;
40
47 std::chrono::duration<double> doubleDuration(val);
48 return std::chrono::duration_cast<Duration>(doubleDuration);
49 }
50
55 static void sleep(const Duration &d) {
56 std::this_thread::sleep_for(d);
57 return;
58 }
59
64 static TimeStamp now() {
65 return TimeStamp(Clock::now());
66 }
67
70
75 TimeStamp(const Value &v) : _value(v) { }
76
78 operator Value() const {
79 return _value;
80 }
81
87 TimeStamp& operator+=(const Duration& duration) {
88 _value += duration;
89 return *this;
90 }
91
97 TimeStamp& operator-=(const Duration& duration) {
98 _value -= duration;
99 return *this;
100 }
101
106 void setValue(const Value &v) {
107 _value = v;
108 return;
109 }
110
115 Value value() const {
116 return _value;
117 }
118
120 void update() {
121 _value = Clock::now();
122 }
123
125 void sleepUntil() const {
126 std::this_thread::sleep_until(_value);
127 }
128
134 return _value.time_since_epoch();
135 }
136
141 double seconds() const {
142 return std::chrono::duration_cast<std::chrono::duration<double>>(_value.time_since_epoch()).count();
143 }
144
150 return std::chrono::duration_cast<std::chrono::milliseconds>(_value.time_since_epoch()).count();
151 }
152
158 return std::chrono::duration_cast<std::chrono::microseconds>(_value.time_since_epoch()).count();
159 }
160
166 return std::chrono::duration_cast<std::chrono::nanoseconds>(_value.time_since_epoch()).count();
167 }
168
173 double elapsedSeconds() const {
174 return std::chrono::duration_cast<std::chrono::duration<double>>(Clock::now() - _value).count();
175 }
176
182 return std::chrono::duration_cast<std::chrono::milliseconds>(Clock::now() - _value).count();
183 }
184
190 return std::chrono::duration_cast<std::chrono::microseconds>(Clock::now() - _value).count();
191 }
192
198 return std::chrono::duration_cast<std::chrono::nanoseconds>(Clock::now() - _value).count();
199 }
200
205 String toString() const {
206 return String::number(seconds());
207 }
208
210 operator String() const {
211 return toString();
212 }
213
214 private:
215 Value _value;
216};
217
224inline TimeStamp operator+(const TimeStamp& ts, const TimeStamp::Duration& duration) {
225 TimeStamp result(ts);
226 result += duration;
227 return result;
228}
229
236inline TimeStamp operator-(const TimeStamp& ts, const TimeStamp::Duration& duration) {
237 TimeStamp result(ts);
238 result -= duration;
239 return result;
240}
241
243
Time duration with nanosecond precision.
Definition duration.h:26
Dynamic array container wrapping std::vector.
Definition list.h:40
size_t count(const T &value) const
Returns the number of occurrences of value.
Definition list.h:629
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
static String number(int8_t value, int base=10, int padding=0, char padchar=' ', bool addPrefix=false)
Converts a numeric value to its String representation.
A monotonic timestamp based on std::chrono::steady_clock.
Definition timestamp.h:32
TimeStamp()
Constructs a default (epoch) TimeStamp.
Definition timestamp.h:69
double seconds() const
Returns the time since epoch in seconds as a double.
Definition timestamp.h:141
int64_t microseconds() const
Returns the time since epoch in microseconds.
Definition timestamp.h:157
Clock::duration Duration
Duration type derived from the clock.
Definition timestamp.h:39
std::chrono::steady_clock Clock
Underlying clock type.
Definition timestamp.h:35
void sleepUntil() const
Sleeps the current thread until this timestamp is reached.
Definition timestamp.h:125
int64_t elapsedMicroseconds() const
Returns the elapsed time since this timestamp in microseconds.
Definition timestamp.h:189
TimeStamp & operator-=(const Duration &duration)
Moves the timestamp back by the given duration.
Definition timestamp.h:97
static TimeStamp now()
Returns a TimeStamp representing the current time.
Definition timestamp.h:64
int64_t nanoseconds() const
Returns the time since epoch in nanoseconds.
Definition timestamp.h:165
String toString() const
Returns a string representation of the timestamp in seconds.
Definition timestamp.h:205
std::chrono::time_point< Clock > Value
Time point value type.
Definition timestamp.h:37
void update()
Updates the timestamp to the current time.
Definition timestamp.h:120
Duration timeSinceEpoch() const
Returns the duration since the clock's epoch.
Definition timestamp.h:133
TimeStamp & operator+=(const Duration &duration)
Advances the timestamp by the given duration.
Definition timestamp.h:87
static Duration secondsToDuration(double val)
Converts a floating-point number of seconds to a Duration.
Definition timestamp.h:46
TimeStamp(const Value &v)
Constructs a TimeStamp from the given time point value.
Definition timestamp.h:75
int64_t milliseconds() const
Returns the time since epoch in milliseconds.
Definition timestamp.h:149
Value value() const
Returns the underlying time point value.
Definition timestamp.h:115
int64_t elapsedMilliseconds() const
Returns the elapsed time since this timestamp in milliseconds.
Definition timestamp.h:181
int64_t elapsedNanoseconds() const
Returns the elapsed time since this timestamp in nanoseconds.
Definition timestamp.h:197
double elapsedSeconds() const
Returns the elapsed time since this timestamp in seconds.
Definition timestamp.h:173
void setValue(const Value &v)
Sets the underlying time point value.
Definition timestamp.h:106
static void sleep(const Duration &d)
Sleeps the current thread for the given duration.
Definition timestamp.h:55
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19
TimeStamp operator-(const TimeStamp &ts, const TimeStamp::Duration &duration)
Returns a new TimeStamp moved back by the given duration.
Definition timestamp.h:236
TimeStamp operator+(const TimeStamp &ts, const TimeStamp::Duration &duration)
Returns a new TimeStamp advanced by the given duration.
Definition timestamp.h:224