Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_duration.hpp
1#pragma once
2
3#include <variant>
4
5#include "structure/design_pattern/spk_cached_data.hpp"
6#include "type/spk_time_unit.hpp"
7
8namespace spk
9{
15 {
16 private:
17 TimeUnit _unit = TimeUnit::Millisecond;
18 std::variant<double, long long> _value;
19
20 mutable CachedData<long long> _nsCache;
21 mutable CachedData<long long> _msCache;
22 mutable CachedData<double> _secCache;
23
24 long long _generateNanoseconds() const;
25 long long _generateMilliseconds() const;
26 double _generateSeconds() const;
27
28 void _resetCaches() const;
29 void _rebindCaches();
30
31 public:
35 Duration();
41 Duration(long double p_value, TimeUnit p_unit);
42
47 Duration(const Duration &p_other);
52 Duration(Duration &&p_other) noexcept;
53
59 Duration &operator=(const Duration &p_other);
65 Duration &operator=(Duration &&p_other) noexcept;
66
71 long long nanoseconds() const;
76 long long milliseconds() const;
81 double seconds() const;
82
87 Duration operator-() const;
88
94 Duration operator+(const Duration &p_o) const;
100 Duration operator-(const Duration &p_o) const;
106 Duration &operator+=(const Duration &p_o);
112 Duration &operator-=(const Duration &p_o);
113
119 bool operator==(const Duration &p_o) const;
125 bool operator!=(const Duration &p_o) const;
131 bool operator<(const Duration &p_o) const;
137 bool operator>(const Duration &p_o) const;
143 bool operator<=(const Duration &p_o) const;
149 bool operator>=(const Duration &p_o) const;
150 };
151
152 Duration operator""_s(long double p_value);
153 Duration operator""_s(unsigned long long p_value);
154 Duration operator""_ms(unsigned long long p_value);
155 Duration operator""_ns(unsigned long long p_value);
156}
Lazily generates and caches a value with optional custom destructor.
Definition spk_cached_data.hpp:26
Strongly-typed time span with cached conversions between ns/ms/s.
Definition spk_duration.hpp:15
Duration & operator-=(const Duration &p_o)
Subtracts another duration from this instance.
Definition spk_duration.cpp:209
long long nanoseconds() const
Returns the duration in nanoseconds.
Definition spk_duration.cpp:161
bool operator==(const Duration &p_o) const
Equality comparison using canonical nanoseconds.
Definition spk_duration.cpp:218
bool operator>=(const Duration &p_o) const
Greater-or-equal comparison using canonical nanoseconds.
Definition spk_duration.cpp:243
bool operator!=(const Duration &p_o) const
Inequality comparison using canonical nanoseconds.
Definition spk_duration.cpp:223
Duration()
Constructs a zero duration (milliseconds by default).
Definition spk_duration.cpp:70
Duration & operator=(const Duration &p_other)
Copies duration value and unit from another instance.
Definition spk_duration.cpp:135
bool operator<=(const Duration &p_o) const
Less-or-equal comparison using canonical nanoseconds.
Definition spk_duration.cpp:238
double seconds() const
Returns the duration in seconds.
Definition spk_duration.cpp:171
Duration operator+(const Duration &p_o) const
Adds two durations.
Definition spk_duration.cpp:190
Duration operator-() const
Unary minus producing the symmetric duration.
Definition spk_duration.cpp:176
bool operator<(const Duration &p_o) const
Strictly-less comparison using canonical nanoseconds.
Definition spk_duration.cpp:228
long long milliseconds() const
Returns the duration in milliseconds.
Definition spk_duration.cpp:166
bool operator>(const Duration &p_o) const
Strictly-greater comparison using canonical nanoseconds.
Definition spk_duration.cpp:233
Duration & operator+=(const Duration &p_o)
Adds another duration to this instance.
Definition spk_duration.cpp:200