14 #include "../internal/helpers.h"
49 template <
class t_Visitor,
class t_Parameters,
class t_ReturnType =
void>
68 #define ARILES2_BASE_METHODS(Namespace) \
69 using Namespace::Base::arilesVirtualVisit; \
70 using Namespace::Base::arilesGetParameters;
72 #define ARILES2_METHODS(Namespace, VisitorQualifier, MethodQualifier) \
73 virtual void arilesVirtualVisit( \
74 VisitorQualifier ariles2::Namespace::Visitor &visitor, \
75 const ariles2::Namespace::Visitor::Parameters ¶m) MethodQualifier \
77 ARILES2_TRACE_FUNCTION; \
78 this->arilesVisit(visitor, param); \
80 using ariles2::Namespace::Base::arilesGetParameters;
85 template <
class t_Visitor>
89 virtual void arilesVirtualVisit(
t_Visitor &,
const typename t_Visitor::Parameters &) = 0;
93 ARILES2_TRACE_FUNCTION;
94 return (visitor.getDefaultParameters());
99 template <
class t_Visitor>
103 virtual void arilesVirtualVisit(
t_Visitor &,
const typename t_Visitor::Parameters &)
const = 0;
107 ARILES2_TRACE_FUNCTION;
108 return (visitor.getDefaultParameters());
114 #ifndef ARILES2_DISABLE
115 # ifndef ARILES2_ENABLED
116 # define ARILES2_ENABLED
120 #ifdef ARILES2_ENABLED
125 template <
class t_Ariles,
class t_Visitor,
class t_Subtree>
126 typename t_Visitor::ReturnType
apply(
128 t_Ariles &ariles_class,
129 const t_Subtree &subtree,
130 const typename t_Visitor::Parameters ¶m,
134 ARILES2_TRACE_FUNCTION;
135 return (visitor.visit(ariles_class, subtree, param));
139 template <
class t_Ariles,
class t_Visitor>
140 typename t_Visitor::ReturnType
apply(
142 t_Ariles &ariles_class,
144 const typename t_Visitor::Parameters ¶m,
147 ARILES2_TRACE_FUNCTION;
148 return (visitor.visit(ariles_class, name, param));
152 template <
class t_Visitor,
class t_Ariles>
153 typename t_Visitor::ReturnType
apply(
155 t_Ariles &ariles_class,
156 const typename t_Visitor::Parameters ¶m,
159 ARILES2_TRACE_FUNCTION;
160 return (
ariles2::apply(visitor, ariles_class, ariles_class.arilesDefaultID(), param));
164 template <
class t_Visitor,
class t_Ariles,
class t_Subtree>
165 typename t_Visitor::ReturnType
apply(
167 t_Ariles &ariles_class,
168 const t_Subtree &subtree,
172 ARILES2_TRACE_FUNCTION;
173 return (visitor.visit(ariles_class, subtree, visitor.getParameters(ariles_class)));
177 template <
class t_Visitor,
class t_Ariles>
178 typename t_Visitor::ReturnType
apply(
180 t_Ariles &ariles_class,
184 ARILES2_TRACE_FUNCTION;
185 return (visitor.visit(ariles_class, name, visitor.getParameters(ariles_class)));
189 template <
class t_Visitor,
class t_Ariles>
190 typename t_Visitor::ReturnType
apply(
192 t_Ariles &ariles_class,
195 ARILES2_TRACE_FUNCTION;
196 return (
ariles2::apply(visitor, ariles_class, ariles_class.arilesDefaultID()));
200 template <
class t_Visitor,
class t_Ariles>
201 typename t_Visitor::ReturnType
apply(
202 t_Ariles &ariles_class,
205 ARILES2_TRACE_FUNCTION;
214 template <
class t_Visitor,
class t_Ariles,
class t_Arg>
215 typename t_Visitor::ReturnType
apply(
217 t_Ariles &ariles_class,
222 ARILES2_TRACE_FUNCTION;
228 template <
class t_Visitor,
class t_Ariles,
class t_Arg>
229 typename t_Visitor::ReturnType
apply(
231 t_Ariles &ariles_class,
236 ARILES2_TRACE_FUNCTION;
242 template <
class t_Visitor,
class t_Ariles,
class t_Arg>
243 typename t_Visitor::ReturnType
apply(
245 t_Ariles &ariles_class,
249 ARILES2_TRACE_FUNCTION;
255 template <
class t_Visitor,
class t_Ariles,
class t_Arg>
256 typename t_Visitor::ReturnType
apply(
258 t_Ariles &ariles_class,
259 const typename t_Visitor::Parameters ¶m,
264 ARILES2_TRACE_FUNCTION;
270 template <
class t_Visitor,
class t_Ariles,
class t_Arg,
class t_Subtree>
271 typename t_Visitor::ReturnType
apply(
273 t_Ariles &ariles_class,
274 const t_Subtree &subtree,
280 ARILES2_TRACE_FUNCTION;
286 template <
class t_Visitor,
class t_Ariles,
class t_Arg>
287 typename t_Visitor::ReturnType
apply(
289 t_Ariles &ariles_class,
291 const typename t_Visitor::Parameters ¶m,
296 ARILES2_TRACE_FUNCTION;
302 template <
class t_Visitor,
class t_Ariles>
303 typename t_Visitor::ReturnType
apply(
304 const std::string &arg,
305 t_Ariles &ariles_class,
306 const typename t_Visitor::Parameters ¶m,
309 ARILES2_TRACE_FUNCTION;
315 template <
class t_Visitor,
class t_Ariles,
class t_Subtree>
316 typename t_Visitor::ReturnType
apply(
317 const std::string &arg,
318 t_Ariles &ariles_class,
319 const t_Subtree &subtree,
323 ARILES2_TRACE_FUNCTION;
331 template <
class t_Visitor,
class t_Left,
class t_Right>
332 typename t_Visitor::ReturnType
apply(
338 ARILES2_TRACE_FUNCTION;
340 return (visitor.visit(left, right, left.arilesDefaultID(), visitor.getParameters(left)));
344 template <
class t_Visitor,
class t_Left,
class t_Right>
345 typename t_Visitor::ReturnType
apply(
349 const std::string &name,
350 const typename t_Visitor::Parameters ¶m,
353 ARILES2_TRACE_FUNCTION;
354 return (visitor.visit(left, right, name, param));
358 template <
class t_Visitor,
class t_Left,
class t_Right>
359 typename t_Visitor::ReturnType
apply(
367 ARILES2_TRACE_FUNCTION;
368 return (visitor.visit(left, right, left.arilesDefaultID(), visitor.getParameters(left)));
372 template <
class t_Visitor,
class t_Left,
class t_Right>
373 typename t_Visitor::ReturnType
apply(
377 const typename t_Visitor::Parameters ¶m,
380 ARILES2_TRACE_FUNCTION;
381 return (
ariles2::apply(visitor, left, right, left.arilesDefaultID(), param));
391 template <
class t_One,
class t_Two,
class t_Three,
class t_Four,
class t_Five>
392 void apply(t_One, t_Two, t_Three, t_Four, t_Five)
396 template <
class t_One,
class t_Two,
class t_Three,
class t_Four>
397 void apply(t_One, t_Two, t_Three, t_Four)
401 template <
class t_One,
class t_Two,
class t_Three>
402 void apply(t_One, t_Two, t_Three)
406 template <
class t_One,
class t_Two>
407 void apply(t_One, t_Two)
411 template <
class t_One,
class t_Two>