13 #include "../internal/helpers.h"
14 #include "../visitors/count.h"
20 template <
class t_Visitor,
class t_Entry>
29 if (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));
49 typename t_Enumeration,
50 typename = std::enable_if_t<std::is_enum<t_Enumeration>::value>>
55 visitor.readElement(tmp_value);
56 entry =
static_cast<t_Enumeration
>(tmp_value);
60 #define ARILES2_BASIC_TYPE(type) \
61 template <class t_Visitor> \
62 void apply_read(t_Visitor &visitor, type &entry, const typename t_Visitor::Parameters ¶m) \
64 CPPUT_TRACE_FUNCTION; \
65 CPPUT_UNUSED_ARG(param); \
66 visitor.readElement(entry); \
72 #undef ARILES2_BASIC_TYPE
81 template <
class t_Visitor,
class t_Entry>
90 if (parameters.override_parameters_)
92 writer.startMap(entry, parameters);
93 entry.arilesVirtualVisit(writer, parameters);
97 writer.startMap(entry, entry.arilesGetParameters(writer));
98 entry.arilesVirtualVisit(writer, entry.arilesGetParameters(writer));
107 typename t_Enumeration,
108 typename = std::enable_if_t<std::is_enum<t_Enumeration>::value>>
112 writer.writeElement(
static_cast<int>(entry), param);
116 #define ARILES2_BASIC_TYPE(type) \
117 template <class t_Visitor> \
118 void apply_write(t_Visitor &writer, const type &entry, const typename t_Visitor::Parameters ¶m) \
120 CPPUT_TRACE_FUNCTION; \
121 writer.writeElement(entry, param); \
130 #undef ARILES2_BASIC_TYPE
139 template <
class t_Visitor,
class t_Left,
class t_Right,
typename = ariles2::traits::is_ariles_t<t_Left>>
143 const t_Right &right,
147 if (param.compare_number_of_entries_)
149 visitor.equal_ &= (ariles2::apply<ariles2::Count>(left) == ariles2::apply<ariles2::Count>(right));
151 left.arilesVisit(visitor, right, param);
157 typename t_Enumeration,
158 typename = std::enable_if_t<std::is_enum<t_Enumeration>::value>>
161 const t_Enumeration &left,
162 const t_Enumeration &right,
165 visitor.equal_ &= (left == right);
169 #define ARILES2_BASIC_TYPE(type) \
170 template <class t_Visitor> \
171 inline void apply_compare( \
172 t_Visitor &visitor, const type &left, const type &right, const typename t_Visitor::Parameters &) \
174 visitor.equal_ &= (left == right); \
180 #define ARILES2_COMPARE_TYPES_LIST \
181 ARILES2_BASIC_INTEGER_TYPES_LIST \
182 ARILES2_BASIC_TYPE(bool) \
183 ARILES2_BASIC_TYPE(std::string)
187 #undef ARILES2_BASIC_TYPE
191 template <
class t_Visitor,
class t_Scalar>
194 const std::complex<t_Scalar> &left,
195 const std::complex<t_Scalar> &right,
203 template <
class t_Visitor>
210 visitor.equal_ &= (visitor.compareFloats(left, right, param));
214 template <
class t_Visitor>
221 visitor.equal_ &= visitor.compareFloats(left, right, param);
231 template <
class t_Visitor,
class t_Entry>
233 const t_Visitor &visitor,
239 entry.arilesVirtualVisit(visitor, param);
245 typename t_Enumeration,
246 typename = std::enable_if_t<std::is_enum<t_Enumeration>::value>>
256 template <
class t_Visitor,
typename t_Scalar>
259 std::complex<t_Scalar> &entry,
263 entry.real(param.template getDefault<t_Scalar>());
264 entry.imag(param.template getDefault<t_Scalar>());
268 #define ARILES2_BASIC_TYPE(type) \
269 template <class t_Visitor> \
270 void apply_defaults(const t_Visitor &, type &entry, const typename t_Visitor::Parameters ¶m) \
272 CPPUT_TRACE_FUNCTION; \
273 entry = param.template getDefault<type>(); \
278 #undef ARILES2_BASIC_TYPE
288 template <
class t_Visitor,
class t_Entry>
292 if constexpr (std::is_base_of_v<ariles2::Ariles, t_Entry>)
294 entry.arilesVirtualVisit(visitor, param);
306 template <
class t_Visitor,
class t_Left,
class t_Right,
typename = ariles2::traits::is_ariles_t<t_Left>>
310 const t_Right &right,
317 left.arilesVisit(visitor, right, param);
321 #define ARILES2_BASIC_TYPE(type) \
322 template <class t_Visitor> \
323 void apply_copyfrom(t_Visitor &, type &left, const type &right, const typename t_Visitor::Parameters &) \
325 CPPUT_TRACE_FUNCTION; \
332 #undef ARILES2_BASIC_TYPE
336 typename t_Enumeration,
337 typename = std::enable_if_t<std::is_enum<t_Enumeration>::value>>
341 const t_Enumeration &right,
352 template <
class t_Visitor,
class t_Left,
class t_Right,
typename = ariles2::traits::is_ariles_t<t_Left>>
363 left.arilesVisit(visitor, right, param);
367 #define ARILES2_BASIC_TYPE(type) \
368 template <class t_Visitor> \
369 void apply_copyto(t_Visitor &, const type &left, type &right, const typename t_Visitor::Parameters &) \
371 CPPUT_TRACE_FUNCTION; \
378 #undef ARILES2_BASIC_TYPE
382 typename t_Enumeration,
383 typename = std::enable_if_t<std::is_enum<t_Enumeration>::value>>
386 const t_Enumeration &left,
387 t_Enumeration &right,
#define ARILES2_COMPARE_TYPES_LIST
Generate compare methods for basic types.
#define ARILES2_COMPLEX_NUMBER_TYPES_LIST
#define ARILES2_IS_BASE_ENABLER(Base, Derived)
#define ARILES2_BASIC_TYPES_LIST
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m)
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m)
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters ¶m)
visitor::Parameters Parameters
void apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
void apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m)
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
void apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
#define CPPUT_TRACE_FUNCTION
#define CPPUT_TRACE_TYPE(type)