From b7b31fb383fd5b4719f50422f23e3c74364c38f0 Mon Sep 17 00:00:00 2001 From: Fabian Peller-Konrad <fabian.peller-konrad@kit.edu> Date: Wed, 10 Nov 2021 14:53:57 +0100 Subject: [PATCH] updated aron visitors (no key anymore, use path instead) --- .../armem/server/MemoryRemoteGui.cpp | 3 +- .../armem/server/RemoteGuiAronDataVisitor.h | 31 +-- .../imageExtractor/ImageExtractor.cpp | 34 ++-- .../extractor/imageExtractor/ImageExtractor.h | 4 +- .../aron/core/data/visitor/RecursiveVisitor.h | 178 +++++++++--------- .../aron/core/type/visitor/RecursiveVisitor.h | 124 ++++++------ 6 files changed, 187 insertions(+), 187 deletions(-) diff --git a/source/RobotAPI/libraries/armem/server/MemoryRemoteGui.cpp b/source/RobotAPI/libraries/armem/server/MemoryRemoteGui.cpp index 8c76449e7..1f0014207 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryRemoteGui.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryRemoteGui.cpp @@ -195,8 +195,7 @@ namespace armarx::armem::server if (instance.data()) { RemoteGuiAronDataVisitor v; - aron::data::VariantPtr p; - aron::data::visitRecursive(v, instance.data(), "", p); + aron::data::visitRecursive(v, instance.data()); group = v.result; } else diff --git a/source/RobotAPI/libraries/armem/server/RemoteGuiAronDataVisitor.h b/source/RobotAPI/libraries/armem/server/RemoteGuiAronDataVisitor.h index a38c3d50d..081a5f9ef 100644 --- a/source/RobotAPI/libraries/armem/server/RemoteGuiAronDataVisitor.h +++ b/source/RobotAPI/libraries/armem/server/RemoteGuiAronDataVisitor.h @@ -35,22 +35,24 @@ namespace armarx::armem::server virtual ~RemoteGuiAronDataVisitor() = default; - void visitDictOnEnter(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& n) override + void visitDictOnEnter(const aron::data::VariantPtr& n) override { ARMARX_CHECK_NOT_NULL(n); + const std::string key = n->getPath().getLastElement(); visitEnter(key, "dict", n->childrenSize()); } - void visitDictOnExit(const std::string&, const aron::data::VariantPtr&, const aron::data::VariantPtr&) override + void visitDictOnExit(const aron::data::VariantPtr&) override { visitExit(); } - void visitListOnEnter(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& n) override + void visitListOnEnter(const aron::data::VariantPtr& n) override { ARMARX_CHECK_NOT_NULL(n); + const std::string key = n->getPath().getLastElement(); visitEnter(key, "list", n->childrenSize()); } - void visitListOnExit(const std::string&, const aron::data::VariantPtr&, const aron::data::VariantPtr&) override + void visitListOnExit(const aron::data::VariantPtr&) override { visitExit(); } @@ -59,40 +61,47 @@ namespace armarx::armem::server bool visitEnter(const std::string& key, const std::string& type, size_t size); bool visitExit(); - void visitBool(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& b) override + void visitBool(const aron::data::VariantPtr& b) override { ARMARX_CHECK_NOT_NULL(b); + const std::string key = b->getPath().getLastElement(); this->addValueLabel(key, *aron::data::Bool::DynamicCastAndCheck(b), "bool"); } - void visitDouble(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& d) override + void visitDouble(const aron::data::VariantPtr& d) override { ARMARX_CHECK_NOT_NULL(d); + const std::string key = d->getPath().getLastElement(); this->addValueLabel(key, *aron::data::Double::DynamicCastAndCheck(d), "double"); } - void visitFloat(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& f) override + void visitFloat(const aron::data::VariantPtr& f) override { ARMARX_CHECK_NOT_NULL(f); + const std::string key = f->getPath().getLastElement(); this->addValueLabel(key, *aron::data::Float::DynamicCastAndCheck(f), "float"); } - void visitInt(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& i) override + void visitInt(const aron::data::VariantPtr& i) override { ARMARX_CHECK_NOT_NULL(i); + const std::string key = i->getPath().getLastElement(); this->addValueLabel(key, *aron::data::Int::DynamicCastAndCheck(i), "int"); } - void visitLong(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& l) override + void visitLong(const aron::data::VariantPtr& l) override { ARMARX_CHECK_NOT_NULL(l); + const std::string key = l->getPath().getLastElement(); this->addValueLabel(key, *aron::data::Long::DynamicCastAndCheck(l), "long"); } - void visitString(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& string) override + void visitString(const aron::data::VariantPtr& string) override { ARMARX_CHECK_NOT_NULL(string); + const std::string key = string->getPath().getLastElement(); this->addValueLabel(key, *aron::data::String::DynamicCastAndCheck(string), "string"); } - void visitNDArray(const std::string& key, const aron::data::VariantPtr&, const aron::data::VariantPtr& array) override + void visitNDArray(const aron::data::VariantPtr& array) override { ARMARX_CHECK_NOT_NULL(array); + const std::string key = array->getPath().getLastElement(); this->addValueLabel(key, *aron::data::NDArray::DynamicCastAndCheck(array), "ND Array"); } diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp index 71e689f9d..a48b54ca4 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp +++ b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.cpp @@ -3,39 +3,27 @@ namespace armarx::armem::server::ltm::extractor { - void ImageExtractorVisitor::visitNDArray(const std::string& key, Input& parent, Input& variant) + void ImageExtractorVisitor::visitDictOnEnter(Input& data) { - ARMARX_CHECK_NOT_NULL(parent); - ARMARX_CHECK_NOT_NULL(variant); + ARMARX_CHECK_NOT_NULL(data); - auto ndarray = aron::data::NDArray::DynamicCastAndCheck(variant); - auto shape = ndarray->getShape(); - if (shape.size() == 3 && std::accumulate(std::begin(shape), std::end(shape), 1, std::multiplies<int>()) > 1000) // must be big enough to assume an image (instead of 4x4x4 poses) + auto dict = aron::data::Dict::DynamicCastAndCheck(data); + for (const auto& [key, child] : dict->getElements()) { - images[key] = ndarray; - switch (parent->getDescriptor()) + if (child && child->getDescriptor() == aron::data::Descriptor::eNDArray) { - case aron::data::Descriptor::eDict: + auto ndarray = aron::data::NDArray::DynamicCastAndCheck(child); + auto shape = ndarray->getShape(); + if (shape.size() == 3 && std::accumulate(std::begin(shape), std::end(shape), 1, std::multiplies<int>()) > 200) // must be big enough to assume an image (instead of 4x4x4 poses) { - auto dict = aron::data::Dict::DynamicCastAndCheck(parent); + images[key] = ndarray; dict->setElement(key, nullptr); - break; - } - case aron::data::Descriptor::eList: - { - auto list = aron::data::List::DynamicCastAndCheck(parent); - list->setElement(std::stoi(key), nullptr); - break; - } - default: - { - throw aron::error::AronException(__PRETTY_FUNCTION__, "Found invalid parent in visitor."); } } } } - void ImageExtractorVisitor::visitUnknown(const std::string& key, Input& parent, Input& data) + void ImageExtractorVisitor::visitUnknown(Input& data) { // A member is null. Simply ignore... } @@ -45,7 +33,7 @@ namespace armarx::armem::server::ltm::extractor ImageExtractorVisitor visitor; aron::data::VariantPtr var = std::static_pointer_cast<aron::data::Variant>(data); aron::data::VariantPtr p; - aron::data::visitRecursive(visitor, var, "", p); + aron::data::visitRecursive(visitor, var); Extraction encoding; encoding.data = data; diff --git a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h index 8c5fd2447..14c3fd4b7 100644 --- a/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h +++ b/source/RobotAPI/libraries/armem/server/ltm/base/extractor/imageExtractor/ImageExtractor.h @@ -15,8 +15,8 @@ namespace armarx::armem::server::ltm::extractor public: std::map<std::string, aron::data::NDArrayPtr> images; - void visitNDArray(const std::string& key, Input& parent, Input& data); - void visitUnknown(const std::string& key, Input& parent, Input& data); + void visitDictOnEnter(Input& data); + void visitUnknown(Input& data); }; class ImageExtractor : public Extractor diff --git a/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h b/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h index a46373175..2cb8658db 100644 --- a/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h +++ b/source/RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h @@ -34,49 +34,49 @@ namespace armarx::aron::data * @see type/visitor/RecursiveVisitor.h */ template <class RecursiveVisitorImplementation> - void visitRecursive(RecursiveVisitorImplementation& v, typename RecursiveVisitorImplementation::Input& o, const std::string& key, typename RecursiveVisitorImplementation::Input& po) + void visitRecursive(RecursiveVisitorImplementation& v, typename RecursiveVisitorImplementation::Input& o) { data::Descriptor descriptor = v.getDescriptor(o); switch (descriptor) { case data::Descriptor::eList: { - v.visitListOnEnter(key, po, o); + v.visitListOnEnter(o); unsigned int i = 0; for (auto& value : v.getListElements(o)) { - visitRecursive(v, value, std::to_string(i), o); + visitRecursive(v, value); i++; } - v.visitListOnExit(key, po, o); + v.visitListOnExit(o); return; } case data::Descriptor::eDict: { - v.visitDictOnEnter(key, po, o); + v.visitDictOnEnter(o); for (auto& [key, value] : v.getDictElements(o)) { - visitRecursive(v, value, key, o); + visitRecursive(v, value); } - v.visitDictOnExit(key, po, o); + v.visitDictOnExit(o); return; } case data::Descriptor::eNDArray: - return v.visitNDArray(key, po, o); + return v.visitNDArray(o); case data::Descriptor::eInt: - return v.visitInt(key, po, o); + return v.visitInt(o); case data::Descriptor::eLong: - return v.visitLong(key, po, o); + return v.visitLong(o); case data::Descriptor::eFloat: - return v.visitFloat(key, po, o); + return v.visitFloat(o); case data::Descriptor::eDouble: - return v.visitDouble(key, po, o); + return v.visitDouble(o); case data::Descriptor::eString: - return v.visitString(key, po, o); + return v.visitString(o); case data::Descriptor::eBool: - return v.visitBool(key, po, o); + return v.visitBool(o); case data::Descriptor::eUnknown: - return v.visitUnknown(key, po, o); + return v.visitUnknown(o); } } @@ -85,100 +85,100 @@ namespace armarx::aron::data * @see data/visitor/Visitor.h */ template <class RecursiveVisitorImplementation> - void visitRecursive(RecursiveVisitorImplementation& v, typename RecursiveVisitorImplementation::DataInput& o, typename RecursiveVisitorImplementation::TypeInput& t, const std::string& key, typename RecursiveVisitorImplementation::DataInput& po, typename RecursiveVisitorImplementation::TypeInput& pt) + void visitRecursive(RecursiveVisitorImplementation& v, typename RecursiveVisitorImplementation::DataInput& o, typename RecursiveVisitorImplementation::TypeInput& t) { type::Descriptor descriptor = v.getDescriptor(t); switch (descriptor) { case type::Descriptor::eList: { - v.visitListOnEnter(key, po, pt, o, t); + v.visitListOnEnter(o, t); unsigned int i = 0; for (auto& [value, acceptedType] : v.getListElements(o, t)) { - visitRecursive(v, value, acceptedType, std::to_string(i), o, t); + visitRecursive(v, value, acceptedType); i++; } - v.visitListOnExit(key, po, pt, o, t); + v.visitListOnExit(o, t); return; } case type::Descriptor::ePair: { - v.visitPairOnEnter(key, po, pt, o, t); + v.visitPairOnEnter(o, t); auto pair = v.getPairElements(o, t); auto first = pair.first; auto second = pair.second; - visitRecursive(v, first.first, first.second, "1", o, t); - visitRecursive(v, second.first, second.second, "2", o, t); - v.visitPairOnExit(key, po, pt, o, t); + visitRecursive(v, first.first, first.second); + visitRecursive(v, second.first, second.second); + v.visitPairOnExit(o, t); return; } case type::Descriptor::eTuple: { - v.visitTupleOnEnter(key, po, pt, o, t); + v.visitTupleOnEnter(o, t); unsigned int i = 0; for (auto& [value, acceptedType] : v.getTupleElements(o, t)) { - visitRecursive(v, value, acceptedType, std::to_string(i), o, t); + visitRecursive(v, value, acceptedType); i++; } - v.visitTupleOnExit(key, po, pt, o, t); + v.visitTupleOnExit(o, t); return; } case type::Descriptor::eDict: { - v.visitDictOnEnter(key, po, pt, o, t); + v.visitDictOnEnter(o, t); for (auto& [key, value, acceptedType] : v.getDictElements(o, t)) { - visitRecursive(v, value, acceptedType, key, o, t); + visitRecursive(v, value, acceptedType); } - v.visitDictOnExit(key, po, pt, o, t); + v.visitDictOnExit(o, t); return; } case type::Descriptor::eObject: { - v.visitObjectOnEnter(key, po, pt, o, t); + v.visitObjectOnEnter(o, t); for (auto& [key, value, acceptedType] : v.getObjectElements(o, t)) { - visitRecursive(v, value, acceptedType, key, o, t); + visitRecursive(v, value, acceptedType); } - v.visitObjectOnExit(key, po, pt, o, t); + v.visitObjectOnExit(o, t); return; } case type::Descriptor::eNDArray: - return v.visitNDArray(key, po, pt, o, t); + return v.visitNDArray(o, t); case type::Descriptor::eMatrix: - return v.visitMatrix(key, po, pt, o, t); + return v.visitMatrix(o, t); case type::Descriptor::eOrientation: - return v.visitOrientation(key, po, pt, o, t); + return v.visitOrientation(o, t); case type::Descriptor::eImage: - return v.visitImage(key, po, pt, o, t); + return v.visitImage(o, t); case type::Descriptor::ePointCloud: - return v.visitPointCloud(key, po, pt, o, t); + return v.visitPointCloud(o, t); case type::Descriptor::ePosition: - return v.visitPosition(key, po, pt, o, t); + return v.visitPosition(o, t); case type::Descriptor::ePose: - return v.visitPose(key, po, pt, o, t); + return v.visitPose(o, t); case type::Descriptor::eQuaternion: - return v.visitQuaternion(key, po, pt, o, t); + return v.visitQuaternion(o, t); case type::Descriptor::eInt: - return v.visitInt(key, po, pt, o, t); + return v.visitInt(o, t); case type::Descriptor::eLong: - return v.visitLong(key, po, pt, o, t); + return v.visitLong(o, t); case type::Descriptor::eFloat: - return v.visitFloat(key, po, pt, o, t); + return v.visitFloat(o, t); case type::Descriptor::eDouble: - return v.visitDouble(key, po, pt, o, t); + return v.visitDouble(o, t); case type::Descriptor::eString: - return v.visitString(key, po, pt, o, t); + return v.visitString(o, t); case type::Descriptor::eBool: - return v.visitBool(key, po, pt, o, t); + return v.visitBool(o, t); case type::Descriptor::eTime: - return v.visitTime(key, po, pt, o, t); + return v.visitTime(o, t); case type::Descriptor::eIntEnum: - return v.visitIntEnum(key, po, pt, o, t); + return v.visitIntEnum(o, t); case type::Descriptor::eUnknown: - return v.visitUnknown(key, po, pt, o, t); + return v.visitUnknown(o, t); } } @@ -194,19 +194,19 @@ namespace armarx::aron::data virtual std::map<std::string, InputNonConst> getDictElements(Input&) = 0; virtual std::vector<InputNonConst> getListElements(Input&) = 0; - virtual void visitDictOnEnter(const std::string& key, Input& parent, Input& element) {}; - virtual void visitDictOnExit(const std::string& key, Input& parent, Input& element) {}; - virtual void visitListOnEnter(const std::string& key, Input& parent, Input& element) {}; - virtual void visitListOnExit(const std::string& key, Input& parent, Input& element) {}; + virtual void visitDictOnEnter(Input& element) {}; + virtual void visitDictOnExit(Input& element) {}; + virtual void visitListOnEnter(Input& element) {}; + virtual void visitListOnExit(Input& element) {}; - virtual void visitNDArray(const std::string& key, Input& parent, Input& element) {}; - virtual void visitInt(const std::string& key, Input& parent, Input& element) {}; - virtual void visitLong(const std::string& key, Input& parent, Input& element) {}; - virtual void visitFloat(const std::string& key, Input& parent, Input& element) {}; - virtual void visitDouble(const std::string& key, Input& parent, Input& element) {}; - virtual void visitBool(const std::string& key, Input& parent, Input& element) {}; - virtual void visitString(const std::string& key, Input& parent, Input& element) {}; - virtual void visitUnknown(const std::string& key, Input& parent, Input& element) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); } + virtual void visitNDArray(Input& element) {}; + virtual void visitInt(Input& element) {}; + virtual void visitLong(Input& element) {}; + virtual void visitFloat(Input& element) {}; + virtual void visitDouble(Input& element) {}; + virtual void visitBool(Input& element) {}; + virtual void visitString(Input& element) {}; + virtual void visitUnknown(Input& element) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); } virtual ~RecursiveVisitor() = default; }; @@ -228,34 +228,36 @@ namespace armarx::aron::data virtual std::pair<std::pair<DataInputNonConst, TypeInputNonConst>, std::pair<DataInputNonConst, TypeInputNonConst>> getPairElements(DataInput&, TypeInput&) = 0; virtual std::vector<std::pair<DataInputNonConst, TypeInputNonConst>> getTupleElements(DataInput&, TypeInput&) = 0; - virtual void visitObjectOnEnter(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitObjectOnExit(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitDictOnEnter(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitDictOnExit(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitPairOnEnter(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitPairOnExit(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitTupleOnEnter(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitTupleOnExit(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitListOnEnter(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitListOnExit(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; + virtual void visitObjectOnEnter(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitObjectOnExit(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitDictOnEnter(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitDictOnExit(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitPairOnEnter(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitPairOnExit(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitTupleOnEnter(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitTupleOnExit(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitListOnEnter(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitListOnExit(DataInput& elementData, TypeInput& elementType) {}; - virtual void visitMatrix(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitNDArray(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitQuaternion(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitOrientation(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitPosition(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitPose(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitImage(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitPointCloud(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitIntEnum(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitInt(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitLong(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitFloat(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitDouble(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitBool(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitString(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitTime(const std::string& key, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) {}; - virtual void visitUnknown(const std::string&, DataInput& parentData, TypeInput& parentType, DataInput& elementData, TypeInput& elementType) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); } + virtual void visitMatrix(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitNDArray(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitQuaternion(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitOrientation(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitPosition(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitPose(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitImage(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitPointCloud(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitIntEnum(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitInt(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitLong(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitFloat(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitDouble(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitBool(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitString(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitTime(DataInput& elementData, TypeInput& elementType) {}; + virtual void visitUnknown(DataInput& elementData, TypeInput& elementType) { + throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); + } virtual ~RecursiveTypedVisitor() = default; }; } diff --git a/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h b/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h index 887aa211a..a49b0751e 100644 --- a/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h +++ b/source/RobotAPI/libraries/aron/core/type/visitor/RecursiveVisitor.h @@ -34,92 +34,92 @@ namespace armarx::aron::type * @brief The visitRecursive function. Calls visitX of a RecursiveVisitorImplementation recursively. For more information please see Visitor.h */ template <class RecursiveVisitorImplementation> - void visitRecursive(RecursiveVisitorImplementation& v, const std::string& key, typename RecursiveVisitorImplementation::Input& t) + void visitRecursive(RecursiveVisitorImplementation& v, typename RecursiveVisitorImplementation::Input& t) { auto descriptor = v.getDescriptor(t); switch (descriptor) { case type::Descriptor::eList: { - v.visitListOnEnter(key, t); + v.visitListOnEnter(t); auto acceptedType = v.getListAcceptedType(t); - visitRecursive(v, "acceptedType", acceptedType); - v.visitListOnExit(key, t); + visitRecursive(v, acceptedType); + v.visitListOnExit(t); return; } case type::Descriptor::ePair: { - v.visitPairOnEnter(key, t); + v.visitPairOnEnter(t); auto acceptedTypes = v.getPairAcceptedTypes(t); - visitRecursive(v, "acceptedType1", acceptedTypes.first); - visitRecursive(v, "acceptedType2", acceptedTypes.second); - v.visitPairOnExit(key, t); + visitRecursive(v, acceptedTypes.first); + visitRecursive(v, acceptedTypes.second); + v.visitPairOnExit(t); return; } case type::Descriptor::eTuple: { - v.visitTupleOnEnter(key, t); + v.visitTupleOnEnter(t); unsigned int i = 0; for (const auto& acceptedType : v.getTupleAcceptedTypes(t)) { - visitRecursive(v, "acceptedType"+std::to_string(i), acceptedType); + visitRecursive(v, acceptedType); i++; } - v.visitTupleOnExit(key, t); + v.visitTupleOnExit(t); return; } case type::Descriptor::eDict: { - v.visitDictOnEnter(key, t); + v.visitDictOnEnter(t); auto acceptedType = v.getDictAcceptedType(t); - visitRecursive(v, "acceptedType", acceptedType); - v.visitDictOnExit(key, t); + visitRecursive(v, acceptedType); + v.visitDictOnExit(t); return; } case type::Descriptor::eObject: { - v.visitObjectOnEnter(key, t); + v.visitObjectOnEnter(t); for (const auto& [key, acceptedType] : v.getObjectElements(t)) { - visitRecursive(v, key, acceptedType); + visitRecursive(v, acceptedType); } - v.visitObjectOnExit(key, t); + v.visitObjectOnExit(t); return; } case type::Descriptor::eNDArray: - return v.visitNDArray(key, t); + return v.visitNDArray(t); case type::Descriptor::eMatrix: - return v.visitMatrix(key, t); + return v.visitMatrix(t); case type::Descriptor::eOrientation: - return v.visitOrientation(key, t); + return v.visitOrientation(t); case type::Descriptor::eImage: - return v.visitImage(key, t); + return v.visitImage(t); case type::Descriptor::ePointCloud: - return v.visitPointCloud(key, t); + return v.visitPointCloud(t); case type::Descriptor::ePosition: - return v.visitPosition(key, t); + return v.visitPosition(t); case type::Descriptor::ePose: - return v.visitPose(key, t); + return v.visitPose(t); case type::Descriptor::eQuaternion: - return v.visitQuaternion(key, t); + return v.visitQuaternion(t); case type::Descriptor::eInt: - return v.visitInt(key, t); + return v.visitInt(t); case type::Descriptor::eLong: - return v.visitLong(key, t); + return v.visitLong(t); case type::Descriptor::eFloat: - return v.visitFloat(key, t); + return v.visitFloat(t); case type::Descriptor::eDouble: - return v.visitDouble(key, t); + return v.visitDouble(t); case type::Descriptor::eString: - return v.visitString(key, t); + return v.visitString(t); case type::Descriptor::eBool: - return v.visitBool(key, t); + return v.visitBool(t); case type::Descriptor::eTime: - return v.visitTime(key, t); + return v.visitTime(t); case type::Descriptor::eIntEnum: - return v.visitIntEnum(key, t); + return v.visitIntEnum(t); case type::Descriptor::eUnknown: - return v.visitUnknown(key, t); + return v.visitUnknown(t); } } @@ -139,34 +139,36 @@ namespace armarx::aron::type virtual std::pair<InputNonConst, InputNonConst> getPairAcceptedTypes(Input&) = 0; virtual std::vector<InputNonConst> getTupleAcceptedTypes(Input&) = 0; - virtual void visitObjectOnEnter(const std::string& key, Input&) {}; - virtual void visitObjectOnExit(const std::string& key, Input&) {}; - virtual void visitDictOnEnter(const std::string& key, Input&) {}; - virtual void visitDictOnExit(const std::string& key, Input&) {}; - virtual void visitPairOnEnter(const std::string& key, Input&) {}; - virtual void visitPairOnExit(const std::string& key, Input&) {}; - virtual void visitTupleOnEnter(const std::string& key, Input&) {}; - virtual void visitTupleOnExit(const std::string& key, Input&) {}; - virtual void visitListOnEnter(const std::string& key, Input&) {}; - virtual void visitListOnExit(const std::string& key, Input&) {}; + virtual void visitObjectOnEnter(Input&) {}; + virtual void visitObjectOnExit(Input&) {}; + virtual void visitDictOnEnter(Input&) {}; + virtual void visitDictOnExit(Input&) {}; + virtual void visitPairOnEnter(Input&) {}; + virtual void visitPairOnExit(Input&) {}; + virtual void visitTupleOnEnter(Input&) {}; + virtual void visitTupleOnExit(Input&) {}; + virtual void visitListOnEnter(Input&) {}; + virtual void visitListOnExit(Input&) {}; - virtual void visitMatrix(const std::string& key, Input&) {}; - virtual void visitNDArray(const std::string& key, Input&) {}; - virtual void visitQuaternion(const std::string& key, Input&) {}; - virtual void visitOrientation(const std::string& key, Input&) {}; - virtual void visitPosition(const std::string& key, Input&) {}; - virtual void visitPose(const std::string& key, Input&) {}; - virtual void visitImage(const std::string& key, Input&) {}; - virtual void visitPointCloud(const std::string& key, Input&) {}; - virtual void visitIntEnum(const std::string& key, Input&) {}; - virtual void visitInt(const std::string& key, Input&) {}; - virtual void visitLong(const std::string& key, Input&) {}; - virtual void visitFloat(const std::string& key, Input&) {}; - virtual void visitDouble(const std::string& key, Input&) {}; - virtual void visitBool(const std::string& key, Input&) {}; - virtual void visitString(const std::string& key, Input&) {}; - virtual void visitTime(const std::string& key, Input&) {}; - virtual void visitUnknown(const std::string&, Input&) { throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); } + 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&) {}; + virtual void visitInt(Input&) {}; + virtual void visitLong(Input&) {}; + virtual void visitFloat(Input&) {}; + virtual void visitDouble(Input&) {}; + virtual void visitBool(Input&) {}; + virtual void visitString(Input&) {}; + virtual void visitTime(Input&) {}; + virtual void visitUnknown(Input&) { + throw error::AronException(__PRETTY_FUNCTION__, "Unknown type in visitor."); + } virtual ~RecursiveVisitor() = default; }; } -- GitLab