13 #include "../internal/helpers.h"
14 #include "../visitors/count.h"
20 template <
class t_Visitor,
class t_Entry>
24 const typename t_Visitor::Parameters ¶meters,
27 ARILES2_TRACE_FUNCTION;
29 if (
true == parameters.override_parameters_)
31 visitor.startMap(entry, parameters);
32 entry.arilesVirtualVisit(visitor, parameters);
36 visitor.startMap(entry, entry.arilesGetParameters(visitor));
37 entry.arilesVirtualVisit(visitor, entry.arilesGetParameters(visitor));
47 template <
class t_Visitor,
typename t_Enumeration>
51 const typename t_Visitor::Parameters & ,
55 ARILES2_TRACE_FUNCTION;
57 visitor.readElement(tmp_value);
58 entry =
static_cast<t_Enumeration
>(tmp_value);
62 #define ARILES2_BASIC_TYPE(type) \
63 template <class t_Visitor> \
64 void ARILES2_VISIBILITY_ATTRIBUTE apply_read( \
65 t_Visitor &visitor, type &entry, const typename t_Visitor::Parameters ¶m) \
67 ARILES2_TRACE_FUNCTION; \
68 ARILES2_UNUSED_ARG(param); \
69 visitor.readElement(entry); \
75 #undef ARILES2_BASIC_TYPE
84 template <
class t_Visitor,
class t_Entry>
88 const typename t_Visitor::Parameters ¶meters,
91 ARILES2_TRACE_FUNCTION;
93 if (
true == parameters.override_parameters_)
95 writer.startMap(entry, parameters);
96 entry.arilesVirtualVisit(writer, parameters);
100 writer.startMap(entry, entry.arilesGetParameters(writer));
101 entry.arilesVirtualVisit(writer, entry.arilesGetParameters(writer));
108 template <
class t_Visitor,
typename t_Enumeration>
111 const t_Enumeration entry,
112 const typename t_Visitor::Parameters ¶m,
115 ARILES2_TRACE_FUNCTION;
116 int tmp_value = entry;
117 writer.writeElement(tmp_value, param);
121 #define ARILES2_BASIC_TYPE(type) \
122 template <class t_Visitor> \
123 void ARILES2_VISIBILITY_ATTRIBUTE apply_write( \
124 t_Visitor &writer, const type &entry, const typename t_Visitor::Parameters ¶m) \
126 ARILES2_TRACE_FUNCTION; \
127 writer.writeElement(entry, param); \
136 #undef ARILES2_BASIC_TYPE
145 template <
class t_Visitor,
class t_Left,
class t_Right>
149 const t_Right &right,
150 const typename t_Visitor::Parameters ¶m,
153 ARILES2_TRACE_FUNCTION;
154 if (
true == param.compare_number_of_entries_)
156 visitor.equal_ &= (ariles2::apply<ariles2::Count>(left) == ariles2::apply<ariles2::Count>(right));
158 left.arilesVisit(visitor, right, param);
162 template <
class t_Visitor,
typename t_Enumeration>
165 const t_Enumeration &left,
166 const t_Enumeration &right,
167 const typename t_Visitor::Parameters & ,
170 visitor.equal_ &= (left == right);
174 #define ARILES2_BASIC_TYPE(type) \
175 template <class t_Visitor> \
176 inline void ARILES2_VISIBILITY_ATTRIBUTE apply_compare( \
177 t_Visitor &visitor, const type &left, const type &right, const typename t_Visitor::Parameters &) \
179 visitor.equal_ &= (left == right); \
185 #define ARILES2_COMPARE_TYPES_LIST \
186 ARILES2_BASIC_INTEGER_TYPES_LIST \
187 ARILES2_BASIC_TYPE(bool) \
188 ARILES2_BASIC_TYPE(std::string)
192 #undef ARILES2_BASIC_TYPE
196 template <
class t_Visitor,
class t_Scalar>
199 const std::complex<t_Scalar> &left,
200 const std::complex<t_Scalar> &right,
201 const typename t_Visitor::Parameters ¶m)
208 template <
class t_Visitor>
213 const typename t_Visitor::Parameters ¶m)
215 visitor.equal_ &= (visitor.compareFloats(left, right, param));
219 template <
class t_Visitor>
224 const typename t_Visitor::Parameters ¶m)
226 visitor.equal_ &= visitor.compareFloats(left, right, param);
236 template <
class t_Visitor,
class t_Entry>
240 const typename t_Visitor::Parameters ¶m,
243 ARILES2_TRACE_FUNCTION;
244 entry.arilesVirtualVisit(visitor, param);
248 template <
class t_Visitor,
typename t_Enumeration>
252 const typename t_Visitor::Parameters & ,
255 ARILES2_TRACE_FUNCTION;
259 template <
class t_Visitor,
typename t_Scalar>
262 std::complex<t_Scalar> &entry,
263 const typename t_Visitor::Parameters ¶m)
265 ARILES2_TRACE_FUNCTION;
266 entry.real(param.template getDefault<t_Scalar>());
267 entry.imag(param.template getDefault<t_Scalar>());
271 #define ARILES2_BASIC_TYPE(type) \
272 template <class t_Visitor> \
273 void ARILES2_VISIBILITY_ATTRIBUTE apply_defaults( \
274 const t_Visitor &, type &entry, const typename t_Visitor::Parameters ¶m) \
276 ARILES2_TRACE_FUNCTION; \
277 entry = param.template getDefault<type>(); \
282 #undef ARILES2_BASIC_TYPE
292 template <
class t_Visitor,
class t_Entry>
296 const typename t_Visitor::Parameters ¶m,
299 ARILES2_TRACE_FUNCTION;
300 entry.arilesVirtualVisit(visitor, param);
304 template <
class t_Visitor,
class t_Entry>
308 const typename t_Visitor::Parameters &,
311 ARILES2_TRACE_FUNCTION;
322 template <
class t_Visitor,
class t_Left,
class t_Right>
326 const t_Right &right,
327 const typename t_Visitor::Parameters ¶m,
330 ARILES2_TRACE_FUNCTION;
331 ARILES2_TRACE_TYPE(left);
332 ARILES2_TRACE_TYPE(right);
334 left.arilesVisit(visitor, right, param);
338 #define ARILES2_BASIC_TYPE(type) \
339 template <class t_Visitor> \
340 void ARILES2_VISIBILITY_ATTRIBUTE apply_copyfrom( \
341 t_Visitor &, type &left, const type &right, const typename t_Visitor::Parameters &) \
343 ARILES2_TRACE_FUNCTION; \
350 #undef ARILES2_BASIC_TYPE
352 template <
class t_Visitor,
typename t_Enumeration>
356 const t_Enumeration &right,
357 const typename t_Visitor::Parameters &,
360 ARILES2_TRACE_FUNCTION;
368 template <
class t_Visitor,
class t_Left,
class t_Right>
373 const typename t_Visitor::Parameters ¶m,
376 ARILES2_TRACE_FUNCTION;
377 ARILES2_TRACE_TYPE(left);
378 ARILES2_TRACE_TYPE(right);
380 left.arilesVisit(visitor, right, param);
384 #define ARILES2_BASIC_TYPE(type) \
385 template <class t_Visitor> \
386 void ARILES2_VISIBILITY_ATTRIBUTE apply_copyto( \
387 t_Visitor &, const type &left, type &right, const typename t_Visitor::Parameters &) \
389 ARILES2_TRACE_FUNCTION; \
396 #undef ARILES2_BASIC_TYPE
398 template <
class t_Visitor,
typename t_Enumeration>
401 const t_Enumeration &left,
402 t_Enumeration &right,
403 const typename t_Visitor::Parameters &,
406 ARILES2_TRACE_FUNCTION;