5#include "libxr_assert.hpp"
12[[nodiscard]]
inline uint64_t& TimebaseMaxValidUsStorage() noexcept
14 static uint64_t value = UINT64_MAX;
18[[nodiscard]]
inline uint32_t& TimebaseMaxValidMsStorage() noexcept
20 static uint32_t value = UINT32_MAX;
24[[nodiscard]]
inline uint64_t TimebaseMaxValidUs() noexcept
26 return TimebaseMaxValidUsStorage();
29[[nodiscard]]
inline uint32_t TimebaseMaxValidMs() noexcept
31 return TimebaseMaxValidMsStorage();
34inline void ConfigureTimebaseWrapRange(uint64_t max_valid_us,
35 uint32_t max_valid_ms)
noexcept
37 TimebaseMaxValidUsStorage() = max_valid_us;
38 TimebaseMaxValidMsStorage() = max_valid_ms;
64 operator uint64_t()
const {
return microsecond_; }
82 operator uint64_t()
const {
return diff_; }
90 return static_cast<double>(diff_) / 1000000.0;
99 return static_cast<float>(diff_) / 1000000.0f;
131 uint64_t elapsed = 0;
132 const uint64_t max_valid = Detail::TimebaseMaxValidUs();
134 if (microsecond_ >= old_timestamp.microsecond_)
136 elapsed = microsecond_ - old_timestamp.microsecond_;
140 elapsed = microsecond_ + (max_valid - old_timestamp.microsecond_) + 1ULL;
143 ASSERT(elapsed <= max_valid);
156 uint64_t microsecond_ = 0;
180 operator uint32_t()
const {
return millisecond_; }
198 operator uint32_t()
const {
return diff_; }
206 return static_cast<double>(diff_) / 1000.0;
215 return static_cast<float>(diff_) / 1000.0f;
230 return static_cast<uint64_t
>(diff_) * 1000u;
250 uint32_t elapsed = 0;
251 const uint32_t max_valid = Detail::TimebaseMaxValidMs();
253 if (millisecond_ >= old_timestamp.millisecond_)
255 elapsed = millisecond_ - old_timestamp.millisecond_;
259 elapsed = millisecond_ + (max_valid - old_timestamp.millisecond_) + 1U;
262 ASSERT(elapsed <= max_valid);
268 uint32_t millisecond_ = 0;
微秒时长 / Duration in microseconds
uint64_t ToMicrosecond() const
转换为微秒 / Convert the duration to microseconds
float ToSecondf() const
转换为单精度秒 / Convert the duration to seconds in single precision
double ToSecond() const
转换为秒 / Convert the duration to seconds
Duration(uint64_t diff)
从微秒差值构造时长 / Construct a duration from a microsecond delta
uint32_t ToMillisecond() const
转换为毫秒 / Convert the duration to milliseconds
微秒时间戳 / Microsecond timestamp
MicrosecondTimestamp()=default
创建零值微秒时间戳 / Construct a zero microsecond timestamp
Duration operator-(const MicrosecondTimestamp &old_timestamp) const
计算时间差,支持时间基准回绕 / Compute elapsed time with timebase wraparound
MicrosecondTimestamp(uint64_t microsecond)
从微秒计数构造时间戳 / Construct a timestamp from microsecond ticks
MicrosecondTimestamp & operator=(const MicrosecondTimestamp &other)=default
复制赋值 / Copy-assign from another timestamp
毫秒时长 / Duration in milliseconds
uint64_t ToMicrosecond() const
转换为微秒 / Convert the duration to microseconds
Duration(uint32_t diff)
从毫秒差值构造时长 / Construct a duration from a millisecond delta
float ToSecondf() const
转换为单精度秒 / Convert the duration to seconds in single precision
uint32_t ToMillisecond() const
转换为毫秒 / Convert the duration to milliseconds
double ToSecond() const
转换为秒 / Convert the duration to seconds
毫秒时间戳 / Millisecond timestamp
MillisecondTimestamp()=default
创建零值毫秒时间戳 / Construct a zero millisecond timestamp
MillisecondTimestamp(uint32_t millisecond)
从毫秒计数构造时间戳 / Construct a timestamp from millisecond ticks
Duration operator-(const MillisecondTimestamp &old_timestamp) const
计算时间差,支持时间基准回绕 / Compute elapsed time with timebase wraparound