acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
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 ::f64 __f64(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 ::i64 m_i32;
34
35
36 millis() { m_i32 = 0; }
37 millis(enum enum_now);
38 millis(enum no_initialize_t) {}
39
40 template < prototype_integral INTEGRAL >
41 millis(INTEGRAL i) { m_i32 = i; }
42
43 millis(const secs & secs) { m_i32 = secs.m_i32 * 1'000; }
44 millis(const millis & millis) { m_i32 = millis.m_i32; }
45 millis(const micros & micros);
46 millis(const nanos & nanos);
47 millis(const class time & time);
48
49 millis & operator = (const millis & millis) { m_i32 = millis.m_i32; 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_i32 < 0; }
56
57 inline bool is_infinity() const { return m_i32 < 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_i32 - m_i32;
81
82 }
83
84
85 inline ::f64 sawtooth(const ::millis & tickPeriod)
86 {
87
88 return __f64(elapsed() % tickPeriod) / __f64(tickPeriod);
89
90 }
91
92
93 inline ::f64 period_rate(const ::millis & tickPeriod)
94 {
95
96 return __f64(elapsed()) / __f64(tickPeriod);
97
98 }
99
100
101 inline millis elapsed() const
102 {
103
104 return elapsed(now());
105
106 }
107
108
109 inline ::u32 ::u32() const
110 {
111
112 return (::u32) (m_i32 % 0x100000000ULL);
113
114 }
115
116 inline ::i64 seconds()const { return m_i32 / 1000; }
117
118 inline void Now()
119 {
120
121 operator = (now());
122
123 }
124
125
126 inline void Null()
127 {
128
129 m_i32 = 0;
130
131 }
132
133
134 inline bool on_off(const ::millis & period) const
135 {
136
137 return (elapsed().m_i32 % period.m_i32) < period.m_i32 >> 1;
138
139
140 }
141
142
143 inline bool on_off(const ::millis & period, ::f64 dRate) const
144 {
145
146 return (elapsed().m_i32 % period.m_i32) < period.m_i32 * 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_i32 == millis.m_i32; }
164 //inline bool operator != (const ::millis & millis) const { return m_i32 != millis.m_i32; }
165 //inline bool operator < (const ::millis & millis) const { return m_i32 < millis.m_i32; }
166 //inline bool operator <= (const ::millis & millis) const { return m_i32 <= millis.m_i32; }
167 //inline bool operator > (const ::millis & millis) const { return m_i32 > millis.m_i32; }
168 //inline bool operator >= (const ::millis & millis) const { return m_i32 >= millis.m_i32; }
169 //inline millis operator - (const ::millis & millis) const { return m_i32 - millis.m_i32; }
170 //inline millis operator + (const ::millis & millis) const { return m_i32 + millis.m_i32; }
171 inline millis& operator -= (const ::millis & millis) { m_i32 -= millis.m_i32; return *this; }
172 inline millis& operator += (const ::millis & millis) { m_i32 += millis.m_i32; return *this; }
173
174
175 //inline bool operator == (::i64 i) const { return m_i32 == i; }
176 //inline bool operator != (::i64 i) const { return m_i32 != i; }
177 //inline bool operator < (::i64 i) const { return m_i32 < i; }
178 //inline bool operator <= (::i64 i) const{ return m_i32 <= i; }
179 //inline bool operator > (::i64 i) const { return m_i32 > i; }
180 //inline bool operator >= (::i64 i) const { return m_i32 >= i; }
181 //inline millis operator - (::i64 i) const { return m_i32 - i; }
182 //inline millis operator + (::i64 i) const { return m_i32 + i; }
183 //inline millis& operator -= (::i64 i) { m_i32 -= i; return *this; }
184 //inline millis& operator += (::i64 i) { m_i32 += i; return *this; }
185
186
187 inline millis& operator *= (::f64 d) { m_i32 = (::i64)(m_i32 * d); return *this; }
188
189 inline ::i64 operator / (const millis& millis) const { return m_i32 / millis.m_i32; }
190 inline millis& operator /= (::i64 i) { m_i32 /= i; return *this; }
191 inline millis& operator %= (const millis & millis) { m_i32 %= millis.m_i32; return *this; }
192
193
194 inline millis operator % (::i32 i) const { return m_i32 % i; }
195 inline millis operator % (::i64 i) const { return m_i32 % i; }
196 inline millis operator % (const ::millis & millis) const { return m_i32 % millis.m_i32; }
197
198
199 void sleep() const;
200
201
202};
203
204
205inline millis operator * (::f64 d, const millis & millis) { return (::i64)(d * millis.m_i32); }
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 ::u32 default_value < ::u32 >()
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 ((::u32)0xffffffffu)
244
245
246inline ::f64 __f64(const ::millis & millis) { return (::f64) millis.m_i32; }
247
248
249inline auto __pr(const ::millis & millis) { return millis.m_i32; }
250
251
252inline ::u32 __os(const ::millis & millis)
253{
254
255 if (millis.m_i32 > (::i64) I32_MAXIMUM)
256 {
257
258 return U32_INFINITE_TIMEOUT;
259
260 }
261 else if (millis.m_i32 < 0)
262 {
263
264 return 0;
265
266 }
267 else
268 {
269
270 return (::u32) millis.m_i32;
271
272 }
273
274}
275
276inline ::i32 __int(const ::millis & millis) { return (::i32) millis.m_i32; }
277
278
279inline ::i64 __i64(const ::millis & millis) { return (::i64) millis.m_i32; }
280
281
282inline ::u8 as_byte(const ::millis & millis) { return (::u8) minimummax(millis.m_i32, 0, 255); }
283
284
285inline millis __tick(::f64 d) { return (::i64) d; }
286
287
288inline millis operator""_tick(::u64 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_i32 = millis.m_i32 / 1'000; }
301
302
303inline millis operator""_ms(::u64 u) { return (::i64) u; }
304
305
306inline millis operator -(const ::millis& millis1, const ::millis& millis2)
307{
308
309 return millis1.m_i32 - millis2.m_i32;
310
311}
312
313
314inline millis operator +(const ::millis& millis1, const ::millis& millis2)
315{
316
317 return millis1.m_i32 + millis2.m_i32;
318
319}
320
321
322
323
324
325template < prototype_number NUMBER >
326inline millis operator *(const ::millis& millis, const NUMBER& number)
327{
328
329 return (::i64)(millis.m_i32 * number);
330
331}
332
333
334template < prototype_number NUMBER >
335inline millis operator /(const ::millis& millis, const NUMBER& number)
336{
337
338 return (::i64) (millis.m_i32 / number);
339
340}
341
342
343
344
345
346inline ::i64 _first_milli();
347inline ::i64 _get_millis();
348inline ::f64 _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 aaa_time.h:13
include "aura/graphics/image/context.h"
Definition aaaa__defer.h:32
Definition _tags.h:5
Definition _structures.h:48