diff --git a/source/RobotAPI/libraries/aron_component_config/ComponentPlugin.h b/source/RobotAPI/libraries/aron_component_config/ComponentPlugin.h index ae144f245b15cd28cdf0eee59245d7b9d8a94b28..288462223d51f039e7b38316c0e24a6f2037801f 100644 --- a/source/RobotAPI/libraries/aron_component_config/ComponentPlugin.h +++ b/source/RobotAPI/libraries/aron_component_config/ComponentPlugin.h @@ -23,57 +23,48 @@ #pragma once #include <experimental/memory> -#include <ArmarXCore/core/ManagedIceObject.h> + #include <ArmarXCore/core/ComponentPlugin.h> -#include <RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h> +#include <ArmarXCore/core/ManagedIceObject.h> + #include <ArmarXGui/libraries/ArmarXGuiComponentPlugins/RemoteGuiComponentPlugin.h> + +#include <RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h> #include <RobotAPI/libraries/aron/core/data/visitor/RecursiveVisitor.h> + #include "PropertyDefinitionVisitors.h" #include "RemoteGui.h" - namespace armarx::plugins { - template <typename T> concept isAronGenerated = std::is_base_of<armarx::aron::cpp::AronGeneratedClass, T>::value; + template <typename T> + concept isAronGenerated = std::is_base_of<armarx::aron::cpp::AronGeneratedClass, T>::value; template <typename AronStructT> - requires isAronGenerated<AronStructT> + requires isAronGenerated<AronStructT> class AronComponentConfigPlugin : public ComponentPlugin { protected: - void preOnInitComponent() override + void + preOnInitComponent() override { - armarx::aron::component_config::PropertyDefinitionGetterVisitor vis(parent<armarx::PropertyUser>()); - auto data = std::static_pointer_cast<armarx::aron::data::Variant>(config_.getUpToDateReadBuffer().toAron()); + ARMARX_TRACE; + armarx::aron::component_config::PropertyDefinitionGetterVisitor vis( + parent<armarx::PropertyUser>()); + auto data = std::static_pointer_cast<armarx::aron::data::Variant>( + config_.getUpToDateReadBuffer().toAron()); auto type = config_.getUpToDateReadBuffer().ToAronType(); armarx::aron::data::visitRecursive(vis, data, type); - config_.getWriteBuffer().fromAron(std::static_pointer_cast<armarx::aron::data::Dict>(data)); + config_.getWriteBuffer().fromAron( + std::static_pointer_cast<armarx::aron::data::Dict>(data)); config_.commitWrite(); ManagedIceObjectPlugin::preOnInitComponent(); } - void postOnInitComponent() override - { - ManagedIceObjectPlugin::postOnInitComponent(); - } - - void preOnConnectComponent() override - { - ManagedIceObjectPlugin::preOnConnectComponent(); - } - - void postOnConnectComponent() override - { - ManagedIceObjectPlugin::postOnConnectComponent(); - } - - void postOnDisconnectComponent() override - { - ManagedIceObjectPlugin::postOnDisconnectComponent(); - } - - void postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties) override + void + postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties) override { + ARMARX_TRACE; armarx::aron::component_config::PropertyDefinitionSetterVisitor vis(properties); const auto& config = config_.getUpToDateReadBuffer(); armarx::aron::data::visitRecursive(vis, config.toAron(), config.ToAronType()); @@ -81,12 +72,16 @@ namespace armarx::plugins } public: - RemoteGui::detail::GroupBoxBuilder buildRemoteGui(const std::string& name) + RemoteGui::detail::GroupBoxBuilder + buildRemoteGui(const std::string& name) { + ARMARX_TRACE; return RemoteGui::makeConfigGui(name, config_.getUpToDateReadBuffer()); } - bool updateRemoteGui(armarx::RemoteGui::TabProxy& prx) // prx has to be already updated; otherwise nothing will change + bool + updateRemoteGui(armarx::RemoteGui::TabProxy& + prx) // prx has to be already updated; otherwise nothing will change { ARMARX_TRACE; armarx::aron::component_config::GetValueFromMapVisitor vis(&prx); @@ -99,12 +94,12 @@ namespace armarx::plugins return vis.tabRebuildRequired(); } - AronComponentConfigPlugin(ManagedIceObject& parent, const std::string& prefix) : ComponentPlugin(parent, prefix) + AronComponentConfigPlugin(ManagedIceObject& parent, const std::string& prefix) : + ComponentPlugin(parent, prefix) { - + ARMARX_TRACE; } armarx::WriteBufferedTripleBuffer<AronStructT> config_; - }; -} \ No newline at end of file +} // namespace armarx::plugins \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp index c8a21c747d81c4465a1c85281da518f4905001e6..8f68b47f18780e0150239129f087ad41584b4c11 100644 --- a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp +++ b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.cpp @@ -22,17 +22,29 @@ #include "PropertyDefinitionVisitors.h" -#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> #include <ArmarXCore/core/application/properties/PropertyDefinition.h> +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> #include <ArmarXCore/core/application/properties/PropertyUser.h> + #include <RobotAPI/libraries/aron/core/data/variant/All.h> #include <RobotAPI/libraries/aron_component_config/VariantHelperFactory.h> #include "Util.h" -#define INPUT_GUARD(i) \ -ARMARX_CHECK_NOT_NULL(i); \ -if (in_list_) return; +#define INPUT_GUARD(i) \ + ARMARX_TRACE; \ + ARMARX_CHECK_NOT_NULL(i); \ + if (in_list_) \ + return; + +inline std::string +joinNamespaces(const std::vector<std::string>& namespaces) +{ + std::string result = ""; + std::for_each( + namespaces.begin(), namespaces.end(), [&result](const auto& i) { result += i + "."; }); + return result; +} namespace armarx::aron::component_config { @@ -42,7 +54,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(i); auto value = data::Int::DynamicCastAndCheck(i); - auto name = pathToName(i); + auto name = joinNamespaces(namespaces_) + pathToName(i); property_user_->getProperty(value->getValue(), name); } @@ -51,7 +63,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(f); auto value = data::Float::DynamicCastAndCheck(f); - auto name = pathToName(f); + auto name = joinNamespaces(namespaces_) + pathToName(f); property_user_->getProperty(value->getValue(), name); } @@ -60,7 +72,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(d); auto value = data::Double::DynamicCastAndCheck(d); - auto name = pathToName(d); + auto name = joinNamespaces(namespaces_) + pathToName(d); property_user_->getProperty(value->getValue(), name); } @@ -69,7 +81,7 @@ namespace armarx::aron::component_config { INPUT_GUARD(b); auto value = data::Bool::DynamicCastAndCheck(b); - auto name = pathToName(b); + auto name = joinNamespaces(namespaces_) + pathToName(b); property_user_->getProperty(value->getValue(), name); } @@ -78,11 +90,13 @@ namespace armarx::aron::component_config { INPUT_GUARD(string); auto value = data::String::DynamicCastAndCheck(string); - auto name = pathToName(string); + auto name = joinNamespaces(namespaces_) + pathToName(string); auto property = property_user_->getProperty<std::string>(name); - if (not property.getValue().empty()){ + if (not property.getValue().empty()) + { value->getValue() = property.getValueAndReplaceAllVars(); - } else + } + else { value->getValue() = ""; } @@ -91,8 +105,9 @@ namespace armarx::aron::component_config void PropertyDefinitionGetterVisitor::visitListOnEnter(DataInput& o, TypeInput& t) { + ARMARX_TRACE; in_list_ = true; - const auto& name = pathToName(o); + const auto& name = joinNamespaces(namespaces_) + pathToName(o); const auto& type = type::List::DynamicCast(t)->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -101,7 +116,7 @@ namespace armarx::aron::component_config } auto old_list = data::List::DynamicCast(o); old_list->clear(); - auto get_list = [this, & name]() -> std::vector<std::string> + auto get_list = [this, &name]() -> std::vector<std::string> { std::string list; property_user_->getProperty(list, name); @@ -109,14 +124,14 @@ namespace armarx::aron::component_config }; int i = 0; std::vector<std::string> vector = get_list(); - std::for_each(vector.begin(), vector.end(), [&old_list, &i, &type](const auto& el) - { - old_list->addElement(factories::VariantHelper::make(type)->from_string(el, - old_list->getPath() - .withIndex(i))); - i++; - }); - + std::for_each(vector.begin(), + vector.end(), + [&old_list, &i, &type](const auto& el) + { + old_list->addElement(factories::VariantHelper::make(type)->from_string( + el, old_list->getPath().withIndex(i))); + i++; + }); } void @@ -128,29 +143,32 @@ namespace armarx::aron::component_config void PropertyDefinitionGetterVisitor::visitIntEnum(DataInput& enumData, TypeInput& elementType) { + ARMARX_TRACE; auto data = data::Int::DynamicCastAndCheck(enumData); - auto name = pathToName(enumData); + auto name = joinNamespaces(namespaces_) + pathToName(enumData); property_user_->getProperty(data->getValue(), name); } void PropertyDefinitionGetterVisitor::visitUnknown(DataInput& unknown, TypeInput& elementType) { - ARMARX_WARNING << "Unknown data encountered: " << (unknown ? unknown->getFullName() : "nullptr"); + ARMARX_WARNING << "Unknown data encountered: " + << (unknown ? unknown->getFullName() : "nullptr"); } - PropertyDefinitionGetterVisitor::PropertyDefinitionGetterVisitor(const armarx::PropertyUser& defs) : - property_user_(std::experimental::make_observer(&defs)), in_list_(false) + PropertyDefinitionGetterVisitor::PropertyDefinitionGetterVisitor( + const armarx::PropertyUser& defs) : + property_user_(std::experimental::make_observer(&defs)), in_list_(false) { - } void PropertyDefinitionGetterVisitor::visitDictOnEnter(std::shared_ptr<data::Variant>& o, const std::shared_ptr<type::Variant>& t) { + ARMARX_TRACE; in_list_ = true; - const auto& name = pathToName(o); + const auto& name = joinNamespaces(namespaces_) + pathToName(o); const auto& type = type::Dict::DynamicCast(t)->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -159,26 +177,30 @@ namespace armarx::aron::component_config } auto old_dict = data::Dict::DynamicCast(o); old_dict->clear(); - auto get_list = [this, & name]() -> std::vector<std::string> + auto get_list = [this, &name]() -> std::vector<std::string> { std::string list; property_user_->getProperty(list, name); return simox::alg::split(list, ","); }; std::vector<std::string> vector = get_list(); - std::for_each(vector.begin(), vector.end(), [&old_dict, &type](const auto& el) - { - auto key_value = simox::alg::split(el, ":"); - old_dict->addElement(key_value.front(), - factories::VariantHelper::make(type)->from_string(key_value.back(), - old_dict->getPath() - .withElement(key_value.front()))); - }); + std::for_each( + vector.begin(), + vector.end(), + [&old_dict, &type](const auto& el) + { + auto key_value = simox::alg::split(el, ":"); + old_dict->addElement( + key_value.front(), + factories::VariantHelper::make(type)->from_string( + key_value.back(), old_dict->getPath().withElement(key_value.front()))); + }); } void - PropertyDefinitionGetterVisitor::visitDictOnExit(std::shared_ptr<data::Variant>& elementData, - const std::shared_ptr<type::Variant>& elementType) + PropertyDefinitionGetterVisitor::visitDictOnExit( + std::shared_ptr<data::Variant>& elementData, + const std::shared_ptr<type::Variant>& elementType) { in_list_ = false; } @@ -219,8 +241,26 @@ namespace armarx::aron::component_config return data::ConstTypedVariantVisitor::GetDescriptor(o, t); } - PropertyDefinitionSetterVisitor::PropertyDefinitionSetterVisitor(const PropertyDefinitionsPtr& defs) : - property_definitions_(std::experimental::make_observer(defs.get())) + void + PropertyDefinitionGetterVisitor::visitObjectOnEnter(std::shared_ptr<data::Variant>& i, + const std::shared_ptr<type::Variant>& j) + { + INPUT_GUARD(i); + auto t = type::Object::DynamicCastAndCheck(j); + namespaces_.emplace_back(t->getObjectNameWithoutNamespace()); + } + + void + PropertyDefinitionGetterVisitor::visitObjectOnExit(std::shared_ptr<data::Variant>& i, + const std::shared_ptr<type::Variant>& j) + { + INPUT_GUARD(i); + namespaces_.pop_back(); + } + + PropertyDefinitionSetterVisitor::PropertyDefinitionSetterVisitor( + const PropertyDefinitionsPtr& defs) : + property_definitions_(std::experimental::make_observer(defs.get())) { } @@ -228,23 +268,25 @@ namespace armarx::aron::component_config PropertyDefinitionSetterVisitor::visitAronVariant(const data::IntPtr& i, const type::IntPtr&) { INPUT_GUARD(i); - auto name = pathToName(i); + auto name = joinNamespaces(namespaces_) + pathToName(i); property_definitions_->defineOptionalProperty<int>(name, i->getValue()); } void - PropertyDefinitionSetterVisitor::visitAronVariant(const data::FloatPtr& f, const type::FloatPtr&) + PropertyDefinitionSetterVisitor::visitAronVariant(const data::FloatPtr& f, + const type::FloatPtr&) { INPUT_GUARD(f); - auto name = pathToName(f); + auto name = joinNamespaces(namespaces_) + pathToName(f); property_definitions_->defineOptionalProperty<float>(name, f->getValue()); } void - PropertyDefinitionSetterVisitor::visitAronVariant(const data::DoublePtr& d, const type::DoublePtr&) + PropertyDefinitionSetterVisitor::visitAronVariant(const data::DoublePtr& d, + const type::DoublePtr&) { INPUT_GUARD(d); - auto name = pathToName(d); + auto name = joinNamespaces(namespaces_) + pathToName(d); property_definitions_->defineOptionalProperty<double>(name, d->getValue()); } @@ -252,32 +294,37 @@ namespace armarx::aron::component_config PropertyDefinitionSetterVisitor::visitAronVariant(const data::BoolPtr& b, const type::BoolPtr&) { INPUT_GUARD(b); - auto name = pathToName(b); + auto name = joinNamespaces(namespaces_) + pathToName(b); property_definitions_->defineOptionalProperty<bool>(name, b->getValue()); } void - PropertyDefinitionSetterVisitor::visitAronVariant(const data::StringPtr& string, const type::StringPtr&) + PropertyDefinitionSetterVisitor::visitAronVariant(const data::StringPtr& string, + const type::StringPtr& type) { INPUT_GUARD(string); - auto name = pathToName(string); + auto name = joinNamespaces(namespaces_) + pathToName(string); property_definitions_->defineOptionalProperty<std::string>(name, string->getValue()); } void - PropertyDefinitionSetterVisitor::visitAronVariant(const data::IntPtr& i, const type::IntEnumPtr& t) + PropertyDefinitionSetterVisitor::visitAronVariant(const data::IntPtr& i, + const type::IntEnumPtr& t) { INPUT_GUARD(i); - auto name = pathToName(i); - property_definitions_->defineOptionalProperty<int>(name, i->getValue()).map(t->getAcceptedValueMap()); + auto name = joinNamespaces(namespaces_) + pathToName(i); + property_definitions_->defineOptionalProperty<int>(name, i->getValue()) + .map(t->getAcceptedValueMap()); } void - PropertyDefinitionSetterVisitor::visitAronVariantOnEnter(const data::ListPtr& l, const type::ListPtr& t) + PropertyDefinitionSetterVisitor::visitAronVariantOnEnter(const data::ListPtr& l, + const type::ListPtr& t) { + ARMARX_TRACE; ARMARX_CHECK_NOT_NULL(l); in_list_ = true; - const auto& name = pathToName(l); + const auto& name = joinNamespaces(namespaces_) + pathToName(l); const auto& type = t->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -287,25 +334,29 @@ namespace armarx::aron::component_config const auto& input = l->getElements(); std::string str; std::vector<std::string> vector; - std::transform(input.begin(), input.end(), std::back_inserter(vector), [&type](const auto& el) - { - return factories::VariantHelper::make(type)->to_string(el); - }); + std::transform(input.begin(), + input.end(), + std::back_inserter(vector), + [&type](const auto& el) + { return factories::VariantHelper::make(type)->to_string(el); }); str = simox::alg::to_string(vector, ", "); property_definitions_->defineOptionalProperty<std::string>(name, str); } void - PropertyDefinitionSetterVisitor::visitAronVariantOnExit(const data::ListPtr&, const type::ListPtr&) + PropertyDefinitionSetterVisitor::visitAronVariantOnExit(const data::ListPtr&, + const type::ListPtr&) { in_list_ = false; } void - PropertyDefinitionSetterVisitor::visitAronVariantOnEnter(const data::DictPtr& d, const type::DictPtr& t) + PropertyDefinitionSetterVisitor::visitAronVariantOnEnter(const data::DictPtr& d, + const type::DictPtr& t) { + ARMARX_TRACE; in_list_ = true; - const auto& name = pathToName(d); + const auto& name = joinNamespaces(namespaces_) + pathToName(d); const auto& type = t->getAcceptedType()->getDescriptor(); if (std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) == implementedListDescriptors.end()) @@ -314,7 +365,7 @@ namespace armarx::aron::component_config } const auto& input = d->getElements(); std::stringstream ss; - for (const auto& [key, el]: input) + for (const auto& [key, el] : input) { ss << key << ":"; ss << factories::VariantHelper::make(type)->to_string(el); @@ -329,10 +380,27 @@ namespace armarx::aron::component_config } void - PropertyDefinitionSetterVisitor::visitAronVariantOnExit(const data::DictPtr&, const type::DictPtr&) + PropertyDefinitionSetterVisitor::visitAronVariantOnExit(const data::DictPtr&, + const type::DictPtr&) { in_list_ = false; } -} + + void + PropertyDefinitionSetterVisitor::visitAronVariantOnEnter(const data::DictPtr& obj, + const type::ObjectPtr& type) + { + INPUT_GUARD(obj); + namespaces_.emplace_back(type->getObjectNameWithoutNamespace()); + } + + void + PropertyDefinitionSetterVisitor::visitAronVariantOnExit(const data::DictPtr& obj, + const type::ObjectPtr& type) + { + INPUT_GUARD(obj); + namespaces_.pop_back(); + } +} // namespace armarx::aron::component_config #undef INPUT_GUARD \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h index b99fb8b7b4a3fa40bdf19b3407e8ce1dcb1ac963..5a22cb24534cfd44fdf680051fc7c7f9cb9c5304 100644 --- a/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h +++ b/source/RobotAPI/libraries/aron_component_config/PropertyDefinitionVisitors.h @@ -23,9 +23,11 @@ #pragma once #include <experimental/memory> -#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> + #include <ArmarXCore/core/application/properties/forward_declarations.h> +#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> + namespace armarx::aron::component_config { @@ -54,13 +56,20 @@ namespace armarx::aron::component_config void visitAronVariantOnExit(const data::DictPtr&, const type::DictPtr&) override; + void visitAronVariantOnEnter(const data::DictPtr& ptr, + const type::ObjectPtr& objectPtr) override; + + void visitAronVariantOnExit(const data::DictPtr& ptr, + const type::ObjectPtr& objectPtr) override; + private: std::experimental::observer_ptr<PropertyDefinitionContainer> property_definitions_; + std::vector<std::string> namespaces_; std::atomic<bool> in_list_{false}; }; - class PropertyDefinitionGetterVisitor : public aron::data::RecursiveTypedVisitor<data::VariantPtr, - const type::VariantPtr> + class PropertyDefinitionGetterVisitor : + public aron::data::RecursiveTypedVisitor<data::VariantPtr, const type::VariantPtr> { public: explicit PropertyDefinitionGetterVisitor(const armarx::PropertyUser& defs); @@ -97,11 +106,16 @@ namespace armarx::aron::component_config void visitDictOnExit(DataInput& elementData, TypeInput& elementType) override; + void visitObjectOnEnter(DataInput& elementData, TypeInput& elementType) override; + + void visitObjectOnExit(DataInput& elementData, TypeInput& elementType) override; + void visitIntEnum(DataInput& elementData, TypeInput& elementType) override; private: std::experimental::observer_ptr<const armarx::PropertyUser> property_user_; + std::vector<std::string> namespaces_; std::atomic<bool> in_list_; }; -} \ No newline at end of file +} // namespace armarx::aron::component_config \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/RemoteGui.h b/source/RobotAPI/libraries/aron_component_config/RemoteGui.h index e790688585294d69d7ff68e39ec54ad763b72046..ddc281c6d9b22fccdb3774fbfc418e0ea15de236 100644 --- a/source/RobotAPI/libraries/aron_component_config/RemoteGui.h +++ b/source/RobotAPI/libraries/aron_component_config/RemoteGui.h @@ -23,36 +23,38 @@ #pragma once #include <ArmarXGui/libraries/RemoteGui/RemoteGui.h> -#include <RobotAPI/libraries/aron/core/data/variant/forward_declarations.h> + #include <RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h> #include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h> +#include <RobotAPI/libraries/aron/core/data/variant/forward_declarations.h> + #include "RemoteGuiVisitors.h" namespace armarx::RemoteGui { - template <typename T> concept isAronGenerated = std::is_base_of<armarx::aron::cpp::AronGeneratedClass, T>::value; + template <typename T> + concept isAronGenerated = std::is_base_of<armarx::aron::cpp::AronGeneratedClass, T>::value; template <typename AronStructT> - requires isAronGenerated<AronStructT> - detail::GroupBoxBuilder makeConfigGui( - const std::string& name, - const AronStructT& val) + requires isAronGenerated<AronStructT> + detail::GroupBoxBuilder + makeConfigGui(const std::string& name, const AronStructT& val) { aron::component_config::MakeConfigGuiVisitor vis(name); armarx::aron::data::visitRecursive(vis, val.toAron(), val.ToAronType()); return vis.getGroupBoxBuilder(); } -// template <typename AronStructT> -// requires isAronGenerated<AronStructT> -// void getValueFromMap(AronStructT& cfg, -// RemoteGui::ValueMap const& values, std::string const& name) -// { -// armarx::aron::component_config::GetValueFromMapVisitor vis(&values); -// auto data = std::static_pointer_cast<armarx::aron::data::Variant>(cfg.toAron()); -// auto type = cfg.ToAronType(); -// armarx::aron::data::visitRecursive(vis, data, type); -// cfg.fromAron(std::static_pointer_cast<armarx::aron::data::Dict>(data)); -// } - -} \ No newline at end of file + // template <typename AronStructT> + // requires isAronGenerated<AronStructT> + // void getValueFromMap(AronStructT& cfg, + // RemoteGui::ValueMap const& values, std::string const& name) + // { + // armarx::aron::component_config::GetValueFromMapVisitor vis(&values); + // auto data = std::static_pointer_cast<armarx::aron::data::Variant>(cfg.toAron()); + // auto type = cfg.ToAronType(); + // armarx::aron::data::visitRecursive(vis, data, type); + // cfg.fromAron(std::static_pointer_cast<armarx::aron::data::Dict>(data)); + // } + +} // namespace armarx::RemoteGui \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.cpp b/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.cpp index 9856fb3ccdbcee5426eec1d423fea9cacc2c2313..fc6ed525f1ff9239f9eb4f3078e66203e0baa44d 100644 --- a/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.cpp +++ b/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.cpp @@ -218,6 +218,7 @@ namespace armarx::aron::component_config .toolTip(name)); group_hierarchy_.back()->addChild(group); } + void MakeConfigGuiVisitor::visitMatrix(const std::shared_ptr<data::Variant>& q, const std::shared_ptr<type::Variant>& t) @@ -259,7 +260,13 @@ namespace armarx::aron::component_config auto group = RemoteGui::makeHBoxLayout(name + "_layout"); group.addChild(RemoteGui::makeLabel(name + "_label").value(q->getPath().getLastElement())); group.addHSpacer(); - group.addChild(RemoteGui::makeVector3fSpinBoxes(name).value(quat).min(-M_PI).max(M_PI).steps(601).decimals(2).toolTip(name)); + group.addChild(RemoteGui::makeVector3fSpinBoxes(name) + .value(quat) + .min(-M_PI) + .max(M_PI) + .steps(601) + .decimals(2) + .toolTip(name)); group_hierarchy_.back()->addChild(group); } @@ -307,7 +314,6 @@ namespace armarx::aron::component_config in_list_ = false; } - GetValueFromMapVisitor::GetValueFromMapVisitor(armarx::RemoteGui::TabProxy* proxy) : proxy_(std::experimental::make_observer(proxy)) { @@ -519,6 +525,7 @@ namespace armarx::aron::component_config { return tab_rebuild_required_; } + void GetValueFromMapVisitor::visitMatrix(std::shared_ptr<data::Variant>& o, const std::shared_ptr<type::Variant>& t) @@ -539,7 +546,8 @@ namespace armarx::aron::component_config { if (proxy_->hasValueChanged(name)) { - auto variant = converter::AronEigenConverter::ConvertFromMatrix(gui_value.get()); + auto variant = + converter::AronEigenConverter::ConvertFromMatrix(gui_value.get()); value->setData(gui_value.get().size() * sizeof(float), variant->getData()); } else @@ -547,7 +555,8 @@ namespace armarx::aron::component_config proxy_->setValue(config_value, name); } } - } else if ((cols == 3 and rows == 1) or (cols == 1 and rows == 3)) + } + else if ((cols == 3 and rows == 1) or (cols == 1 and rows == 3)) { auto gui_value = proxy_->getValue<Eigen::Vector3f>(name); auto config_value = converter::AronEigenConverter::ConvertToVector3f(value); @@ -556,7 +565,8 @@ namespace armarx::aron::component_config { if (proxy_->hasValueChanged(name)) { - auto variant = converter::AronEigenConverter::ConvertFromMatrix(gui_value.get()); + auto variant = + converter::AronEigenConverter::ConvertFromMatrix(gui_value.get()); value->setData(gui_value.get().size() * sizeof(float), variant->getData()); } else @@ -565,8 +575,8 @@ namespace armarx::aron::component_config } } } - } + void GetValueFromMapVisitor::visitQuaternion(std::shared_ptr<data::Variant>& o, const std::shared_ptr<type::Variant>& t) @@ -576,12 +586,14 @@ namespace armarx::aron::component_config const std::string name = pathToName(o); // TODO: does double work here? auto gui_value = proxy_->getValue<Eigen::Vector3f>(name); - const auto& quat = simox::math::quat_to_rpy(converter::AronEigenConverter::ConvertToQuaternionf(value)); + const auto& quat = + simox::math::quat_to_rpy(converter::AronEigenConverter::ConvertToQuaternionf(value)); if (quat != gui_value.get()) { if (proxy_->hasValueChanged(name)) { - auto variant = converter::AronEigenConverter::ConvertFromQuaternion(simox::math::rpy_to_quat(gui_value.get())); + auto variant = converter::AronEigenConverter::ConvertFromQuaternion( + simox::math::rpy_to_quat(gui_value.get())); value->setData(4 * sizeof(float), variant->getData()); } else diff --git a/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.h b/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.h index e9324bf15e8429393beac81d2448aba9cbda26f2..93871934083414333bc7af05210b468af0601637 100644 --- a/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.h +++ b/source/RobotAPI/libraries/aron_component_config/RemoteGuiVisitors.h @@ -23,9 +23,11 @@ #pragma once #include <experimental/memory> -#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> + #include <ArmarXCore/core/application/properties/forward_declarations.h> +#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> + namespace armarx::RemoteGui { namespace detail @@ -37,7 +39,8 @@ namespace armarx::RemoteGui class ValueVariant; using ValueMap = std::map<std::string, ValueVariant>; -} +} // namespace armarx::RemoteGui + namespace armarx::aron::component_config { @@ -82,7 +85,8 @@ namespace armarx::aron::component_config std::atomic_bool in_list_{false}; }; - class GetValueFromMapVisitor : public aron::data::RecursiveTypedVisitor<data::VariantPtr, const type::VariantPtr> + class GetValueFromMapVisitor : + public aron::data::RecursiveTypedVisitor<data::VariantPtr, const type::VariantPtr> { public: explicit GetValueFromMapVisitor(armarx::RemoteGui::TabProxy* proxy); @@ -123,11 +127,10 @@ namespace armarx::aron::component_config bool tabRebuildRequired() const; - private: std::experimental::observer_ptr<armarx::RemoteGui::TabProxy> proxy_; bool in_list_{false}; bool tab_rebuild_required_{false}; }; -} \ No newline at end of file +} // namespace armarx::aron::component_config \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/Util.h b/source/RobotAPI/libraries/aron_component_config/Util.h index c6c5561b7112714812896a4eec2269c1f767b597..f9b6889eff84ef6cac3d73607e13bc6eaa6b10dc 100644 --- a/source/RobotAPI/libraries/aron_component_config/Util.h +++ b/source/RobotAPI/libraries/aron_component_config/Util.h @@ -24,13 +24,16 @@ #include <memory> #include <numeric> + #include <RobotAPI/libraries/aron/core/data/variant/Variant.h> +#include <cxxabi.h> namespace armarx::aron::component_config { - inline std::string pathToName(const std::shared_ptr<data::Variant>& v) + inline std::string + pathToName(const std::shared_ptr<data::Variant>& v) { auto vector = v->getPath().getPath(); auto path = v->getPath(); @@ -42,7 +45,8 @@ namespace armarx::aron::component_config template <typename DataInputT, typename TypeInputT> std::map<std::string, - std::pair<typename std::remove_const<DataInputT>::type, typename std::remove_const<TypeInputT>::type>> + std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>> getObjectElements(DataInputT& o, TypeInputT& t) { std::map<std::string, std::pair<data::VariantPtr, type::VariantPtr>> ret; @@ -53,7 +57,7 @@ namespace armarx::aron::component_config if (x) { - for (const auto& [key, e]: x->getElements()) + for (const auto& [key, e] : x->getElements()) { auto ct = y->getMemberType(key); ret.insert({key, {e, ct}}); @@ -64,11 +68,14 @@ namespace armarx::aron::component_config template <typename DataInputT, typename TypeInputT> std::map<std::string, - std::pair<typename std::remove_const<DataInputT>::type, typename std::remove_const<TypeInputT>::type>> + std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>> getDictElements(DataInputT& o, TypeInputT& t) { - std::map<std::string, std::pair<typename std::remove_const<DataInputT>::type, - typename std::remove_const<TypeInputT>::type>> ret; + std::map<std::string, + std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>> + ret; auto x = data::Dict::DynamicCastAndCheck(o); auto y = type::Dict::DynamicCastAndCheck(t); @@ -76,7 +83,7 @@ namespace armarx::aron::component_config if (x) { - for (const auto& [key, e]: x->getElements()) + for (const auto& [key, e] : x->getElements()) { ret.insert({key, {e, ac}}); } @@ -85,11 +92,13 @@ namespace armarx::aron::component_config } template <typename DataInputT, typename TypeInputT> - std::vector<std::pair<typename std::remove_const<DataInputT>::type, typename std::remove_const<TypeInputT>::type>> + std::vector<std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>> getListElements(DataInputT& o, TypeInputT& t) { std::vector<std::pair<typename std::remove_const<DataInputT>::type, - typename std::remove_const<TypeInputT>::type>> ret; + typename std::remove_const<TypeInputT>::type>> + ret; auto x = data::List::DynamicCastAndCheck(o); auto y = type::List::DynamicCastAndCheck(t); @@ -97,7 +106,7 @@ namespace armarx::aron::component_config if (x) { - for (const auto& e: x->getElements()) + for (const auto& e : x->getElements()) { ret.emplace_back(e, ac); } @@ -106,8 +115,10 @@ namespace armarx::aron::component_config } template <typename DataInputT, typename TypeInputT> - std::pair<std::pair<typename std::remove_const<DataInputT>::type, typename std::remove_const<TypeInputT>::type>, - std::pair<typename std::remove_const<DataInputT>::type, typename std::remove_const<TypeInputT>::type>> + std::pair<std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>, + std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>> getPairElements(DataInputT& o, TypeInputT& t) { auto x = data::List::DynamicCastAndCheck(o); @@ -121,14 +132,14 @@ namespace armarx::aron::component_config auto ac0 = y->getFirstAcceptedType(); auto e1 = x->getElement(1); auto ac1 = y->getSecondAcceptedType(); - return {{e0, ac0}, - {e1, ac1}}; + return {{e0, ac0}, {e1, ac1}}; } return {}; } template <typename DataInputT, typename TypeInputT> - std::vector<std::pair<typename std::remove_const<DataInputT>::type, typename std::remove_const<TypeInputT>::type>> + std::vector<std::pair<typename std::remove_const<DataInputT>::type, + typename std::remove_const<TypeInputT>::type>> getTupleElements(DataInputT& o, TypeInputT& t) { std::vector<std::pair<data::VariantPtr, type::VariantPtr>> ret; @@ -140,7 +151,7 @@ namespace armarx::aron::component_config if (x) { unsigned int i = 0; - for (const auto& e: x->getElements()) + for (const auto& e : x->getElements()) { auto ac = y->getAcceptedType(i++); ret.emplace_back(e, ac); @@ -148,4 +159,4 @@ namespace armarx::aron::component_config } return ret; } -} \ No newline at end of file +} // namespace armarx::aron::component_config \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.cpp b/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.cpp index 1a9f09ecf7c7b2d90577ec8974c4968f4d88c213..10e021861bbc16a6464ce29c95946dbbd3170888 100644 --- a/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.cpp +++ b/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.cpp @@ -20,11 +20,13 @@ * GNU General Public License */ -#include <RobotAPI/libraries/aron/core/data/variant/All.h> -#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> -#include <ArmarXCore/core/application/properties/Property.h> #include "VariantHelperFactory.h" +#include <ArmarXCore/core/application/properties/Property.h> +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + +#include <RobotAPI/libraries/aron/core/data/variant/All.h> + namespace armarx::aron::component_config::products { template <> @@ -78,8 +80,9 @@ namespace armarx::aron::component_config::products template <> aron::data::VariantPtr - products::VariantHelper<type::Descriptor::INT>::from_string(const std::string& string, - const armarx::aron::Path& path) const + products::VariantHelper<type::Descriptor::INT>::from_string( + const std::string& string, + const armarx::aron::Path& path) const { ARMARX_TRACE; int i = string.empty() ? 0 : std::stoi(string); @@ -88,18 +91,20 @@ namespace armarx::aron::component_config::products template <> aron::data::VariantPtr - products::VariantHelper<type::Descriptor::FLOAT>::from_string(const std::string& string, - const armarx::aron::Path& path) const + products::VariantHelper<type::Descriptor::FLOAT>::from_string( + const std::string& string, + const armarx::aron::Path& path) const { ARMARX_TRACE; - float f = string.empty() ? 0 : std::stof(string); + float f = string.empty() ? 0 : std::stof(string); return make_float(f, path); } template <> aron::data::VariantPtr - products::VariantHelper<type::Descriptor::DOUBLE>::from_string(const std::string& string, - const armarx::aron::Path& path) const + products::VariantHelper<type::Descriptor::DOUBLE>::from_string( + const std::string& string, + const armarx::aron::Path& path) const { ARMARX_TRACE; double d = string.empty() ? 0 : std::stod(string); @@ -108,14 +113,16 @@ namespace armarx::aron::component_config::products template <> aron::data::VariantPtr - products::VariantHelper<type::Descriptor::BOOL>::from_string(const std::string& string, - const armarx::aron::Path& path) const + products::VariantHelper<type::Descriptor::BOOL>::from_string( + const std::string& string, + const armarx::aron::Path& path) const { ARMARX_TRACE; if (string == "true") { return make_bool(true, path); - } else if (string == "false" or string.empty()) + } + else if (string == "false" or string.empty()) { return make_bool(false, path); } @@ -124,8 +131,9 @@ namespace armarx::aron::component_config::products template <> aron::data::VariantPtr - products::VariantHelper<type::Descriptor::INT_ENUM>::from_string(const std::string& string, - const armarx::aron::Path& path) const + products::VariantHelper<type::Descriptor::INT_ENUM>::from_string( + const std::string& string, + const armarx::aron::Path& path) const { // TODO: this might not work ARMARX_TRACE; @@ -134,22 +142,25 @@ namespace armarx::aron::component_config::products template <> aron::data::VariantPtr - products::VariantHelper<type::Descriptor::STRING>::from_string(const std::string& string, - const armarx::aron::Path& path) const + products::VariantHelper<type::Descriptor::STRING>::from_string( + const std::string& string, + const armarx::aron::Path& path) const { ARMARX_TRACE; std::string formatted_string = ""; if (not string.empty()) { - formatted_string = armarx::FileSystemPathBuilder_ApplyFormattingAndResolveEnvAndCMakeVars(string); + formatted_string = + armarx::FileSystemPathBuilder_ApplyFormattingAndResolveEnvAndCMakeVars(string); } return make_string(formatted_string, path); } template <> void - products::VariantHelper<type::Descriptor::INT>::set_value_from_string(const armarx::aron::data::VariantPtr& variant, - const std::string& string) const + products::VariantHelper<type::Descriptor::INT>::set_value_from_string( + const armarx::aron::data::VariantPtr& variant, + const std::string& string) const { ARMARX_TRACE; data::Int::DynamicCast(variant)->getValue() = std::stoi(string); @@ -157,8 +168,9 @@ namespace armarx::aron::component_config::products template <> void - products::VariantHelper<type::Descriptor::FLOAT>::set_value_from_string(const armarx::aron::data::VariantPtr& variant, - const std::string& string) const + products::VariantHelper<type::Descriptor::FLOAT>::set_value_from_string( + const armarx::aron::data::VariantPtr& variant, + const std::string& string) const { ARMARX_TRACE; data::Float::DynamicCast(variant)->getValue() = std::stof(string); @@ -166,8 +178,9 @@ namespace armarx::aron::component_config::products template <> void - products::VariantHelper<type::Descriptor::DOUBLE>::set_value_from_string(const armarx::aron::data::VariantPtr& variant, - const std::string& string) const + products::VariantHelper<type::Descriptor::DOUBLE>::set_value_from_string( + const armarx::aron::data::VariantPtr& variant, + const std::string& string) const { ARMARX_TRACE; data::Double::DynamicCast(variant)->getValue() = std::stod(string); @@ -175,8 +188,9 @@ namespace armarx::aron::component_config::products template <> void - products::VariantHelper<type::Descriptor::BOOL>::set_value_from_string(const armarx::aron::data::VariantPtr& variant, - const std::string& string) const + products::VariantHelper<type::Descriptor::BOOL>::set_value_from_string( + const armarx::aron::data::VariantPtr& variant, + const std::string& string) const { ARMARX_TRACE; data::Bool::DynamicCast(variant)->getValue() = string == "true"; @@ -184,8 +198,9 @@ namespace armarx::aron::component_config::products template <> void - products::VariantHelper<type::Descriptor::STRING>::set_value_from_string(const armarx::aron::data::VariantPtr& variant, - const std::string& string) const + products::VariantHelper<type::Descriptor::STRING>::set_value_from_string( + const armarx::aron::data::VariantPtr& variant, + const std::string& string) const { ARMARX_TRACE; data::String::DynamicCast(variant)->getValue() = string; @@ -193,18 +208,18 @@ namespace armarx::aron::component_config::products template <> void - products::VariantHelper<type::Descriptor::INT_ENUM>::set_value_from_string(const armarx::aron::data::VariantPtr& variant, - const std::string& string) const + products::VariantHelper<type::Descriptor::INT_ENUM>::set_value_from_string( + const armarx::aron::data::VariantPtr& variant, + const std::string& string) const { ARMARX_TRACE; data::Int::DynamicCast(variant)->getValue() = std::stoi(string); } - template struct products::VariantHelper<type::Descriptor::INT>; template struct products::VariantHelper<type::Descriptor::STRING>; template struct products::VariantHelper<type::Descriptor::BOOL>; template struct products::VariantHelper<type::Descriptor::FLOAT>; template struct products::VariantHelper<type::Descriptor::DOUBLE>; template struct products::VariantHelper<type::Descriptor::INT_ENUM>; -} \ No newline at end of file +} // namespace armarx::aron::component_config::products \ No newline at end of file diff --git a/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.h b/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.h index d2dfb921a7f5cea9e55c6fd96258f258a965c9e3..21a352fe268161758d1a6b20aa96b49c34f1d6c0 100644 --- a/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.h +++ b/source/RobotAPI/libraries/aron_component_config/VariantHelperFactory.h @@ -22,8 +22,9 @@ #pragma once -#include <ArmarXCore/util/CPPUtility/SelfRegisteringFactory.h> #include <ArmarXCore/core/application/properties/forward_declarations.h> +#include <ArmarXCore/util/CPPUtility/SelfRegisteringFactory.h> + #include <RobotAPI/libraries/aron/core/Descriptor.h> #include <RobotAPI/libraries/aron/core/data/variant/Variant.h> @@ -33,20 +34,20 @@ namespace armarx::aron::component_config { struct VariantHelper : armarx::Factory<VariantHelper, type::Descriptor> { - explicit VariantHelper(Key) - { - }; + explicit VariantHelper(Key){}; virtual ~VariantHelper() = default; virtual std::string to_string(const armarx::aron::data::VariantPtr&) const = 0; - virtual void - set_value_from_string(const armarx::aron::data::VariantPtr&, const std::string& string) const = 0; + virtual void set_value_from_string(const armarx::aron::data::VariantPtr&, + const std::string& string) const = 0; - virtual aron::data::VariantPtr from_string(const std::string&, const armarx::aron::Path& path) const = 0; + virtual aron::data::VariantPtr from_string(const std::string&, + const armarx::aron::Path& path) const = 0; }; - } + } // namespace factories + namespace products { template <type::Descriptor DescT> @@ -55,9 +56,7 @@ namespace armarx::aron::component_config using RegistrarT = factories::VariantHelper::Registrar<VariantHelper<DescT>>; static constexpr type::Descriptor id = DescT; - explicit VariantHelper() : RegistrarT(typename RegistrarT::Registration()) - { - }; + explicit VariantHelper() : RegistrarT(typename RegistrarT::Registration()){}; [[nodiscard]] std::string to_string(const data::VariantPtr& ptr) const override; @@ -68,101 +67,99 @@ namespace armarx::aron::component_config from_string(const std::string&, const armarx::aron::Path& path) const override; }; - - } + } // namespace products template <> std::string products::VariantHelper<type::Descriptor::INT>::to_string(const data::VariantPtr& ptr) const; template <> - aron::data::VariantPtr - products::VariantHelper<type::Descriptor::INT>::from_string(const std::string&, - const armarx::aron::Path& path) const; + aron::data::VariantPtr products::VariantHelper<type::Descriptor::INT>::from_string( + const std::string&, + const armarx::aron::Path& path) const; template <> - void - products::VariantHelper<type::Descriptor::INT>::set_value_from_string(const armarx::aron::data::VariantPtr&, - const std::string&) const; + void products::VariantHelper<type::Descriptor::INT>::set_value_from_string( + const armarx::aron::data::VariantPtr&, + const std::string&) const; template <> std::string products::VariantHelper<type::Descriptor::FLOAT>::to_string(const data::VariantPtr& ptr) const; template <> - aron::data::VariantPtr - products::VariantHelper<type::Descriptor::FLOAT>::from_string(const std::string&, - const armarx::aron::Path& path) const; + aron::data::VariantPtr products::VariantHelper<type::Descriptor::FLOAT>::from_string( + const std::string&, + const armarx::aron::Path& path) const; template <> - void - products::VariantHelper<type::Descriptor::FLOAT>::set_value_from_string(const armarx::aron::data::VariantPtr&, - const std::string&) const; + void products::VariantHelper<type::Descriptor::FLOAT>::set_value_from_string( + const armarx::aron::data::VariantPtr&, + const std::string&) const; template <> std::string products::VariantHelper<type::Descriptor::BOOL>::to_string(const data::VariantPtr& ptr) const; template <> - aron::data::VariantPtr - products::VariantHelper<type::Descriptor::BOOL>::from_string(const std::string&, - const armarx::aron::Path& path) const; + aron::data::VariantPtr products::VariantHelper<type::Descriptor::BOOL>::from_string( + const std::string&, + const armarx::aron::Path& path) const; template <> - void - products::VariantHelper<type::Descriptor::BOOL>::set_value_from_string(const armarx::aron::data::VariantPtr&, - const std::string&) const; + void products::VariantHelper<type::Descriptor::BOOL>::set_value_from_string( + const armarx::aron::data::VariantPtr&, + const std::string&) const; template <> std::string products::VariantHelper<type::Descriptor::STRING>::to_string(const data::VariantPtr& ptr) const; template <> - aron::data::VariantPtr - products::VariantHelper<type::Descriptor::STRING>::from_string(const std::string&, - const armarx::aron::Path& path) const; + aron::data::VariantPtr products::VariantHelper<type::Descriptor::STRING>::from_string( + const std::string&, + const armarx::aron::Path& path) const; template <> - void - products::VariantHelper<type::Descriptor::STRING>::set_value_from_string(const armarx::aron::data::VariantPtr&, - const std::string&) const; + void products::VariantHelper<type::Descriptor::STRING>::set_value_from_string( + const armarx::aron::data::VariantPtr&, + const std::string&) const; template <> std::string products::VariantHelper<type::Descriptor::DOUBLE>::to_string(const data::VariantPtr& ptr) const; template <> - aron::data::VariantPtr - products::VariantHelper<type::Descriptor::DOUBLE>::from_string(const std::string&, - const armarx::aron::Path& path) const; + aron::data::VariantPtr products::VariantHelper<type::Descriptor::DOUBLE>::from_string( + const std::string&, + const armarx::aron::Path& path) const; template <> - void - products::VariantHelper<type::Descriptor::DOUBLE>::set_value_from_string(const armarx::aron::data::VariantPtr&, - const std::string&) const; + void products::VariantHelper<type::Descriptor::DOUBLE>::set_value_from_string( + const armarx::aron::data::VariantPtr&, + const std::string&) const; template <> - std::string - products::VariantHelper<type::Descriptor::INT_ENUM>::to_string(const data::VariantPtr& ptr) const; + std::string products::VariantHelper<type::Descriptor::INT_ENUM>::to_string( + const data::VariantPtr& ptr) const; template <> - aron::data::VariantPtr - products::VariantHelper<type::Descriptor::INT_ENUM>::from_string(const std::string&, - const armarx::aron::Path& path) const; + aron::data::VariantPtr products::VariantHelper<type::Descriptor::INT_ENUM>::from_string( + const std::string&, + const armarx::aron::Path& path) const; template <> - void - products::VariantHelper<type::Descriptor::INT_ENUM>::set_value_from_string(const armarx::aron::data::VariantPtr&, - const std::string&) const; - + void products::VariantHelper<type::Descriptor::INT_ENUM>::set_value_from_string( + const armarx::aron::data::VariantPtr&, + const std::string&) const; static inline const std::list<type::Descriptor> implementedListDescriptors = { - type::Descriptor::INT_ENUM, - type::Descriptor::INT, - type::Descriptor::STRING, - type::Descriptor::FLOAT, - type::Descriptor::DOUBLE, - type::Descriptor::BOOL, + type::Descriptor::INT_ENUM, + type::Descriptor::INT, + type::Descriptor::STRING, + type::Descriptor::FLOAT, + type::Descriptor::DOUBLE, + type::Descriptor::BOOL, }; extern template struct products::VariantHelper<type::Descriptor::INT>; extern template struct products::VariantHelper<type::Descriptor::FLOAT>; @@ -170,5 +167,4 @@ namespace armarx::aron::component_config extern template struct products::VariantHelper<type::Descriptor::STRING>; extern template struct products::VariantHelper<type::Descriptor::BOOL>; extern template struct products::VariantHelper<type::Descriptor::INT_ENUM>; -} - +} // namespace armarx::aron::component_config