11class CLASS_DECL_ACME time :
21 constexpr time():time(0, 0) {}
22 constexpr time(::i64 iSecond, ::i64 iNanosecond) {m_iSecond = iSecond; m_iNanosecond = iNanosecond; normalize();}
23 constexpr time(
zero_t) :time(0, 0) {}
24 time(::f64 d) {m_iSecond = (::i64)d; m_iNanosecond = (::i64) ((d - floor(d)) * 1'000'000'000.0); normalize();}
25 constexpr time(
const class ::time& time) {m_iSecond = time.m_iSecond; m_iNanosecond = time.m_iNanosecond;}
26 constexpr time(
const struct ::timespec& timespec) {m_iSecond = timespec.tv_sec; m_iNanosecond = timespec.tv_nsec; normalize(); }
27 inline time(
const class duration & duration);
28 inline time(const ::integral_nanosecond & integral);
29 inline time(const ::floating_nanosecond & floating);
30 inline time(const ::integral_microsecond & integral);
31 inline time(const ::floating_microsecond & floating);
32 inline time(const ::integral_millisecond & integral);
33 inline time(const ::floating_millisecond & floating);
34 inline time(const ::integral_second & integral);
35 inline time(const ::floating_second & floating);
36 inline time(const ::integral_minute & integral);
37 inline time(const ::floating_minute & floating);
38 inline time(const ::integral_hour & integral);
39 inline time(const ::floating_hour & floating);
40 inline time(const ::integral_day & integral);
41 inline time(const ::floating_day & floating);
44 static class ::time now();
46 inline class ::time elapsed(
const class ::time& waitSample = now()) {
return waitSample - *
this; }
49 constexpr class ::time &operator =(
const struct ::timespec & timespec)
52 m_iSecond = timespec.tv_sec;
53 m_iNanosecond = timespec.tv_nsec;
59 constexpr class ::time & normalize()
62 normalize_second_nanosecond(m_iSecond, m_iNanosecond);
69 constexpr time & operator += (
const time & time)
72 add_second_nanosecond(m_iSecond, m_iNanosecond, time.m_iSecond, time.m_iNanosecond);
79 constexpr time & operator -= (
const time & time)
82 subtract_second_nanosecond(m_iSecond, m_iNanosecond, time.m_iSecond, time.m_iNanosecond);
89 constexpr class ::time operator + (
const time & time)
const
92 class ::time timeResult(*
this);
101 constexpr class ::time operator - (
const time & time)
const
104 class ::time timeResult(*
this);
111 inline bool operator !()
const {
return m_iSecond != 0 && m_iNanosecond != 0; }
114 constexpr integral_millisecond integral_milliseconds()
const {
return m_iSecond * 1'000 + m_iNanosecond / 1'000'000;}
117 constexpr ::u32 ::u32()
const {
return constrain_u32(integral_milliseconds().m_i); }
119 constexpr operator ::u32()
const {
return this->::u32(); }
123 DECLARE_COMPARISON_WITH_DURATION(NON_INLINE)
126 template < prototype_number NUMBER >
127 inline class time operator / (const NUMBER & number)
const{
return time(m_iSecond / number, m_iNanosecond / number); }
128 template < prototype_number NUMBER >
129 inline class time operator * (
const NUMBER & number)
const{
return time(m_iSecond * number, m_iNanosecond * number); }