1#include "AbstractNodeVisitor.h"
3namespace kDB::SPARQL::Algebra
7 template<
typename _TVisitor_,
typename _T_>
11 static _TVisitor_::ReturnType accept(_TVisitor_* _visitor,
const _T_& _t,
12 const _TVisitor_::ParametersTuple& _parameters,
13 std::index_sequence<S...>)
15 return _visitor->visit(_t, std::get<S>(_parameters)...);
18 template<
typename _TVisitor_>
22 static _TVisitor_::ReturnType accept(_TVisitor_* _visitor,
const NodeCSP& _t,
23 const _TVisitor_::ParametersTuple& _parameters,
24 std::index_sequence<S...>)
26 return _visitor->accept(_t, std::get<S>(_parameters)...);
30 template<
typename _T_>
35 template<
typename _T_>
41 template<
typename _T_>
42 using RemoveConstExplicitlySharedDataPointerT =
43 typename RemoveConstExplicitlySharedDataPointer<_T_>::type;
45 template<
typename _TVisitor_,
typename _T_>
48 template<
typename _TVisitor_,
typename _T_>
49 requires std::is_base_of_v<Node, _T_>
50 struct VisitorHelper<_TVisitor_, knowCore::ConstExplicitlySharedDataPointer<_T_>>
52 static _TVisitor_::ReturnType call(_TVisitor_* _visitor,
54 const _TVisitor_::ParametersTuple& _parameters)
59 _visitor, _t, _parameters, std::make_index_sequence<_TVisitor_::ParametersCount>());
61 return typename _TVisitor_::ReturnType();
64 template<
typename _TVisitor_,
typename _T_>
65 requires(not std::is_base_of_v<Node, RemoveConstExplicitlySharedDataPointerT<_T_>>
66 and not knowCore::details::is_specialisation_of_v<QList, _T_>
67 and not knowCore::details::is_specialisation_of_v<Alternative, _T_>)
70 static _TVisitor_::ReturnType call(_TVisitor_* _visitor,
const _T_& _t,
71 const _TVisitor_::ParametersTuple& _parameters)
75 Q_UNUSED(_parameters);
76 return typename _TVisitor_::ReturnType();
79 template<
typename _TVisitor_,
typename... _T_>
83 const _TVisitor_::ParametersTuple& _parameters)
88 _visitor, _t.node(), _parameters,
89 std::make_index_sequence<_TVisitor_::ParametersCount>());
93 return typename _TVisitor_::ReturnType();
97 template<
typename _TVisitor_,
typename _T_>
98 requires(std::is_base_of_v<Node, RemoveConstExplicitlySharedDataPointerT<_T_>>
99 or knowCore::details::is_specialisation_of_v<Alternative, _T_>)
102 static _TVisitor_::ReturnType call(_TVisitor_* _visitor,
const QList<_T_>& _t,
103 const _TVisitor_::ParametersTuple& _parameters)
105 for(
const _T_& t : _t)
109 return typename _TVisitor_::ReturnType();
112 template<
typename _TVisitor_,
typename _T_>
113 requires(not std::is_base_of_v<Node, RemoveConstExplicitlySharedDataPointerT<_T_>>
114 and not knowCore::details::is_specialisation_of_v<Alternative, _T_>)
117 static _TVisitor_::ReturnType call(_TVisitor_* _visitor,
const QList<_T_>& _t,
118 const _TVisitor_::ParametersTuple& _parameters)
122 Q_UNUSED(_parameters);
123 return typename _TVisitor_::ReturnType();
128 template<
typename _TR_,
typename... _TArgs_>
131 template<
typename _TVisitor_,
typename _T_>
137#define KDB_SPARQL_GENERATE_VISIT_CALL(_KLASS_NAME_, _TYPE_, _NAME_) \
138 details::VisitorHelper<NodeVisitor<_TR_, _TArgs_...>, _TYPE_>::call( \
139 this, _node->_NAME_(), std::make_tuple(_parameters...));
141#define KDB_SPARQL_ALGEBRA_GENERATE(_KLASS_NAME_, _MEMBER_DEF_) \
142 _TR_ visit(_KLASS_NAME_##CSP _node, const _TArgs_&... _parameters) override \
144 _MEMBER_DEF_(_KLASS_NAME_, KDB_SPARQL_GENERATE_VISIT_CALL) \
147#include "NodesDefs.h"
148#undef KDB_SPARQL_ALGEBRA_GENERATE
149#undef KDB_SPARQL_GENERATE_VISIT_CALL
Definition NodeVisitor.h:130
Definition NodeVisitor.h:9
Definition NodeVisitor.h:32
Definition NodeVisitor.h:46