diff --git a/source/RobotAPI/libraries/aron/converter/common/CMakeLists.txt b/source/RobotAPI/libraries/aron/converter/common/CMakeLists.txt index ad1ddc3669b4672d4d9a2f9def8cb4643b8d6821..fcc6342d5c779174e6322ff0c45bd9ca610758c2 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 0000000000000000000000000000000000000000..77743613df7297b67273debdbcb0c71c0d346dff --- /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 0000000000000000000000000000000000000000..34201b359d763ac81901135b475fd875714ab05c --- /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 482c762d1426fef9c589a5c49e1ef14689cb6dcd..edaeccf90a02ec918fdbc90733a8209616e0bc1b 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 4dfdd35e238b39b729d67c583ec9378fc19f5c0e..7ebbf72eaa7a7582d9b33157279b857c14756540 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 7ee464bc121f8059dcd075dc29752e32be9761d4..958596b7e60f201e565d7082d2e26c7107d7ce05 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 532146e010bf8217c4669649ee2da9771c0623ec..67db861e299cc4031f560fbaa6507b20f1f3fbc5 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 526cc9f053d5e7bbf1e96c5f38bbe1f49a52cfbe..4ff701603aacaebbfde78dcac172c37f5ba51ae1 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 9924c2cbd5e53a633122fa665b970cbc28bd6043..ccaf50b572c9551538e0fb12f13fbfc2412e8538 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 40b3cac3beb89df0323e08ffc681bde47ff29881..c147bd3dd3ab17a66b9e0068e6d3e044c663e67d 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 a63f6819406ce2b328e97a4026aeae21127d7b09..e8bb11cd6fa82d711d87b39cf50b1dcfbd6f71fd 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 51d45e3975bb162460fd06893e91f388ac52b9f1..cdcd605f2d475d4e8e83ab1d25a25914cc32e99a 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 3281584c15d6b4bb3e50c83ce598634a2bbec324..070bed6264c8a2d9c19751d1b7866794e6e3bfb8 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 ce0d34761f476da47b41db3afc6af464e7ac3146..a15811e6330d35b4d879202bf45859d5cc0e95ff 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 a2f46088a7b0f2261f67fac9931597cd97934f2b..0a132de3166df5d582652f07295fa084ecc05c9b 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 d2b1c19a07e2b04fbf1e547d1cc39859793c90cc..72e02863e6ca67aea5be0b20ed9999a091893292 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 e7e87fa45974a37ded813f3bfc156417238e5a02..fccfae04aff6b10bca173d3b096001af51dd6782 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; }; }