10 static const uint64_t MAIN_FREQ = 3579545ULL * 960;
11 static const unsigned MAIN_FREQ32 = MAIN_FREQ;
12 static_assert(MAIN_FREQ < (1ull << 32),
"must fit in 32 bit");
34 : time(uint64_t(duration * MAIN_FREQ)) {}
46 double toDouble()
const {
return double(time) / MAIN_FREQ32; }
47 uint64_t
length()
const {
return time; }
51 { time = d.time;
return *
this; }
55 {
return time == d.time; }
57 {
return time != d.time; }
59 {
return time < d.time; }
61 {
return time <= d.time; }
63 {
return time > d.time; }
65 {
return time >= d.time; }
80 uint64_t result = time / d.time;
83 assert(result ==
unsigned(result));
85 return unsigned(result);
88 uint64_t result = (time + d.time - 1) / d.time;
90 assert(result ==
unsigned(result));
92 return unsigned(result);
95 {
return double(time) / d.time; }
98 { time *= fact;
return *
this; }
100 { time = uint64_t(time * fact);
return *
this; }
102 { time = uint64_t(time / fact);
return *
this; }
108 uint64_t result = time / (MAIN_FREQ32 / freq);
111 assert(result ==
unsigned(result));
113 return unsigned(result);
116 template<
typename Archive>
117 void serialize(Archive& ar,
unsigned version);