From 48c9cacd2bb93929e42262204d5162b9ced5a6f2 Mon Sep 17 00:00:00 2001 From: Fabian Peller <fabian.peller-konrad@kit.edu> Date: Thu, 16 Mar 2023 10:10:13 +0000 Subject: [PATCH] fix visitor methods. add special arodatatype which represents a type in data representation. --- .../aron/converter/common/CMakeLists.txt | 2 + .../converter/common/DatatypeConverter.cpp | 151 ++++++++++++++++ .../aron/converter/common/DatatypeConverter.h | 62 +++++++ .../aron/core/type/variant/container/Dict.cpp | 10 ++ .../aron/core/type/variant/container/Dict.h | 3 + .../aron/core/type/variant/container/List.cpp | 10 ++ .../aron/core/type/variant/container/List.h | 3 + .../core/type/variant/container/Object.cpp | 10 ++ .../aron/core/type/variant/container/Object.h | 3 + .../aron/core/type/variant/container/Pair.cpp | 10 ++ .../aron/core/type/variant/container/Pair.h | 3 + .../core/type/variant/container/Tuple.cpp | 10 ++ .../aron/core/type/variant/container/Tuple.h | 3 + .../core/type/variant/forward_declarations.h | 2 + .../aron/core/type/visitor/RecursiveVisitor.h | 3 - .../type/visitor/variant/VariantVisitor.cpp | 169 ++++++++++++++++++ .../type/visitor/variant/VariantVisitor.h | 53 ++++++ 17 files changed, 504 insertions(+), 3 deletions(-) create mode 100644 source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.cpp create mode 100644 source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.h diff --git a/source/RobotAPI/libraries/aron/converter/common/CMakeLists.txt b/source/RobotAPI/libraries/aron/converter/common/CMakeLists.txt index ad1ddc366..fcc6342d5 100644 --- a/source/RobotAPI/libraries/aron/converter/common/CMakeLists.txt +++ b/source/RobotAPI/libraries/aron/converter/common/CMakeLists.txt @@ -10,11 +10,13 @@ set(LIBS set(LIB_FILES Converter.cpp VectorConverter.cpp + DatatypeConverter.cpp ) set(LIB_HEADERS Converter.h VectorConverter.h + DatatypeConverter.h ) armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}") diff --git a/source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.cpp b/source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.cpp new file mode 100644 index 000000000..77743613d --- /dev/null +++ b/source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.cpp @@ -0,0 +1,151 @@ +#include "DatatypeConverter.h" + +namespace armarx::aron::converter +{ + void DatatypeConverter::visitAronVariant(const type::ObjectPtr& el) + { + auto dict = aron::make_dict(el->getPath()); + auto type = aron::make_string(el->getFullName(), Path(el->getPath(), {typeMemberName})); + dict->addElement(typeMemberName, type); + + for (const auto& [key, child] : el->getMemberTypes()) + { + DatatypeConverter converter; + aron::type::visit(converter, child); + + dict->addElement(key, converter.latest); + } + + latest = dict; + } + + void DatatypeConverter::visitAronVariant(const type::DictPtr& el) + { + auto dict = aron::make_dict(el->getPath()); + auto type = aron::make_string(el->getFullName(), Path(el->getPath(), {typeMemberName})); + dict->addElement(typeMemberName, type); + + auto acceptedType = el->getAcceptedType(); + DatatypeConverter converter; + aron::type::visit(converter, acceptedType); + dict->addElement(acceptedTypeMemberName, converter.latest); + + latest = dict; + } + + void DatatypeConverter::visitAronVariant(const type::ListPtr& el) + { + auto dict = aron::make_dict(el->getPath()); + auto type = aron::make_string(el->getFullName(), Path(el->getPath(), {typeMemberName})); + dict->addElement(typeMemberName, type); + + auto acceptedType = el->getAcceptedType(); + DatatypeConverter converter; + aron::type::visit(converter, acceptedType); + dict->addElement(acceptedTypeMemberName, converter.latest); + + latest = dict; + } + + void DatatypeConverter::visitAronVariant(const type::PairPtr& el) + { + auto dict = aron::make_dict(el->getPath()); + auto type = aron::make_string(el->getFullName(), Path(el->getPath(), {typeMemberName})); + dict->addElement(typeMemberName, type); + + auto acceptedType1 = el->getFirstAcceptedType(); + DatatypeConverter converter1; + aron::type::visit(converter1, acceptedType1); + dict->addElement(firstAcceptedTypeMemberName, converter1.latest); + + auto acceptedType2 = el->getSecondAcceptedType(); + DatatypeConverter converter2; + aron::type::visit(converter2, acceptedType2); + dict->addElement(secondAcceptedTypeMemberName, converter2.latest); + + latest = dict; + } + + void DatatypeConverter::visitAronVariant(const type::TuplePtr& el) + { + auto dict = aron::make_dict(el->getPath()); + auto type = aron::make_string(el->getFullName(), Path(el->getPath(), {typeMemberName})); + dict->addElement(typeMemberName, type); + + int i = 0; + for (const auto& child : el->getAcceptedTypes()) + { + DatatypeConverter converter; + aron::type::visit(converter, child); + + dict->addElement(acceptedTypeMemberName + "_" + std::to_string(i++), converter.latest); + } + + latest = dict; + } + + void DatatypeConverter::visitAronVariant(const type::MatrixPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::NDArrayPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::QuaternionPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::PointCloudPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::ImagePtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::IntEnumPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::IntPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::LongPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::FloatPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::DoublePtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::BoolPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::StringPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } + + void DatatypeConverter::visitAronVariant(const type::AnyObjectPtr& el) + { + latest = aron::make_string(el->getFullName(), el->getPath()); + } +} diff --git a/source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.h b/source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.h new file mode 100644 index 000000000..34201b359 --- /dev/null +++ b/source/RobotAPI/libraries/aron/converter/common/DatatypeConverter.h @@ -0,0 +1,62 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @author Fabian Peller ( fabian dot peller at kit dot edu ) + * @date 2023 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#pragma once + +#include <algorithm> +#include <vector> + +#include <RobotAPI/libraries/aron/core/data/variant/All.h> +#include <RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h> + +namespace armarx::aron::converter +{ + class DatatypeConverter : + public aron::type::ConstVariantVisitor + { + const std::string typeMemberName = "_aron_type"; + const std::string acceptedTypeMemberName = "_aron_accepted_type"; + const std::string firstAcceptedTypeMemberName = "_aron_first_accepted_type"; + const std::string secondAcceptedTypeMemberName = "_aron_second_accepted_type"; + + void visitAronVariant(const type::ObjectPtr&) override; + void visitAronVariant(const type::DictPtr&) override; + void visitAronVariant(const type::ListPtr&) override; + void visitAronVariant(const type::PairPtr&) override; + void visitAronVariant(const type::TuplePtr&) override; + void visitAronVariant(const type::MatrixPtr&) override; + void visitAronVariant(const type::NDArrayPtr&) override; + void visitAronVariant(const type::QuaternionPtr&) override; + void visitAronVariant(const type::PointCloudPtr&) override; + void visitAronVariant(const type::ImagePtr&) override; + void visitAronVariant(const type::IntEnumPtr&) override; + void visitAronVariant(const type::IntPtr&) override; + void visitAronVariant(const type::LongPtr&) override; + void visitAronVariant(const type::FloatPtr&) override; + void visitAronVariant(const type::DoublePtr&) override; + void visitAronVariant(const type::BoolPtr&) override; + void visitAronVariant(const type::StringPtr&) override; + void visitAronVariant(const type::AnyObjectPtr&) override; + + public: + aron::data::VariantPtr latest; + }; +} diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp index 482c762d1..edaeccf90 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.cpp @@ -80,6 +80,16 @@ namespace armarx::aron::type return "armarx::aron::type::Dict<" + acceptedType->getFullName() + ">"; } + std::string Dict::GetFullNamePrefix() + { + return "armarx::aron::type::Dict"; + } + + std::string Dict::GetNamePrefix() + { + return "Dict"; + } + VariantPtr Dict::navigateAbsolute(const Path& path) const { if (!path.hasElement()) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.h b/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.h index 4dfdd35e2..7ebbf72ea 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Dict.h @@ -59,6 +59,9 @@ namespace armarx::aron::type std::vector<VariantPtr> getChildren() const override; size_t childrenSize() const override; + static std::string GetFullNamePrefix(); + static std::string GetNamePrefix(); + private: // members VariantPtr acceptedType; diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp index 7ee464bc1..958596b7e 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/List.cpp @@ -80,6 +80,16 @@ namespace armarx::aron::type return "armarx::aron::type::List<" + acceptedType->getFullName() + ">"; } + std::string List::GetFullNamePrefix() + { + return "armarx::aron::type::List"; + } + + std::string List::GetNamePrefix() + { + return "List"; + } + VariantPtr List::navigateAbsolute(const Path& path) const { if (!path.hasElement()) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/List.h b/source/RobotAPI/libraries/aron/core/type/variant/container/List.h index 532146e01..67db861e2 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/List.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/List.h @@ -58,6 +58,9 @@ namespace armarx::aron::type std::vector<VariantPtr> getChildren() const override; size_t childrenSize() const override; + static std::string GetFullNamePrefix(); + static std::string GetNamePrefix(); + private: // members VariantPtr acceptedType; diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp index 526cc9f05..4ff701603 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Object.cpp @@ -266,6 +266,16 @@ namespace armarx::aron::type return "armarx::aron::type::Object<" + this->aron->objectName + (extends ? (" : " + extends->getFullName()) : "") + ">"; } + std::string Object::GetFullNamePrefix() + { + return "armarx::aron::type::Object"; + } + + std::string Object::GetNamePrefix() + { + return "Object"; + } + VariantPtr Object::navigateAbsolute(const Path& path) const { if (!path.hasElement()) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Object.h b/source/RobotAPI/libraries/aron/core/type/variant/container/Object.h index 9924c2cbd..ccaf50b57 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Object.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Object.h @@ -86,6 +86,9 @@ namespace armarx::aron::type std::vector<VariantPtr> getChildren() const override; size_t childrenSize() const override; + static std::string GetFullNamePrefix(); + static std::string GetNamePrefix(); + private: // members std::shared_ptr<Object> extends; diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp index 40b3cac3b..c147bd3dd 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.cpp @@ -115,6 +115,16 @@ namespace armarx::aron::type return "armarx::aron::type::Pair<" + acceptedType1->getFullName() + ", " + acceptedType2->getFullName() + ">"; } + std::string Pair::GetFullNamePrefix() + { + return "armarx::aron::type::Pair"; + } + + std::string Pair::GetNamePrefix() + { + return "Pair"; + } + VariantPtr Pair::navigateAbsolute(const Path& path) const { if (!path.hasElement()) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.h b/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.h index a63f68194..e8bb11cd6 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Pair.h @@ -62,6 +62,9 @@ namespace armarx::aron::type std::vector<VariantPtr> getChildren() const override; size_t childrenSize() const override; + static std::string GetFullNamePrefix(); + static std::string GetNamePrefix(); + private: // members VariantPtr acceptedType1; diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp b/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp index 51d45e397..cdcd605f2 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.cpp @@ -112,6 +112,16 @@ namespace armarx::aron::type return "armarx::aron::type::Tuple<" + simox::alg::to_string(names, ", ") + ">"; } + std::string Tuple::GetFullNamePrefix() + { + return "armarx::aron::type::Tuple"; + } + + std::string Tuple::GetNamePrefix() + { + return "Tuple"; + } + VariantPtr Tuple::navigateAbsolute(const Path& path) const { if (!path.hasElement()) diff --git a/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.h b/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.h index 3281584c1..070bed626 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/container/Tuple.h @@ -60,6 +60,9 @@ namespace armarx::aron::type std::vector<VariantPtr> getChildren() const override; size_t childrenSize() const override; + static std::string GetFullNamePrefix(); + static std::string GetNamePrefix(); + private: std::vector<VariantPtr> acceptedTypes; }; diff --git a/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h b/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h index ce0d34761..a15811e63 100644 --- a/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h +++ b/source/RobotAPI/libraries/aron/core/type/variant/forward_declarations.h @@ -31,5 +31,7 @@ namespace armarx::aron::type using StringPtr = std::shared_ptr<class String>; using BoolPtr = std::shared_ptr<class Bool>; + using AnyObjectPtr = std::shared_ptr<class AnyObject>; + } diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h b/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h index a2f46088a..0a132de31 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h +++ b/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h @@ -151,9 +151,6 @@ namespace armarx::aron::type virtual void visitMatrix(Input&) {}; virtual void visitNDArray(Input&) {}; virtual void visitQuaternion(Input&) {}; - virtual void visitOrientation(Input&) {}; - virtual void visitPosition(Input&) {}; - virtual void visitPose(Input&) {}; virtual void visitImage(Input&) {}; virtual void visitPointCloud(Input&) {}; virtual void visitIntEnum(Input&) {}; diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp index d2b1c19a0..72e02863e 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp +++ b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.cpp @@ -147,6 +147,12 @@ namespace armarx::aron::type visitAronVariant(aron); } + void ConstVariantVisitor::visitAnyObject(Input& i) + { + auto aron = type::AnyObject::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + void ConstVariantVisitor::visitAronVariant(const type::ObjectPtr&) {} void ConstVariantVisitor::visitAronVariant(const type::DictPtr&) {} void ConstVariantVisitor::visitAronVariant(const type::PairPtr&) {} @@ -164,6 +170,7 @@ namespace armarx::aron::type void ConstVariantVisitor::visitAronVariant(const type::DoublePtr&) {} void ConstVariantVisitor::visitAronVariant(const type::BoolPtr&) {} void ConstVariantVisitor::visitAronVariant(const type::StringPtr&) {} + void ConstVariantVisitor::visitAronVariant(const type::AnyObjectPtr&) {} /**************************************************************************** * RecursiveVariantVisitor @@ -227,4 +234,166 @@ namespace armarx::aron::type { return GetTupleAcceptedTypes(t); } + + void RecursiveConstVariantVisitor::visitObjectOnEnter(Input& i) + { + auto aron = type::Object::DynamicCastAndCheck(i); + visitAronVariantEnter(aron); + } + + void RecursiveConstVariantVisitor::visitObjectOnExit(Input& i) + { + auto aron = type::Object::DynamicCastAndCheck(i); + visitAronVariantExit(aron); + } + + void RecursiveConstVariantVisitor::visitDictOnEnter(Input& i) + { + auto aron = type::Dict::DynamicCastAndCheck(i); + visitAronVariantEnter(aron); + } + + void RecursiveConstVariantVisitor::visitDictOnExit(Input& i) + { + auto aron = type::Dict::DynamicCastAndCheck(i); + visitAronVariantExit(aron); + } + + void RecursiveConstVariantVisitor::visitPairOnEnter(Input& i) + { + auto aron = type::Pair::DynamicCastAndCheck(i); + visitAronVariantEnter(aron); + } + + void RecursiveConstVariantVisitor::visitPairOnExit(Input& i) + { + auto aron = type::Pair::DynamicCastAndCheck(i); + visitAronVariantExit(aron); + } + + void RecursiveConstVariantVisitor::visitTupleOnEnter(Input& i) + { + auto aron = type::Tuple::DynamicCastAndCheck(i); + visitAronVariantEnter(aron); + } + + void RecursiveConstVariantVisitor::visitTupleOnExit(Input& i) + { + auto aron = type::Tuple::DynamicCastAndCheck(i); + visitAronVariantExit(aron); + } + + void RecursiveConstVariantVisitor::visitListOnEnter(Input& i) + { + auto aron = type::List::DynamicCastAndCheck(i); + visitAronVariantEnter(aron); + } + + void RecursiveConstVariantVisitor::visitListOnExit(Input& i) + { + auto aron = type::List::DynamicCastAndCheck(i); + visitAronVariantExit(aron); + } + + void RecursiveConstVariantVisitor::visitMatrix(Input& i) + { + auto aron = type::Matrix::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitNDArray(Input& i) + { + auto aron = type::NDArray::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitQuaternion(Input & i) + { + auto aron = type::Quaternion::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitImage(Input& i) + { + auto aron = type::Image::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitPointCloud(Input& i) + { + auto aron = type::PointCloud::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitIntEnum(Input& i) + { + auto aron = type::IntEnum::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitInt(Input& i) + { + auto aron = type::Int::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitLong(Input& i) + { + auto aron = type::Long::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitFloat(Input& i) + { + auto aron = type::Float::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitDouble(Input& i) + { + auto aron = type::Double::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitBool(Input& i) + { + auto aron = type::Bool::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitString(Input& i) + { + auto aron = type::String::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitAnyObject(Input& i) + { + auto aron = type::AnyObject::DynamicCastAndCheck(i); + visitAronVariant(aron); + } + + void RecursiveConstVariantVisitor::visitAronVariantEnter(const type::ObjectPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantExit(const type::ObjectPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantEnter(const type::DictPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantExit(const type::DictPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantEnter(const type::PairPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantExit(const type::PairPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantEnter(const type::TuplePtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantExit(const type::TuplePtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantEnter(const type::ListPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariantExit(const type::ListPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::NDArrayPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::MatrixPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::QuaternionPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::ImagePtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::PointCloudPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::IntEnumPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::IntPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::LongPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::FloatPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::DoublePtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::BoolPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::StringPtr&) {} + void RecursiveConstVariantVisitor::visitAronVariant(const type::AnyObjectPtr&) {} } diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h index e7e87fa45..fccfae04a 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h +++ b/source/RobotAPI/libraries/aron/core/type/visitor/variant/VariantVisitor.h @@ -60,6 +60,7 @@ namespace armarx::aron::type void visitDouble(Input&) override; void visitBool(Input&) override; void visitString(Input&) override; + void visitAnyObject(Input&) override; // Use these if you do not want to cast manually virtual void visitAronVariant(const type::ObjectPtr&); @@ -79,6 +80,7 @@ namespace armarx::aron::type virtual void visitAronVariant(const type::DoublePtr&); virtual void visitAronVariant(const type::BoolPtr&); virtual void visitAronVariant(const type::StringPtr&); + virtual void visitAronVariant(const type::AnyObjectPtr&); }; /** @@ -98,6 +100,57 @@ namespace armarx::aron::type static TupleElements GetTupleAcceptedTypes(Input& t); TupleElements getTupleAcceptedTypes(Input& t) override; + void visitObjectOnEnter(Input&) override; + void visitObjectOnExit(Input&) override; + void visitDictOnEnter(Input&) override; + void visitDictOnExit(Input&) override; + void visitPairOnEnter(Input&) override; + void visitPairOnExit(Input&) override; + void visitTupleOnEnter(Input&) override; + void visitTupleOnExit(Input&) override; + void visitListOnEnter(Input&) override; + void visitListOnExit(Input&) override; + + void visitMatrix(Input&) override; + void visitNDArray(Input&) override; + void visitQuaternion(Input&) override; + void visitImage(Input&) override; + void visitPointCloud(Input&) override; + void visitIntEnum(Input&) override; + void visitInt(Input&) override; + void visitLong(Input&) override; + void visitFloat(Input&) override; + void visitDouble(Input&) override; + void visitBool(Input&) override; + void visitString(Input&) override; + void visitAnyObject(Input&) override; + + + // Use these if you do not want to cast manually + virtual void visitAronVariantEnter(const type::ObjectPtr&); + virtual void visitAronVariantExit(const type::ObjectPtr&); + virtual void visitAronVariantEnter(const type::DictPtr&); + virtual void visitAronVariantExit(const type::DictPtr&); + virtual void visitAronVariantEnter(const type::ListPtr&); + virtual void visitAronVariantExit(const type::ListPtr&); + virtual void visitAronVariantEnter(const type::PairPtr&); + virtual void visitAronVariantExit(const type::PairPtr&); + virtual void visitAronVariantEnter(const type::TuplePtr&); + virtual void visitAronVariantExit(const type::TuplePtr&); + virtual void visitAronVariant(const type::MatrixPtr&); + virtual void visitAronVariant(const type::NDArrayPtr&); + virtual void visitAronVariant(const type::QuaternionPtr&); + virtual void visitAronVariant(const type::PointCloudPtr&); + virtual void visitAronVariant(const type::ImagePtr&); + virtual void visitAronVariant(const type::IntEnumPtr&); + virtual void visitAronVariant(const type::IntPtr&); + virtual void visitAronVariant(const type::LongPtr&); + virtual void visitAronVariant(const type::FloatPtr&); + virtual void visitAronVariant(const type::DoublePtr&); + virtual void visitAronVariant(const type::BoolPtr&); + virtual void visitAronVariant(const type::StringPtr&); + virtual void visitAronVariant(const type::AnyObjectPtr&); + virtual ~RecursiveConstVariantVisitor() = default; }; } -- GitLab