19 constexpr duration()
noexcept : m_ns(0) {}
20 constexpr explicit duration(u64 ns)
noexcept : m_ns(ns) {}
22 [[nodiscard]]
constexpr auto count_ns()
const noexcept -> u64 {
return m_ns; }
23 [[nodiscard]]
constexpr auto count_us()
const noexcept -> u64 {
return m_ns / 1000U; }
24 [[nodiscard]]
constexpr auto count_ms()
const noexcept -> u64 {
return m_ns / 1000000U; }
25 [[nodiscard]]
constexpr auto count_s()
const noexcept -> u64 {
return m_ns / 1000000000U; }
27 constexpr auto operator+(duration o)
const noexcept -> duration {
return duration(m_ns + o.m_ns); }
28 constexpr auto operator-(duration o)
const noexcept -> duration {
return duration(m_ns - o.m_ns); }
29 constexpr auto operator<=>(
const duration&)
const noexcept =
default;
33 static constexpr auto from_tod(u64 tod_units)
noexcept -> duration {
34 const u128 val =
static_cast<u128>(tod_units) * 125U;
35 return duration(
static_cast<u64>(val >> 9U));
38 static constexpr auto from_seconds(u64 s)
noexcept -> duration {
return duration(s * 1'000'000'000U); }
39 static constexpr auto from_milliseconds(u64 ms)
noexcept -> duration {
return duration(ms * 1'000'000U); }
40 static constexpr auto from_microseconds(u64 us)
noexcept -> duration {
return duration(us * 1'000U); }
48 constexpr instant()
noexcept : m_ns_since_epoch(0) {}
49 constexpr explicit instant(u64 ns)
noexcept : m_ns_since_epoch(ns) {}
51 [[nodiscard]]
constexpr auto nanoseconds_since_epoch()
const noexcept -> u64 {
return m_ns_since_epoch; }
53 constexpr auto operator+(duration d)
const noexcept -> instant {
return instant(m_ns_since_epoch + d.count_ns()); }
54 constexpr auto operator-(duration d)
const noexcept -> instant {
return instant(m_ns_since_epoch - d.count_ns()); }
55 constexpr auto operator-(instant o)
const noexcept -> duration {
return duration(m_ns_since_epoch - o.m_ns_since_epoch); }
56 constexpr auto operator<=>(
const instant&)
const noexcept =
default;