acme
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages Concepts
millis.h
1#pragma once
2
3
4inline millis operator -(const ::millis& millis1, const ::millis& millis2);
5inline millis operator +(const ::millis& millis1, const ::millis& millis2);
6
7enum enum_now
8{
9
10 now_t{},
11
12};
13
14
15class time;
16
17
18class millis;
19
20
21inline double __double(const ::millis & millis);
22
23
24// milliseconds
25//
26// get_first_tick()
27// ::get_tick()
28class CLASS_DECL_ACME millis
29{
30public:
31
32
33 long long m_i;
34
35
36 millis() { m_i = 0; }
37 millis(enum enum_now);
38 millis(enum no_initialize_t) {}
39
40 template < primitive_integral INTEGRAL >
41 millis(INTEGRAL i) { m_i = i; }
42
43 millis(const secs & secs) { m_i = secs.m_i * 1'000; }
44 millis(const millis & millis) { m_i = millis.m_i; }
45 millis(const micros & micros);
46 millis(const nanos & nanos);
47 millis(const class time & time);
48
49 millis & operator = (const millis & millis) { m_i = millis.m_i; return *this; }
50
51 inline static millis now();
52
53 inline static millis infinite() { return {-1}; }
54
55 inline bool is_infinite() const { return m_i < 0; }
56
57 inline bool is_infinity() const { return m_i < 0; }
58
59 inline bool timeout(const millis& tickTimeout);
60
61 inline ::millis remaining(const millis & millisTimeout)
62 {
63
64 auto millisNow = now();
65
66 auto millisRemaining = millisTimeout - millisNow + *this;
67
68 return millisRemaining;
69
70 }
71
72
73 inline bool done(const ::millis & millis) const;
74 inline bool done() const;
75
76
77 inline millis elapsed(const ::millis & millis) const
78 {
79
80 return millis.m_i - m_i;
81
82 }
83
84
85 inline double sawtooth(const ::millis & tickPeriod)
86 {
87
88 return __double(elapsed() % tickPeriod) / __double(tickPeriod);
89
90 }
91
92
93 inline double period_rate(const ::millis & tickPeriod)
94 {
95
96 return __double(elapsed()) / __double(tickPeriod);
97
98 }
99
100
101 inline millis elapsed() const
102 {
103
104 return elapsed(now());
105
106 }
107
108
109 inline unsigned int unsigned int() const
110 {
111
112 return (unsigned int) (m_i % 0x100000000ULL);
113
114 }
115
116 inline long long seconds()const { return m_i / 1000; }
117
118 inline void Now()
119 {
120
121 operator = (now());
122
123 }
124
125
126 inline void Null()
127 {
128
129 m_i = 0;
130
131 }
132
133
134 inline bool on_off(const ::millis & period) const
135 {
136
137 return (elapsed().m_i % period.m_i) < period.m_i >> 1;
138
139
140 }
141
142
143 inline bool on_off(const ::millis & period, double dRate) const
144 {
145
146 return (elapsed().m_i % period.m_i) < period.m_i * dRate;
147
148
149 }
150
151 //inline bool operator == (const class ::time& time) const;
152 //inline bool operator != (const class ::time& time) const;
153 //inline bool operator < (const class ::time& time) const ;
154 //inline bool operator <= (const class ::time& time) const;
155 //inline bool operator > (const class ::time& time) const ;
156 //inline bool operator >= (const class ::time& time) const;
157 //inline millis operator - (const class ::time& time) const ;
158 //inline millis operator + (const class ::time& time) const ;
159 //inline millis& operator -= (const class ::time& time) ;
160 //inline millis& operator += (const class ::time& time) ;
161
162
163 //inline bool operator == (const ::millis & millis) const { return m_i == millis.m_i; }
164 //inline bool operator != (const ::millis & millis) const { return m_i != millis.m_i; }
165 //inline bool operator < (const ::millis & millis) const { return m_i < millis.m_i; }
166 //inline bool operator <= (const ::millis & millis) const { return m_i <= millis.m_i; }
167 //inline bool operator > (const ::millis & millis) const { return m_i > millis.m_i; }
168 //inline bool operator >= (const ::millis & millis) const { return m_i >= millis.m_i; }
169 //inline millis operator - (const ::millis & millis) const { return m_i - millis.m_i; }
170 //inline millis operator + (const ::millis & millis) const { return m_i + millis.m_i; }
171 inline millis& operator -= (const ::millis & millis) { m_i -= millis.m_i; return *this; }
172 inline millis& operator += (const ::millis & millis) { m_i += millis.m_i; return *this; }
173
174
175 //inline bool operator == (long long i) const { return m_i == i; }
176 //inline bool operator != (long long i) const { return m_i != i; }
177 //inline bool operator < (long long i) const { return m_i < i; }
178 //inline bool operator <= (long long i) const{ return m_i <= i; }
179 //inline bool operator > (long long i) const { return m_i > i; }
180 //inline bool operator >= (long long i) const { return m_i >= i; }
181 //inline millis operator - (long long i) const { return m_i - i; }
182 //inline millis operator + (long long i) const { return m_i + i; }
183 //inline millis& operator -= (long long i) { m_i -= i; return *this; }
184 //inline millis& operator += (long long i) { m_i += i; return *this; }
185
186
187 inline millis& operator *= (double d) { m_i = (long long)(m_i * d); return *this; }
188
189 inline long long operator / (const millis& millis) const { return m_i / millis.m_i; }
190 inline millis& operator /= (long long i) { m_i /= i; return *this; }
191 inline millis& operator %= (const millis & millis) { m_i %= millis.m_i; return *this; }
192
193
194 inline millis operator % (int i) const { return m_i % i; }
195 inline millis operator % (long long i) const { return m_i % i; }
196 inline millis operator % (const ::millis & millis) const { return m_i % millis.m_i; }
197
198
199 void sleep() const;
200
201
202};
203
204
205inline millis operator * (double d, const millis & millis) { return (long long)(d * millis.m_i); }
206
207
208namespace acme
209{
210
211
212 namespace chill
213 {
214
215
216 template < typename TYPE >
217 inline TYPE default_value();
218
219 template < >
220 inline unsigned int default_value < unsigned int >()
221 {
222
223 return 0;
224
225 }
226 template < >
227 inline millis default_value < millis >();
228
229
230
231 } // namespace chill
232
233
234} // namespace acme
235
236
237#define PRtick PRId64
238
239
240#define __prtick "%" PRtick " ms"
241
242
243#define U32_INFINITE_TIMEOUT ((unsigned int)0xffffffffu)
244
245
246inline double __double(const ::millis & millis) { return (double) millis.m_i; }
247
248
249inline auto __pr(const ::millis & millis) { return millis.m_i; }
250
251
252inline unsigned int __os(const ::millis & millis)
253{
254
255 if (millis.m_i > (long long) I32_MAXIMUM)
256 {
257
258 return U32_INFINITE_TIMEOUT;
259
260 }
261 else if (millis.m_i < 0)
262 {
263
264 return 0;
265
266 }
267 else
268 {
269
270 return (unsigned int) millis.m_i;
271
272 }
273
274}
275
276inline int __int(const ::millis & millis) { return (int) millis.m_i; }
277
278
279inline long long __long_long(const ::millis & millis) { return (long long) millis.m_i; }
280
281
282inline unsigned char as_byte(const ::millis & millis) { return (unsigned char) minimummax(millis.m_i, 0, 255); }
283
284
285inline millis __tick(double d) { return (long long) d; }
286
287
288inline millis operator "" _tick(unsigned long long u) { return u; }
289
290
291#ifdef CPP20
292
293
294typedef CLASS_DECL_ACME numeric_array < millis > millis_array;
295
296
297#endif
298
299
300inline secs::secs(const millis & millis) { m_i = millis.m_i / 1'000; }
301
302
303inline millis operator "" _ms(unsigned long long u) { return (long long) u; }
304
305
306inline millis operator -(const ::millis& millis1, const ::millis& millis2)
307{
308
309 return millis1.m_i - millis2.m_i;
310
311}
312
313
314inline millis operator +(const ::millis& millis1, const ::millis& millis2)
315{
316
317 return millis1.m_i + millis2.m_i;
318
319}
320
321
322
323
324
325template < primitive_number NUMBER >
326inline millis operator *(const ::millis& millis, const NUMBER& number)
327{
328
329 return (long long)(millis.m_i * number);
330
331}
332
333
334template < primitive_number NUMBER >
335inline millis operator /(const ::millis& millis, const NUMBER& number)
336{
337
338 return (long long) (millis.m_i / number);
339
340}
341
342
343
344
345
346inline long long _first_milli();
347inline long long _get_millis();
348inline double _millis() { return _get_nanos() / 1'000'000.0; }
349
350
351inline ::millis first_milli() { return _first_milli(); }
352inline ::millis get_millis() { return _get_millis(); }
353
354
355
Definition millis.h:29
Definition scalar.h:13
Definition aaa_time.h:13
#include "aura/graphics/image/context.h"
Definition aaaa__defer.h:32
Definition _tags.h:5
Definition _structures.h:47