Go to the documentation of this file.
26 #include <type_traits>
28 #include "../../Descriptor.h"
67 "Unknown type in visitor. The element was NULL.");
73 "Unknown type in visitor. The element was set but descriptor was undefined.");
83 template <
class T1,
class T2>
92 using MapElements = std::map<std::string, std::pair<DataInputNonConst, TypeInputNonConst>>;
93 using ListElements = std::vector<std::pair<DataInputNonConst, TypeInputNonConst>>;
94 using PairElements = std::pair<std::pair<DataInputNonConst, TypeInputNonConst>,
95 std::pair<DataInputNonConst, TypeInputNonConst>>;
96 using TupleElements = std::vector<std::pair<DataInputNonConst, TypeInputNonConst>>;
135 "Unknown type in visitor. The element was NULL.");
141 "Unknown type in visitor. The element was set but descriptor was undefined.");
148 template <
class T,
class Data>
151 template <
class T,
class Data,
class Type>
157 template <
class RecursiveVisitorImplementation>
159 typename RecursiveVisitorImplementation::Input>
162 typename RecursiveVisitorImplementation::Input& o)
169 v.visitListOnEnter(o);
171 for (
auto&
value :
v.getListElements(o))
176 v.visitListOnExit(o);
181 v.visitDictOnEnter(o);
182 for (
auto& [key,
value] :
v.getDictElements(o))
186 v.visitDictOnExit(o);
190 return v.visitNDArray(o);
192 return v.visitInt(o);
194 return v.visitLong(o);
196 return v.visitFloat(o);
198 return v.visitDouble(o);
200 return v.visitString(o);
202 return v.visitBool(o);
204 return v.visitUnknown(o);
212 template <
class RecursiveVisitorImplementation>
214 typename RecursiveVisitorImplementation::DataInput,
215 typename RecursiveVisitorImplementation::TypeInput>
218 typename RecursiveVisitorImplementation::DataInput& o,
219 typename RecursiveVisitorImplementation::TypeInput& t)
226 v.visitListOnEnter(o, t);
228 for (
auto& [
value, acceptedType] :
v.getListElements(o, t))
233 v.visitListOnExit(o, t);
238 v.visitPairOnEnter(o, t);
239 auto pair =
v.getPairElements(o, t);
240 auto first = pair.first;
241 auto second = pair.second;
244 v.visitPairOnExit(o, t);
249 v.visitTupleOnEnter(o, t);
251 for (
auto& [
value, acceptedType] :
v.getTupleElements(o, t))
256 v.visitTupleOnExit(o, t);
261 v.visitDictOnEnter(o, t);
262 for (
auto& [key, pair] :
v.getDictElements(o, t))
266 v.visitDictOnExit(o, t);
271 v.visitObjectOnEnter(o, t);
272 for (
auto& [key, pair] :
v.getObjectElements(o, t))
276 v.visitObjectOnExit(o, t);
280 return v.visitNDArray(o, t);
282 return v.visitMatrix(o, t);
284 return v.visitImage(o, t);
286 return v.visitPointCloud(o, t);
288 return v.visitQuaternion(o, t);
290 return v.visitInt(o, t);
292 return v.visitLong(o, t);
294 return v.visitFloat(o, t);
296 return v.visitDouble(o, t);
298 return v.visitString(o, t);
300 return v.visitBool(o, t);
302 return v.visitAnyObject(o, t);
304 return v.visitIntEnum(o, t);
306 return v.visitUnknown(o, t);
virtual void visitObjectOnExit(DataInput &elementData, TypeInput &elementType)
virtual PairElements getPairElements(DataInput &, TypeInput &)=0
A base class for aron exceptions.
virtual void visitListOnEnter(DataInput &elementData, TypeInput &elementType)
virtual ~RecursiveVisitor()=default
virtual void visitString(DataInput &elementData, TypeInput &elementType)
virtual void visitInt(Input &element)
virtual void visitTupleOnEnter(DataInput &elementData, TypeInput &elementType)
virtual void visitPointCloud(DataInput &elementData, TypeInput &elementType)
virtual TupleElements getTupleElements(DataInput &, TypeInput &)=0
virtual void visitPairOnEnter(DataInput &elementData, TypeInput &elementType)
typename std::remove_const< Input >::type InputNonConst
virtual void visitString(Input &element)
virtual void visitIntEnum(DataInput &elementData, TypeInput &elementType)
virtual void visitDouble(Input &element)
std::map< std::string, std::pair< DataInputNonConst, TypeInputNonConst > > MapElements
typename VisitorBase< data::VariantPtr >::Input Input
virtual void visitListOnExit(Input &element)
virtual void visitDictOnEnter(Input &element)
std::pair< std::pair< DataInputNonConst, TypeInputNonConst >, std::pair< DataInputNonConst, TypeInputNonConst > > PairElements
virtual ListElements getListElements(Input &)=0
virtual MapElements getObjectElements(DataInput &, TypeInput &)=0
virtual void visitPairOnExit(DataInput &elementData, TypeInput &elementType)
concept isRecursiveVisitor
concept isRecursiveTypedVisitor
virtual MapElements getDictElements(Input &)=0
std::shared_ptr< Value > value()
typename TypedVisitorBase< data::VariantPtr, const type::VariantPtr >::TypeInput TypeInput
virtual void visitObjectOnEnter(DataInput &elementData, TypeInput &elementType)
virtual void visitDouble(DataInput &elementData, TypeInput &elementType)
virtual ListElements getListElements(DataInput &, TypeInput &)=0
virtual void visitListOnExit(DataInput &elementData, TypeInput &elementType)
virtual void visitMatrix(DataInput &elementData, TypeInput &elementType)
requires(!aron::detail::DtoAndBoAreSame< DtoT, BoT >) void toAron(std
virtual void visitFloat(DataInput &elementData, TypeInput &elementType)
A convenience header to include all aron files (full include, not forward declared)
typename TypedVisitorBase< data::VariantPtr, const type::VariantPtr >::DataInput DataInput
virtual void visitDictOnExit(DataInput &elementData, TypeInput &elementType)
double v(double t, double v0, double a0, double j)
virtual void visitLong(Input &element)
virtual void visitImage(DataInput &elementData, TypeInput &elementType)
virtual void visitUnknown(Input &element)
virtual void visitTupleOnExit(DataInput &elementData, TypeInput &elementType)
virtual void visitUnknown(DataInput &elementData, TypeInput &elementType)
typename std::remove_const< TypeInput >::type TypeInputNonConst
requires isRecursiveVisitor< RecursiveVisitorImplementation, typename RecursiveVisitorImplementation::Input > void visitRecursive(RecursiveVisitorImplementation &v, typename RecursiveVisitorImplementation::Input &o)
virtual MapElements getDictElements(DataInput &, TypeInput &)=0
virtual void visitNDArray(DataInput &elementData, TypeInput &elementType)
std::vector< std::pair< DataInputNonConst, TypeInputNonConst > > ListElements
virtual void visitDictOnExit(Input &element)
virtual void visitNDArray(Input &element)
virtual ~RecursiveTypedVisitor()=default
std::vector< InputNonConst > ListElements
virtual void visitDictOnEnter(DataInput &elementData, TypeInput &elementType)
virtual void visitBool(DataInput &elementData, TypeInput &elementType)
virtual void visitFloat(Input &element)
virtual void visitListOnEnter(Input &element)
virtual void visitQuaternion(DataInput &elementData, TypeInput &elementType)
std::map< std::string, InputNonConst > MapElements
virtual void visitInt(DataInput &elementData, TypeInput &elementType)
virtual void visitLong(DataInput &elementData, TypeInput &elementType)
virtual void visitAnyObject(DataInput &elementData, TypeInput &elementType)
typename std::remove_const< DataInput >::type DataInputNonConst
virtual void visitBool(Input &element)
std::vector< std::pair< DataInputNonConst, TypeInputNonConst > > TupleElements