13 #ifndef ARILES_API_VERSION 14 # define ARILES_API_VERSION 1 21 template <
class t_Visitor,
class t_Entry>
25 const typename t_Visitor::Parameters ¶meters,
30 typename t_Visitor::Parameters param = parameters;
31 if (
false == param.isSet(t_Visitor::Parameters::PROPAGATE_ALLOW_MISSING_ENTRIES))
33 param.set(t_Visitor::Parameters::DEFAULT & t_Visitor::Parameters::ALLOW_MISSING_ENTRIES);
38 if (
true == param.isSet(t_Visitor::Parameters::ALLOW_MISSING_ENTRIES))
40 visitor.template startMap<t_Visitor::SIZE_LIMIT_NONE>(counter.
counter_);
44 visitor.template startMap<t_Visitor::SIZE_LIMIT_EQUAL>(counter.
counter_);
46 entry.arilesVirtualVisit(visitor, param);
49 #if 1 == ARILES_API_VERSION 59 template <
class t_Visitor,
typename t_Enumeration>
63 const typename t_Visitor::Parameters & ,
69 visitor.readElement(tmp_value);
70 entry = static_cast<t_Enumeration>(tmp_value);
74 #define ARILES_BASIC_TYPE(type) \ 75 template <class t_Visitor> \ 76 void ARILES_VISIBILITY_ATTRIBUTE apply_read( \ 77 t_Visitor &visitor, type &entry, const typename t_Visitor::Parameters ¶m) \ 79 ARILES_TRACE_FUNCTION; \ 80 ARILES_UNUSED_ARG(param); \ 81 visitor.readElement(entry); \ 86 #undef ARILES_BASIC_TYPE 95 template <
class t_Visitor,
class t_Entry>
99 const typename t_Visitor::Parameters ¶m,
106 entry.arilesVirtualVisit(writer, param);
112 template <
class t_Visitor,
typename t_Enumeration>
115 const t_Enumeration entry,
116 const typename t_Visitor::Parameters & ,
120 int tmp_value = entry;
121 writer.writeElement(tmp_value);
125 #define ARILES_BASIC_TYPE(type) \ 126 template <class t_Visitor> \ 127 void ARILES_VISIBILITY_ATTRIBUTE apply_write( \ 128 t_Visitor &writer, const type &entry, const typename t_Visitor::Parameters &) \ 130 ARILES_TRACE_FUNCTION; \ 131 writer.writeElement(entry); \ 139 #undef ARILES_BASIC_TYPE 148 template <
class t_Visitor,
class t_Left,
class t_Right>
152 const t_Right &right,
153 const typename t_Visitor::Parameters ¶m,
157 if (
true == param.compare_number_of_entries_)
162 const std::size_t left_counter = counter.
counter_;
165 visitor.equal_ &= (left_counter == counter.
counter_);
167 left.arilesVisit(visitor, right, param);
171 template <
class t_Visitor,
typename t_Enumeration>
174 const t_Enumeration &left,
175 const t_Enumeration &right,
176 const typename t_Visitor::Parameters & ,
179 visitor.equal_ &= (left == right);
183 #define ARILES_BASIC_TYPE(type) \ 184 template <class t_Visitor> \ 185 inline void ARILES_VISIBILITY_ATTRIBUTE apply_compare( \ 186 t_Visitor &visitor, const type &left, const type &right, const typename t_Visitor::Parameters &) \ 188 visitor.equal_ &= (left == right); \ 194 #define ARILES_COMPARE_TYPES_LIST \ 195 ARILES_BASIC_INTEGER_TYPES_LIST \ 196 ARILES_BASIC_TYPE(bool) \ 197 ARILES_BASIC_TYPE(std::string) 201 #undef ARILES_BASIC_TYPE 205 template <
class t_Visitor>
210 const typename t_Visitor::Parameters ¶m)
212 visitor.equal_ &= (visitor.compareFloats(left, right, param));
216 template <
class t_Visitor>
221 const typename t_Visitor::Parameters ¶m)
223 visitor.equal_ &= visitor.compareFloats(left, right, param);
233 template <
class t_Visitor,
class t_Entry>
235 const t_Visitor &visitor,
237 const typename t_Visitor::Parameters ¶m,
241 entry.arilesVirtualVisit(visitor, param);
245 template <
class t_Visitor,
typename t_Enumeration>
249 const typename t_Visitor::Parameters & ,
256 #define ARILES_BASIC_TYPE(type) \ 257 template <class t_Visitor> \ 258 void ARILES_VISIBILITY_ATTRIBUTE apply_defaults( \ 259 const t_Visitor &, type &entry, const typename t_Visitor::Parameters ¶m) \ 261 ARILES_TRACE_FUNCTION; \ 262 entry = param.template getDefault<type>(); \ 267 #undef ARILES_BASIC_TYPE 277 template <
class t_Visitor,
class t_Entry>
279 const t_Visitor &visitor,
281 const typename t_Visitor::Parameters ¶m,
285 entry.arilesVirtualVisit(visitor, param);
286 #if 1 == ARILES_API_VERSION 295 template <
class t_Visitor,
class t_Entry>
299 const typename t_Visitor::Parameters &,
void ARILES_VISIBILITY_ATTRIBUTE apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Left))
void apply(t_Visitor &visitor, t_Ariles &ariles_class, const std::string &name, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::visitor::Visitor, t_Visitor))
#define ARILES_TRACE_FUNCTION
void ARILES_VISIBILITY_ATTRIBUTE apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Entry))
void ARILES_VISIBILITY_ATTRIBUTE apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::defaults::Base, t_Entry))
#define ARILES_IS_BASE_ENABLER(Base, Derived)
#define ARILES_IS_BASE_OF(Base, Derived)
#define ARILES_BASIC_TYPES_LIST
#define ARILES_IS_ENUM_ENABLER(Enum)
#define ARILES_IS_BASE_DISABLER(Base, Derived)
void ARILES_VISIBILITY_ATTRIBUTE apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::write::Base, t_Entry))
#define ARILES_COMPARE_TYPES_LIST
Generate compare methods for basic types.
#define ARILES_VISIBILITY_ATTRIBUTE
void ARILES_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES_IS_BASE_ENABLER(ariles::read::Base, t_Entry))