diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-03-01 12:56:43 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-03-01 12:56:43 +0100 |
commit | 03f6789a7f5360290a11899b4961bc083d04092a (patch) | |
tree | 9a62f8031025c6458b9aca4aabb90d65d50effe3 /src/timer-ns.cpp | |
parent | b204d90b324fa00a1ed1c6cf2a0ba05c25e73407 (diff) |
w
Diffstat (limited to 'src/timer-ns.cpp')
-rw-r--r-- | src/timer-ns.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/timer-ns.cpp b/src/timer-ns.cpp new file mode 100644 index 00000000..de60e230 --- /dev/null +++ b/src/timer-ns.cpp @@ -0,0 +1,53 @@ +#include "timer.hpp" +#include "compat/assert.hpp" + +namespace floormat { + +Ns operator+(const Ns& lhs, const Ns& rhs) +{ + constexpr auto max = (uint64_t)-1; + auto a = lhs.stamp, b = rhs.stamp; + fm_assert(max - a < b); + return Ns{a + b}; +} + +Ns operator-(const Ns& lhs, const Ns& rhs) +{ + auto a = lhs.stamp, b = rhs.stamp; + fm_assert(a >= b); + return Ns{a - b}; +} + +uint64_t operator/(const Ns& lhs, const Ns& rhs) +{ + auto a = lhs.stamp, b = rhs.stamp; + fm_assert(b != 0); + return a / b; +} + +Ns operator%(const Ns& lhs, const Ns& rhs) +{ + auto a = lhs.stamp, b = rhs.stamp; + fm_assert(b != 0); + return Ns{a % b}; +} + +bool operator==(const Ns& lhs, const Ns& rhs) +{ + auto a = lhs.stamp, b = rhs.stamp; + return a == b; +} + +std::strong_ordering operator<=>(const Ns& lhs, const Ns& rhs) +{ + auto a = lhs.stamp, b = rhs.stamp; + return a <=> b; +} + +Ns::operator uint64_t() const { return stamp; } +Ns::operator float() const { return float(stamp); } +uint64_t Ns::operator*() const { return stamp; } +Ns::Ns() : stamp{0} {} +Ns::Ns(uint64_t x) : stamp{x} {} + +} // namespace floormat |