Ariles
Loading...
Searching...
No Matches
std_chrono.h
Go to the documentation of this file.
1/**
2 @file
3 @author Alexander Sherikov
4
5 @copyright 2026 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6 (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7
8 @brief
9*/
10
11#pragma once
12
13#include <chrono>
14#include <ratio>
15#include "../internal/helpers.h"
16
17
18namespace ariles2
19{
20 namespace read
21 {
22 template <class t_Visitor, class t_Rep, class t_Period>
24 t_Visitor &visitor,
25 std::chrono::duration<t_Rep, t_Period> &entry,
26 const typename t_Visitor::Parameters &param)
27 {
29 CPPUT_UNUSED_ARG(param);
30 t_Rep value;
31 visitor.readElement(value);
32 entry = std::chrono::duration<t_Rep, t_Period>(value);
33 }
34
35
36 template <class t_Visitor, class t_Clock, class t_Duration>
38 t_Visitor &visitor,
39 std::chrono::time_point<t_Clock, t_Duration> &entry,
40 const typename t_Visitor::Parameters &param)
41 {
43 CPPUT_UNUSED_ARG(param);
44 typename t_Duration::rep value;
45 visitor.readElement(value);
46 entry = std::chrono::time_point<t_Clock, t_Duration>(std::chrono::duration_cast<t_Duration>(
47 std::chrono::duration<typename t_Duration::rep, typename t_Duration::period>(value)));
48 }
49 } // namespace read
50} // namespace ariles2
51
52
53namespace ariles2
54{
55 namespace write
56 {
57 template <class t_Visitor, class t_Rep, class t_Period>
59 t_Visitor &writer,
60 const std::chrono::duration<t_Rep, t_Period> &entry,
61 const typename t_Visitor::Parameters &param)
62 {
64 CPPUT_UNUSED_ARG(param);
65 t_Rep count = entry.count();
66 writer.writeElement(count, param);
67 }
68
69
70 template <class t_Visitor, class t_Clock, class t_Duration>
72 t_Visitor &writer,
73 const std::chrono::time_point<t_Clock, t_Duration> &entry,
74 const typename t_Visitor::Parameters &param)
75 {
77 CPPUT_UNUSED_ARG(param);
78 typename t_Duration::rep count = std::chrono::duration_cast<t_Duration>(entry.time_since_epoch()).count();
79 writer.writeElement(count, param);
80 }
81 } // namespace write
82} // namespace ariles2
83
84
85namespace ariles2
86{
87 namespace compare
88 {
89 template <class t_Visitor, class t_Rep, class t_Period>
91 t_Visitor &visitor,
92 const std::chrono::duration<t_Rep, t_Period> &left,
93 const std::chrono::duration<t_Rep, t_Period> &right,
94 const typename t_Visitor::Parameters &param)
95 {
97 CPPUT_UNUSED_ARG(param);
98 t_Rep left_count = left.count();
99 t_Rep right_count = right.count();
100 apply_compare(visitor, left_count, right_count, param);
101 }
102
103
104 template <class t_Visitor, class t_Clock, class t_Duration>
106 t_Visitor &visitor,
107 const std::chrono::time_point<t_Clock, t_Duration> &left,
108 const std::chrono::time_point<t_Clock, t_Duration> &right,
109 const typename t_Visitor::Parameters &param)
110 {
112 CPPUT_UNUSED_ARG(param);
113 typename t_Duration::rep left_count = left.time_since_epoch().count();
114 typename t_Duration::rep right_count = right.time_since_epoch().count();
115 apply_compare(visitor, left_count, right_count, param);
116 }
117 } // namespace compare
118} // namespace ariles2
119
120
121namespace ariles2
122{
123 namespace defaults
124 {
125 template <class t_Visitor, class t_Rep, class t_Period>
127 const t_Visitor & /*visitor*/,
128 std::chrono::duration<t_Rep, t_Period> &entry,
129 const typename t_Visitor::Parameters & /*param*/)
130 {
132 entry = std::chrono::duration<t_Rep, t_Period>::zero();
133 }
134
135
136 template <class t_Visitor, class t_Clock, class t_Duration>
138 const t_Visitor & /*visitor*/,
139 std::chrono::time_point<t_Clock, t_Duration> &entry,
140 const typename t_Visitor::Parameters & /*param*/)
141 {
143 entry = std::chrono::time_point<t_Clock, t_Duration>::min();
144 }
145 } // namespace defaults
146} // namespace ariles2
147
148
149namespace ariles2
150{
151 namespace process
152 {
153 template <class t_Visitor, class t_Rep, class t_Period>
155 const t_Visitor &visitor,
156 std::chrono::duration<t_Rep, t_Period> &entry,
157 const typename t_Visitor::Parameters &param)
158 {
160 CPPUT_UNUSED_ARG(param);
161 t_Rep count = entry.count();
162 apply_process(visitor, count, param);
163 entry = std::chrono::duration<t_Rep, t_Period>(count);
164 }
165
166
167 template <class t_Visitor, class t_Clock, class t_Duration>
169 const t_Visitor &visitor,
170 std::chrono::time_point<t_Clock, t_Duration> &entry,
171 const typename t_Visitor::Parameters &param)
172 {
174 CPPUT_UNUSED_ARG(param);
175 t_Duration duration = entry.time_since_epoch();
176 apply_process(visitor, duration, param);
177 entry = std::chrono::time_point<t_Clock, t_Duration>(duration);
178 }
179 } // namespace process
180} // namespace ariles2
181
182
183namespace ariles2
184{
185 namespace copyfrom
186 {
187 template <class t_Visitor, class t_Rep, class t_Period>
189 t_Visitor & /*visitor*/,
190 std::chrono::duration<t_Rep, t_Period> &left,
191 const std::chrono::duration<t_Rep, t_Period> &right,
192 const typename t_Visitor::Parameters & /*param*/)
193 {
195 t_Rep right_count = right.count();
196 std::chrono::duration<t_Rep, t_Period> converted_right =
197 std::chrono::duration_cast<std::chrono::duration<t_Rep, t_Period>>(
198 std::chrono::duration<t_Rep, t_Period>(right_count));
199 left = converted_right;
200 }
201
202
203 template <class t_Visitor, class t_Clock, class t_Duration>
205 t_Visitor & /*visitor*/,
206 std::chrono::time_point<t_Clock, t_Duration> &left,
207 const std::chrono::time_point<t_Clock, t_Duration> &right,
208 const typename t_Visitor::Parameters & /*param*/)
209 {
211 t_Duration right_duration = right.time_since_epoch();
212 t_Duration converted_duration = std::chrono::duration_cast<t_Duration>(right_duration);
213 left = std::chrono::time_point<t_Clock, t_Duration>(converted_duration);
214 }
215 } // namespace copyfrom
216
217
218 namespace copyto
219 {
220 template <class t_Visitor, class t_Rep, class t_Period>
222 t_Visitor & /*visitor*/,
223 const std::chrono::duration<t_Rep, t_Period> &left,
224 std::chrono::duration<t_Rep, t_Period> &right,
225 const typename t_Visitor::Parameters & /*param*/)
226 {
228 t_Rep left_count = left.count();
229 t_Rep converted_left = std::chrono::duration_cast<std::chrono::duration<t_Rep, t_Period>>(
230 std::chrono::duration<t_Rep, t_Period>(left_count))
231 .count();
232 right = std::chrono::duration<t_Rep, t_Period>(converted_left);
233 }
234
235
236 template <class t_Visitor, class t_Clock, class t_Duration>
238 t_Visitor & /*visitor*/,
239 const std::chrono::time_point<t_Clock, t_Duration> &left,
240 std::chrono::time_point<t_Clock, t_Duration> &right,
241 const typename t_Visitor::Parameters & /*param*/)
242 {
244 t_Duration left_duration = left.time_since_epoch();
245 t_Duration converted_duration = std::chrono::duration_cast<t_Duration>(left_duration);
246 right = std::chrono::time_point<t_Clock, t_Duration>(converted_duration);
247 }
248 } // namespace copyto
249} // namespace ariles2
#define CPPUT_UNUSED_ARG(parameter)
Definition misc.h:19
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:140
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:307
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:353
void apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
Definition basic.h:232
void apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param)
Definition basic.h:289
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
Definition basic.h:21
void apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
Definition basic.h:82
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126