9 #ifndef __NODAMUSHI_VISITOR_IMPLE_HPP__ 10 #define __NODAMUSHI_VISITOR_IMPLE_HPP__ 12 # include <type_traits> 23 template<
typename CONTROLLER,
typename VISITOR,
typename T>
29 switch(applyVisit<VISITOR>(t))
35 result r = CONTROLLER::handleVisit(t);
37 result r2 = applyPostVisit<VISITOR>(t);
52 result r = CONTROLLER::handleVisit(t,v);
73 template<
typename CONTROLLER,
typename VISITOR,
typename T>
80 return ::nodamushi::visitor::apply<CONTROLLER,VISITOR>(*t);
86 return ::nodamushi::visitor::apply<CONTROLLER,VISITOR>(*t,v);
92 return ::nodamushi::visitor::applyController<CONTROLLER,VISITOR>(*t);
98 return ::nodamushi::visitor::applyController<CONTROLLER,VISITOR>(*t,v);
102 template<
typename CONTROLLER,
typename VISITOR,
typename T>
105 template<
typename T2>
109 auto r = ::nodamushi::visitor::apply<CONTROLLER,VISITOR>(e);
115 template<
typename T2>
119 auto r = ::nodamushi::visitor::apply<CONTROLLER,VISITOR>(e,v);
125 template<
typename T2>
129 auto r = ::nodamushi::visitor::applyController<CONTROLLER,VISITOR>(e);
135 template<
typename T2>
139 auto r = ::nodamushi::visitor::applyController<CONTROLLER,VISITOR>(e,v);
146 template<
typename CONTROLLER,
typename VISITOR,
typename T,
typename PTR>
149 template<
typename T2>
153 auto r = ::nodamushi::visitor::apply<CONTROLLER,VISITOR>(e);
159 template<
typename T2>
163 auto r = ::nodamushi::visitor::apply<CONTROLLER,VISITOR>(e,v);
169 template<
typename T2>
173 auto r = ::nodamushi::visitor::applyController<CONTROLLER,VISITOR>(e);
179 template<
typename T2>
183 auto r = ::nodamushi::visitor::applyController<CONTROLLER,VISITOR>(e,v);
196 template<
typename CONTROLLER,
typename VISITOR,
typename T>
199 using T2 =
typename std::remove_const<T>::type;
204 template<
typename CONTROLLER,
typename VISITOR,
typename T>
207 using T2 =
typename std::remove_const<T>::type;
211 template<
typename CONTROLLER,
typename VISITOR,
typename T>
214 using T2 =
typename std::remove_const<T>::type;
219 template<
typename CONTROLLER,
typename VISITOR,
typename T>
222 using T2 =
typename std::remove_const<T>::type;
231 template<
bool r,
typename VISITOR,
typename T>
struct apply;
233 template<
typename VISITOR,
typename T>
243 return VISITOR::postVisit(value);
248 return visitor.visit(value);
252 return visitor.postVisit(value);
257 template<
typename VISITOR,
typename T>
268 VISITOR::postVisit(value);
274 visitor.visit(value);
279 visitor.postVisit(value);
287 static constexpr
bool value = std::is_same<::nodamushi::visitor::result,t>::value;
295 template<
typename VISITOR,
typename T>
302 template<
typename VISITOR,
typename T>
310 template<
typename VISITOR,
typename T>
317 template<
typename VISITOR,
typename T>
327 #endif // __NODAMUSHI_VISITOR_IMPLE_HPP__ boxvec. vector<pointer<X>>
static constexpr bool value
static result apply(T2 &t)
result applyPostVisit(T &t)
static result applyController(T2 &t)
static result apply(T2 &t)
static result applyController(T2 &t, VISITOR &v)
static result applyController(T2 &t)
static result applyController(T2 &t, VISITOR &v)
static result applyPostVisit(T &value, VISITOR &visitor)
box.std::unique_ptr wrapper
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
static result applyPostVisit(T &value, VISITOR &visitor)
static result applyController(T2 &t, VISITOR &v)
static result applyPostVisit(T &value)
static result apply(T2 &t, VISITOR &v)
static result apply(T2 &t, VISITOR &v)
static result apply(T2 &t)
static result applyVisit(T &value)
static result applyPostVisit(T &value)
finish the current processing hierarchy
static result applyVisit(T &value, VISITOR &visitor)
static result applyVisit(T &value, VISITOR &visitor)
static result applyController(T2 &t, VISITOR &v)
static result apply(T2 &t, VISITOR &v)
static result apply(T2 &t)
static result applyController(T2 &t)
static result applyVisit(T &value)
static result apply(T2 &t, VISITOR &v)
result applyController(T &t)
static result applyController(T2 &t)
continue visitor processing