libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
libxr_time.hpp
1#pragma once
2
3#include <cstdint>
4
5#include "libxr_assert.hpp"
6#include "libxr_def.hpp"
7
8static inline uint64_t libxr_timebase_max_valid_us = UINT64_MAX; // NOLINT
9static inline uint32_t libxr_timebase_max_valid_ms = UINT32_MAX; // NOLINT
10
11namespace LibXR
12{
13
19{
20 public:
26
33
38 operator uint64_t() const { return microsecond_; }
39
45 {
46 public:
53
58 operator uint64_t() const { return diff_; }
59
64 double to_second() const { return static_cast<double>(diff_) / 1000000.0; }
65
70 float to_secondf() const { return static_cast<float>(diff_) / 1000000.0f; }
71
76 uint64_t to_microsecond() const { return diff_; }
77
82 uint32_t to_millisecond() const { return diff_ / 1000u; }
83
84 private:
86 };
87
95 {
96 uint64_t diff; // NOLINT
97
98 if (microsecond_ >= old_microsecond.microsecond_)
99 {
100 diff = microsecond_ - old_microsecond.microsecond_;
101 }
102 else
103 {
104 diff = microsecond_ + (libxr_timebase_max_valid_us - old_microsecond.microsecond_);
105 }
106
107 ASSERT(diff <= libxr_timebase_max_valid_us);
108
109 return TimeDiffUS(diff);
110 }
111
119 {
120 if (this != &other)
121 {
123 }
124 return *this;
125 }
126
127 private:
129};
130
136{
137 public:
138 TimestampMS() : millisecond_(0) {}
140 operator uint32_t() const { return millisecond_; }
141
147 {
148 public:
155
160 operator uint32_t() const { return diff_; }
161
166 double to_second() { return static_cast<double>(diff_) / 1000.0; }
167
172 float to_secondf() { return static_cast<float>(diff_) / 1000.0f; }
173
178 uint32_t to_millisecond() const { return diff_; }
179
184 uint64_t to_microsecond() const { return diff_ * 1000u; }
185
186 private:
188 };
189
197 {
198 uint32_t diff; // NOLINT
199
200 if (millisecond_ >= old_millisecond.millisecond_)
201 {
202 diff = millisecond_ - old_millisecond.millisecond_;
203 }
204 else
205 {
206 diff = millisecond_ + (libxr_timebase_max_valid_ms - old_millisecond.millisecond_);
207 }
208
209 ASSERT(diff <= libxr_timebase_max_valid_ms);
210
211 return TimeDiffMS(diff);
212 }
213
214 private:
216};
217
218} // namespace LibXR
表示毫秒级时间差的类。Class representing a time difference in milliseconds.
double to_second()
以秒返回时间差(double 类型)。 Returns the time difference in seconds as a double.
uint32_t to_millisecond() const
以毫秒返回时间差。 Returns the time difference in milliseconds.
uint32_t diff_
存储时间差(毫秒)。Time difference stored in milliseconds.
uint64_t to_microsecond() const
以微秒返回时间差。 Returns the time difference in microseconds.
TimeDiffMS(uint32_t diff)
构造函数,初始化时间差。 Constructor initializing the time difference.
float to_secondf()
以秒返回时间差(float 类型)。 Returns the time difference in seconds as a float.
表示毫秒级时间戳的类。Class representing a timestamp in milliseconds.
uint32_t millisecond_
以毫秒存储的时间戳。Timestamp stored in milliseconds.
TimeDiffMS operator-(TimestampMS &old_millisecond)
计算两个时间戳之间的时间差。 Computes the time difference between two timestamps.
表示微秒级时间差的类。Class representing a time difference in microseconds.
float to_secondf() const
以秒返回时间差(float 类型)。 Returns the time difference in seconds as a float.
uint32_t to_millisecond() const
以毫秒返回时间差。 Returns the time difference in milliseconds.
TimeDiffUS(uint64_t diff)
构造函数,初始化时间差。 Constructor initializing the time difference.
double to_second() const
以秒返回时间差(double 类型)。 Returns the time difference in seconds as a double.
uint64_t diff_
存储时间差(微秒)。Time difference stored in microseconds.
uint64_t to_microsecond() const
以微秒返回时间差。 Returns the time difference in microseconds.
表示微秒级时间戳的类。Class representing a timestamp in microseconds.
TimeDiffUS operator-(const TimestampUS &old_microsecond) const
计算两个时间戳之间的时间差。 Computes the time difference between two timestamps.
TimestampUS()
默认构造函数,初始化时间戳为 0。 Default constructor initializing the timestamp to 0.
TimestampUS(uint64_t microsecond)
以给定的微秒值构造时间戳。 Constructor initializing the timestamp with a given microsecond value.
uint64_t microsecond_
以微秒存储的时间戳。Timestamp stored in microseconds.
TimestampUS & operator=(const TimestampUS &other)
赋值运算符重载。 Assignment operator overload.
LibXR Color Control Library / LibXR终端颜色控制库
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值