VariantVisitor.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5 * Karlsruhe Institute of Technology (KIT), all rights reserved.
6 *
7 * ArmarX is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * ArmarX is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu)
20 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21 * GNU General Public License
22 */
23
24#pragma once
25
26#include <map>
27#include <string>
28#include <vector>
29
32#include "../RecursiveVisitor.h"
33
34namespace armarx::aron::data
35{
36 /**
37 * @see type/visitor/variant/VariantVisitor.h
38 */
39 struct ConstVariantVisitor : virtual public Visitor<const data::VariantPtr>
40 {
43 virtual ~ConstVariantVisitor() = default;
44
45 // Already implemented so that they cast the input and call specilized method below
46 // Override if you do not want to use the specialized methods
47 void visitDict(Input& i) override;
48 void visitList(Input& i) override;
49 void visitNDArray(Input& i) override;
50 void visitInt(Input& i) override;
51 void visitLong(Input& i) override;
52 void visitFloat(Input& i) override;
53 void visitDouble(Input& i) override;
54 void visitBool(Input& i) override;
55 void visitString(Input& i) override;
56
57 // Use these if you do not want to cast manually
58 virtual void visitAronVariant(const data::DictPtr&);
59 virtual void visitAronVariant(const data::ListPtr&);
60 virtual void visitAronVariant(const data::NDArrayPtr&);
61 virtual void visitAronVariant(const data::IntPtr&);
62 virtual void visitAronVariant(const data::LongPtr&);
63 virtual void visitAronVariant(const data::FloatPtr&);
64 virtual void visitAronVariant(const data::DoublePtr&);
65 virtual void visitAronVariant(const data::BoolPtr&);
66 virtual void visitAronVariant(const data::StringPtr&);
67 };
68
69 /**
70 * @see type/visitor/variant/VariantVisitor.h
71 */
73 virtual public TypedVisitor<const data::VariantPtr, const type::VariantPtr>
74 {
77 virtual ~ConstTypedVariantVisitor() = default;
78
79 // see above
80 void visitObject(DataInput& i, TypeInput& j) override;
81 void visitDict(DataInput&, TypeInput&) override;
82 void visitPair(DataInput&, TypeInput&) override;
83 void visitTuple(DataInput&, TypeInput&) override;
84 void visitList(DataInput&, TypeInput&) override;
85 void visitMatrix(DataInput&, TypeInput&) override;
86 void visitNDArray(DataInput&, TypeInput&) override;
87 void visitQuaternion(DataInput&, TypeInput&) override;
88 void visitImage(DataInput&, TypeInput&) override;
89 void visitPointCloud(DataInput&, TypeInput&) override;
90 void visitIntEnum(DataInput&, TypeInput&) override;
91 void visitInt(DataInput&, TypeInput&) override;
92 void visitLong(DataInput&, TypeInput&) override;
93 void visitFloat(DataInput&, TypeInput&) override;
94 void visitDouble(DataInput&, TypeInput&) override;
95 void visitBool(DataInput&, TypeInput&) override;
96 void visitString(DataInput&, TypeInput&) override;
97
98 // see above
99 virtual void visitAronVariant(const data::DictPtr&, const type::ObjectPtr&);
100 virtual void visitAronVariant(const data::DictPtr&, const type::DictPtr&);
101 virtual void visitAronVariant(const data::ListPtr&, const type::ListPtr&);
102 virtual void visitAronVariant(const data::ListPtr&, const type::PairPtr&);
103 virtual void visitAronVariant(const data::ListPtr&, const type::TuplePtr&);
104 virtual void visitAronVariant(const data::NDArrayPtr&, const type::MatrixPtr&);
105 virtual void visitAronVariant(const data::NDArrayPtr&, const type::NDArrayPtr&);
106 virtual void visitAronVariant(const data::NDArrayPtr&, const type::QuaternionPtr&);
107 virtual void visitAronVariant(const data::NDArrayPtr&, const type::PointCloudPtr&);
108 virtual void visitAronVariant(const data::NDArrayPtr&, const type::ImagePtr&);
109 virtual void visitAronVariant(const data::IntPtr&, const type::IntEnumPtr&);
110 virtual void visitAronVariant(const data::IntPtr&, const type::IntPtr&);
111 virtual void visitAronVariant(const data::LongPtr&, const type::LongPtr&);
112 virtual void visitAronVariant(const data::FloatPtr&, const type::FloatPtr&);
113 virtual void visitAronVariant(const data::DoublePtr&, const type::DoublePtr&);
114 virtual void visitAronVariant(const data::BoolPtr&, const type::BoolPtr&);
115 virtual void visitAronVariant(const data::StringPtr&, const type::StringPtr&);
116 };
117
118 /**
119 * @see type/visitor/variant/VariantVisitor.h
120 */
121 struct RecursiveConstVariantVisitor : virtual public RecursiveVisitor<const data::VariantPtr>
122 {
125 MapElements getDictElements(Input& n) override;
128 virtual ~RecursiveConstVariantVisitor() = default;
129
130 void visitDictOnEnter(Input& i) override;
131 void visitDictOnExit(Input& i) override;
132 void visitListOnEnter(Input& i) override;
133 void visitListOnExit(Input& i) override;
134 void visitNDArray(Input& i) override;
135 void visitInt(Input& i) override;
136 void visitLong(Input& i) override;
137 void visitFloat(Input& i) override;
138 void visitDouble(Input& i) override;
139 void visitBool(Input& i) override;
140 void visitString(Input& i) override;
141
142 virtual void visitAronVariantOnEnter(const data::DictPtr&);
143 virtual void visitAronVariantOnExit(const data::DictPtr&);
144 virtual void visitAronVariantOnEnter(const data::ListPtr&);
145 virtual void visitAronVariantOnExit(const data::ListPtr&);
146 virtual void visitAronVariant(const data::NDArrayPtr&);
147 virtual void visitAronVariant(const data::IntPtr&);
148 virtual void visitAronVariant(const data::LongPtr&);
149 virtual void visitAronVariant(const data::FloatPtr&);
150 virtual void visitAronVariant(const data::DoublePtr&);
151 virtual void visitAronVariant(const data::BoolPtr&);
152 virtual void visitAronVariant(const data::StringPtr&);
153 };
154
155 /**
156 * @see type/visitor/variant/VariantVisitor.h
157 */
158 struct RecursiveVariantVisitor : virtual public RecursiveVisitor<data::VariantPtr>
159 {
161 std::map<std::string, InputNonConst> getDictElements(Input& n) override;
162 std::vector<InputNonConst> getListElements(Input& n) override;
163 virtual ~RecursiveVariantVisitor() = default;
164
165 void visitDictOnEnter(Input& i) override;
166 void visitDictOnExit(Input& i) override;
167 void visitListOnEnter(Input& i) override;
168 void visitListOnExit(Input& i) override;
169 void visitNDArray(Input& i) override;
170 void visitInt(Input& i) override;
171 void visitLong(Input& i) override;
172 void visitFloat(Input& i) override;
173 void visitDouble(Input& i) override;
174 void visitBool(Input& i) override;
175 void visitString(Input& i) override;
176
181 virtual void visitAronVariant(data::NDArrayPtr&);
182 virtual void visitAronVariant(data::IntPtr&);
183 virtual void visitAronVariant(data::LongPtr&);
184 virtual void visitAronVariant(data::FloatPtr&);
185 virtual void visitAronVariant(data::DoublePtr&);
186 virtual void visitAronVariant(data::BoolPtr&);
187 virtual void visitAronVariant(data::StringPtr&);
188 };
189
190 /**
191 * @see type/visitor/variant/VariantVisitor.h
192 */
194 virtual public RecursiveTypedVisitor<const data::VariantPtr, const type::VariantPtr>
195 {
198 /* This override exists for visitors that need to handle untyped members in the hierarchy.
199 * Using it instead of `GetObjectElements` will allow your visitor to visit objects with
200 * a nullptr as their type. However, you will have to handle nullptr types in your
201 * visitor's methods.
202 */
208
215
216 // see above
217 void visitObjectOnEnter(DataInput&, TypeInput&) override;
218 void visitDictOnEnter(DataInput&, TypeInput&) override;
219 void visitPairOnEnter(DataInput&, TypeInput&) override;
220 void visitTupleOnEnter(DataInput&, TypeInput&) override;
221 void visitListOnEnter(DataInput&, TypeInput&) override;
222 void visitObjectOnExit(DataInput& i, TypeInput& j) override;
223 void visitDictOnExit(DataInput&, TypeInput&) override;
224 void visitPairOnExit(DataInput&, TypeInput&) override;
225 void visitTupleOnExit(DataInput&, TypeInput&) override;
226 void visitListOnExit(DataInput&, TypeInput&) override;
227 void visitMatrix(DataInput&, TypeInput&) override;
228 void visitNDArray(DataInput&, TypeInput&) override;
229 void visitQuaternion(DataInput&, TypeInput&) override;
230 void visitImage(DataInput&, TypeInput&) override;
231 void visitPointCloud(DataInput&, TypeInput&) override;
232 void visitIntEnum(DataInput&, TypeInput&) override;
233 void visitInt(DataInput&, TypeInput&) override;
234 void visitLong(DataInput&, TypeInput&) override;
235 void visitFloat(DataInput&, TypeInput&) override;
236 void visitDouble(DataInput&, TypeInput&) override;
237 void visitBool(DataInput&, TypeInput&) override;
238 void visitString(DataInput&, TypeInput&) override;
239
240 // see above
241 virtual void visitAronVariantOnEnter(const data::DictPtr&, const type::ObjectPtr&);
242 virtual void visitAronVariantOnEnter(const data::DictPtr&, const type::DictPtr&);
243 virtual void visitAronVariantOnEnter(const data::ListPtr&, const type::ListPtr&);
244 virtual void visitAronVariantOnEnter(const data::ListPtr&, const type::PairPtr&);
245 virtual void visitAronVariantOnEnter(const data::ListPtr&, const type::TuplePtr&);
246 virtual void visitAronVariantOnExit(const data::DictPtr&, const type::ObjectPtr&);
247 virtual void visitAronVariantOnExit(const data::DictPtr&, const type::DictPtr&);
248 virtual void visitAronVariantOnExit(const data::ListPtr&, const type::ListPtr&);
249 virtual void visitAronVariantOnExit(const data::ListPtr&, const type::PairPtr&);
250 virtual void visitAronVariantOnExit(const data::ListPtr&, const type::TuplePtr&);
251 virtual void visitAronVariant(const data::NDArrayPtr&, const type::MatrixPtr&);
252 virtual void visitAronVariant(const data::NDArrayPtr&, const type::NDArrayPtr&);
253 virtual void visitAronVariant(const data::NDArrayPtr&, const type::QuaternionPtr&);
254 virtual void visitAronVariant(const data::NDArrayPtr&, const type::PointCloudPtr&);
255 virtual void visitAronVariant(const data::NDArrayPtr&, const type::ImagePtr&);
256 virtual void visitAronVariant(const data::IntPtr&, const type::IntEnumPtr&);
257 virtual void visitAronVariant(const data::IntPtr&, const type::IntPtr&);
258 virtual void visitAronVariant(const data::LongPtr&, const type::LongPtr&);
259 virtual void visitAronVariant(const data::FloatPtr&, const type::FloatPtr&);
260 virtual void visitAronVariant(const data::DoublePtr&, const type::DoublePtr&);
261 virtual void visitAronVariant(const data::BoolPtr&, const type::BoolPtr&);
262 virtual void visitAronVariant(const data::StringPtr&, const type::StringPtr&);
263 };
264} // namespace armarx::aron::data
A convenience header to include all aron files (full include, not forward declared)
std::shared_ptr< Dict > DictPtr
Definition Dict.h:42
std::shared_ptr< List > ListPtr
Definition List.h:41
std::shared_ptr< Bool > BoolPtr
std::shared_ptr< Float > FloatPtr
std::shared_ptr< NDArray > NDArrayPtr
Definition NDArray.h:46
std::shared_ptr< Long > LongPtr
std::shared_ptr< Int > IntPtr
std::shared_ptr< Double > DoublePtr
std::shared_ptr< String > StringPtr
std::shared_ptr< class Quaternion > QuaternionPtr
std::shared_ptr< Object > ObjectPtr
Definition Object.h:36
std::shared_ptr< class Double > DoublePtr
std::shared_ptr< class Matrix > MatrixPtr
std::shared_ptr< class Image > ImagePtr
std::shared_ptr< class Long > LongPtr
std::shared_ptr< class String > StringPtr
std::shared_ptr< class PointCloud > PointCloudPtr
std::shared_ptr< class Pair > PairPtr
std::shared_ptr< class NDArray > NDArrayPtr
std::shared_ptr< class Int > IntPtr
std::shared_ptr< class Float > FloatPtr
std::shared_ptr< class Bool > BoolPtr
std::shared_ptr< class Tuple > TuplePtr
std::shared_ptr< class Dict > DictPtr
std::shared_ptr< IntEnum > IntEnumPtr
Definition IntEnum.h:36
std::shared_ptr< class List > ListPtr
void visitPair(DataInput &, TypeInput &) override
void visitMatrix(DataInput &, TypeInput &) override
void visitString(DataInput &, TypeInput &) override
type::Descriptor getDescriptor(DataInput &i, TypeInput &j) override
void visitImage(DataInput &, TypeInput &) override
void visitObject(DataInput &i, TypeInput &j) override
void visitTuple(DataInput &, TypeInput &) override
void visitDict(DataInput &, TypeInput &) override
void visitList(DataInput &, TypeInput &) override
void visitQuaternion(DataInput &, TypeInput &) override
void visitLong(DataInput &, TypeInput &) override
void visitFloat(DataInput &, TypeInput &) override
void visitPointCloud(DataInput &, TypeInput &) override
void visitIntEnum(DataInput &, TypeInput &) override
static type::Descriptor GetDescriptor(DataInput &i, TypeInput &j)
void visitNDArray(DataInput &, TypeInput &) override
void visitInt(DataInput &, TypeInput &) override
void visitDouble(DataInput &, TypeInput &) override
void visitBool(DataInput &, TypeInput &) override
virtual void visitAronVariant(const data::DictPtr &, const type::ObjectPtr &)
data::Descriptor getDescriptor(Input &n) override
static data::Descriptor GetDescriptor(Input &n)
virtual void visitAronVariant(const data::DictPtr &)
void visitMatrix(DataInput &, TypeInput &) override
void visitString(DataInput &, TypeInput &) override
static ListElements GetListElements(DataInput &o, TypeInput &t)
void visitPairOnEnter(DataInput &, TypeInput &) override
void visitImage(DataInput &, TypeInput &) override
ListElements getListElements(DataInput &o, TypeInput &t) override
static MapElements GetDictElements(DataInput &o, TypeInput &t)
static MapElements GetObjectElements(DataInput &o, TypeInput &t)
void visitObjectOnEnter(DataInput &, TypeInput &) override
static MapElements GetObjectElementsWithNullType(DataInput &o, TypeInput &t)
void visitTupleOnEnter(DataInput &, TypeInput &) override
type::Descriptor getDescriptor(DataInput &o, TypeInput &n) override
MapElements getObjectElements(DataInput &o, TypeInput &t) override
void visitObjectOnExit(DataInput &i, TypeInput &j) override
void visitDictOnExit(DataInput &, TypeInput &) override
void visitQuaternion(DataInput &, TypeInput &) override
void visitTupleOnExit(DataInput &, TypeInput &) override
TupleElements getTupleElements(DataInput &o, TypeInput &t) override
void visitLong(DataInput &, TypeInput &) override
PairElements getPairElements(DataInput &o, TypeInput &t) override
void visitFloat(DataInput &, TypeInput &) override
void visitPointCloud(DataInput &, TypeInput &) override
virtual void visitAronVariantOnExit(const data::DictPtr &, const type::ObjectPtr &)
void visitIntEnum(DataInput &, TypeInput &) override
static TupleElements GetTupleElements(DataInput &o, TypeInput &t)
void visitNDArray(DataInput &, TypeInput &) override
void visitListOnExit(DataInput &, TypeInput &) override
virtual void visitAronVariant(const data::NDArrayPtr &, const type::MatrixPtr &)
void visitDictOnEnter(DataInput &, TypeInput &) override
void visitInt(DataInput &, TypeInput &) override
void visitDouble(DataInput &, TypeInput &) override
MapElements getDictElements(DataInput &o, TypeInput &t) override
void visitListOnEnter(DataInput &, TypeInput &) override
static PairElements GetPairElements(DataInput &o, TypeInput &t)
void visitPairOnExit(DataInput &, TypeInput &) override
virtual void visitAronVariantOnEnter(const data::DictPtr &, const type::ObjectPtr &)
void visitBool(DataInput &, TypeInput &) override
virtual void visitAronVariantOnExit(const data::DictPtr &)
data::Descriptor getDescriptor(Input &n) override
virtual void visitAronVariantOnEnter(const data::DictPtr &)
ListElements getListElements(Input &n) override
virtual void visitAronVariant(const data::NDArrayPtr &)
typename TypedVisitorBase< const data::VariantPtr, const type::VariantPtr >::TypeInput TypeInput
std::vector< std::pair< DataInputNonConst, TypeInputNonConst > > ListElements
typename TypedVisitorBase< const data::VariantPtr, const type::VariantPtr >::DataInput DataInput
std::pair< std::pair< DataInputNonConst, TypeInputNonConst >, std::pair< DataInputNonConst, TypeInputNonConst > > PairElements
std::vector< std::pair< DataInputNonConst, TypeInputNonConst > > TupleElements
std::map< std::string, std::pair< DataInputNonConst, TypeInputNonConst > > MapElements
data::Descriptor getDescriptor(Input &n) override
std::map< std::string, InputNonConst > getDictElements(Input &n) override
std::vector< InputNonConst > getListElements(Input &n) override
virtual void visitAronVariantOnExit(data::DictPtr &)
virtual void visitAronVariant(data::NDArrayPtr &)
virtual void visitAronVariantOnEnter(data::DictPtr &)
typename VisitorBase< const data::VariantPtr >::Input Input
typename TypedVisitorBase< const data::VariantPtr, const type::VariantPtr >::TypeInput TypeInput
Definition Visitor.h:94
typename TypedVisitorBase< const data::VariantPtr, const type::VariantPtr >::DataInput DataInput
Definition Visitor.h:93
typename VisitorBase< const data::VariantPtr >::Input Input
Definition Visitor.h:66