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 = Unit::PS) {
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 constexpr Time() : Time(0) {}
66 constexpr Time operator+(
const Time& t)
const {
67 return Time(picoseconds + t.picoseconds);
70 constexpr Time operator-(
const Time& t)
const {
71 return Time(picoseconds - t.picoseconds);
74 constexpr Time operator-(
const uint64_t t)
const {
75 return Time(picoseconds - t);
78 constexpr Time operator*(
const Time& t)
const {
79 return Time(picoseconds * t.picoseconds);
82 constexpr Time operator*(
const uint64_t t)
const {
83 return Time(picoseconds * t);
86 constexpr Time operator/(
const Time& t)
const {
87 return Time(picoseconds / t.picoseconds);
90 constexpr Time operator/(
const uint64_t t)
const {
91 return Time(picoseconds / t);
95 constexpr Time operator%(
const Time& time)
const {
96 return Time(picoseconds % time.picoseconds);
100 constexpr Time operator%(
const uint64_t time)
const {
101 return Time(picoseconds % time);
104 constexpr bool operator==(
const Time& t)
const {
105 return picoseconds == t.picoseconds;
108 [[nodiscard]] uint64_t to_picoseconds()
const {
return picoseconds; }
110 auto operator<=>(
const Time& time)
const {
111 return picoseconds <=> time.picoseconds;
114 friend std::ostream& operator<<(std::ostream& out,
const Time& e);
120 std::uint64_t picoseconds;
122 friend struct glz::meta<Time>;