summaryrefslogtreecommitdiffhomepage
path: root/src/timer-ns.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-03-01 12:56:43 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-03-01 12:56:43 +0100
commit03f6789a7f5360290a11899b4961bc083d04092a (patch)
tree9a62f8031025c6458b9aca4aabb90d65d50effe3 /src/timer-ns.cpp
parentb204d90b324fa00a1ed1c6cf2a0ba05c25e73407 (diff)
w
Diffstat (limited to 'src/timer-ns.cpp')
-rw-r--r--src/timer-ns.cpp53
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