40class SIMO_PUBLIC Time final {
42 enum struct Unit : std::uint8_t { PS, NS, US, MS, S };
44 explicit constexpr Time(
const uint64_t time,
const Unit unit) {
50 picoseconds = time * 1'000;
53 picoseconds = time * 1'000'000;
56 picoseconds = time * 1'000'000'000;
59 picoseconds = time * 1'000'000'000'000;
64 explicit constexpr Time(
const uint64_t ps_time) : Time(ps_time, Unit::PS) {}
66 constexpr Time() : Time(0) {}
68 constexpr Time operator+(
const Time& t)
const {
69 return Time(picoseconds + t.picoseconds);
72 constexpr Time operator-(
const Time& t)
const {
73 return Time(picoseconds - t.picoseconds);
76 constexpr Time operator-(
const uint64_t t)
const {
77 return Time(picoseconds - t);
80 constexpr Time operator*(
const Time& t)
const {
81 return Time(picoseconds * t.picoseconds);
84 constexpr Time operator*(
const uint64_t t)
const {
85 return Time(picoseconds * t);
88 constexpr Time operator/(
const Time& t)
const {
89 return Time(picoseconds / t.picoseconds);
92 constexpr Time operator/(
const uint64_t t)
const {
93 return Time(picoseconds / t);
97 constexpr Time operator%(
const Time& time)
const {
98 return Time(picoseconds % time.picoseconds);
102 constexpr Time operator%(
const uint64_t time)
const {
103 return Time(picoseconds % time);
106 constexpr bool operator==(
const Time& t)
const {
107 return picoseconds == t.picoseconds;
110 [[nodiscard]] uint64_t to_picoseconds()
const {
return picoseconds; }
112 auto operator<=>(
const Time& time)
const {
113 return picoseconds <=> time.picoseconds;
116 friend std::ostream& operator<<(std::ostream& out,
const Time& e);
122 std::uint64_t picoseconds;
124 friend struct glz::meta<Time>;