5 #ifndef UAVCAN_TIME_HPP_INCLUDED 6 #define UAVCAN_TIME_HPP_INCLUDED 12 #include <uavcan/Timestamp.hpp> 29 StaticAssert<(sizeof(D) == 8)>::check();
46 D
getAbs()
const {
return D::fromUSec((usec_ < 0) ? (-usec_) : usec_); }
50 bool isZero()
const {
return usec_ == 0; }
52 bool operator==(
const D& r)
const {
return usec_ == r.usec_; }
55 bool operator<(
const D& r)
const {
return usec_ < r.usec_; }
56 bool operator>(
const D& r)
const {
return usec_ > r.usec_; }
57 bool operator<=(
const D& r)
const {
return usec_ <= r.usec_; }
58 bool operator>=(
const D& r)
const {
return usec_ >= r.usec_; }
68 return *
static_cast<D*
>(
this);
73 return *
static_cast<D*
>(
this);
76 template <
typename Scale>
79 template <
typename Scale>
82 *
this = *
this * scale;
83 return *
static_cast<D*
>(
this);
87 void toString(
char buf[StringBufSize])
const;
94 template <
typename T,
typename D>
105 StaticAssert<(sizeof(T) == 8)>::check();
106 StaticAssert<(sizeof(D) == 8)>::check();
123 bool isZero()
const {
return usec_ == 0; }
125 bool operator==(
const T& r)
const {
return usec_ == r.usec_; }
128 bool operator<(
const T& r)
const {
return usec_ < r.usec_; }
129 bool operator>(
const T& r)
const {
return usec_ > r.usec_; }
130 bool operator<=(
const T& r)
const {
return usec_ <= r.usec_; }
131 bool operator>=(
const T& r)
const {
return usec_ >= r.usec_; }
137 if (
uint64_t(r.getAbs().toUSec()) > usec_)
154 return *
static_cast<const T*
>(
this) + (-r);
158 return D::fromUSec((usec_ > r.usec_) ?
int64_t(usec_ - r.usec_) : -
int64_t(r.usec_ - usec_));
164 return *
static_cast<T*
>(
this);
169 return *
static_cast<T*
>(
this);
173 void toString(
char buf[StringBufSize])
const;
207 operator Timestamp()
const 217 template <
typename D>
220 template <
typename T,
typename D>
223 template <
typename D>
231 (void)
snprintf(ptr, StringBufSize - 1,
"%llu.%06lu",
232 static_cast<unsigned long long>(
getAbs().
toUSec() / 1000000L),
233 static_cast<unsigned long>(
getAbs().toUSec() % 1000000L));
237 template <
typename T,
typename D>
240 (void)
snprintf(buf, StringBufSize,
"%llu.%06lu",
241 static_cast<unsigned long long>(
toUSec() / 1000000UL),
242 static_cast<unsigned long>(
toUSec() % 1000000UL));
248 template <
typename D>
253 return std::string(buf);
256 template <
typename T,
typename D>
261 return std::string(buf);
267 template <
typename Stream,
typename D>
269 Stream& operator<<(Stream& s, const DurationBase<D>&
d)
271 char buf[DurationBase<D>::StringBufSize];
277 template <
typename Stream,
typename T,
typename D>
279 Stream& operator<<(Stream& s, const TimeBase<T, D>& t)
281 char buf[TimeBase<T, D>::StringBufSize];
289 #endif // UAVCAN_TIME_HPP_INCLUDED T operator-(const D &r) const
bool operator<=(const D &r) const
bool operator==(const T &r) const
bool operator>(const T &r) const
T operator+(const D &r) const
bool operator!=(const D &r) const
D operator+(const D &r) const
static T fromUSec(uint64_t us)
bool operator!=(const T &r) const
UtcTime(const Timestamp &ts)
D & operator-=(const D &r)
bool operator<(const T &r) const
static T fromMSec(uint64_t ms)
void toString(char buf[StringBufSize]) const
Prints time in seconds with microsecond resolution.
UtcTime & operator=(const Timestamp &ts)
bool operator==(const D &r) const
Implicitly convertible to/from uavcan.Timestamp.
bool operator>(const D &r) const
bool operator>=(const D &r) const
UAVCAN_EXPORT const T & max(const T &a, const T &b)
void toString(char buf[StringBufSize]) const
Prints time in seconds with microsecond resolution.
D operator-(const T &r) const
bool operator>=(const T &r) const
T & operator-=(const D &r)
static D fromUSec(int64_t us)
D & operator*=(Scale scale)
static const unsigned StringBufSize
D operator*(Scale scale) const
static D fromMSec(int64_t ms)
D & operator+=(const D &r)
T & operator+=(const D &r)
bool operator<(const D &r) const
int snprintf(char *out, std::size_t maxlen, const char *format,...)
D operator-(const D &r) const
bool operator<=(const T &r) const