diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp index e14ce8848fd1fe8242d681770563bf9cddefd7cd..650eae74f37e089c49a92b1592dff8e084a49be7 100644 --- a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp +++ b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp @@ -17,21 +17,25 @@ namespace armarx::armem::client::util const std::string prefix = propertyPrefix(); - props = defaultProperties(); + if (not props.has_value()) + { + props = defaultProperties(); + } - def->optional(props.memoryName, prefix + "Memory"); - def->optional(props.coreSegmentName, prefix + "CoreSegment"); + def->optional(props->memoryName, prefix + "Memory"); + def->optional(props->coreSegmentName, prefix + "CoreSegment"); } void SimpleReaderBase::connect(armarx::armem::client::MemoryNameSystem& mns) { // Wait for the memory to become available and add it as dependency. - ARMARX_IMPORTANT << "SimpleReaderBase: Waiting for memory '" << props.memoryName << "' ..."; + ARMARX_IMPORTANT << "SimpleReaderBase: Waiting for memory '" << properties().memoryName + << "' ..."; try { - memoryReaderClient = mns.useReader(MemoryID().withMemoryName(props.memoryName)); - ARMARX_IMPORTANT << "SimpleReaderBase: Connected to memory '" << props.memoryName + memoryReaderClient = mns.useReader(MemoryID().withMemoryName(properties().memoryName)); + ARMARX_IMPORTANT << "SimpleReaderBase: Connected to memory '" << properties().memoryName << "'"; } catch (const armem::error::CouldNotResolveMemoryServer& e) @@ -41,12 +45,6 @@ namespace armarx::armem::client::util } } - std::mutex& - SimpleReaderBase::memoryReaderMutex() - { - return memoryMutex; - } - const armem::client::Reader& SimpleReaderBase::memoryReader() const { @@ -56,7 +54,17 @@ namespace armarx::armem::client::util const SimpleReaderBase::Properties& SimpleReaderBase::properties() const { - return props; + if (not props.has_value()) + { + const_cast<std::optional<Properties>&>(props) = defaultProperties(); + } + return props.value(); + } + + void + SimpleReaderBase::setProperties(const Properties& p) + { + props = p; } } // namespace armarx::armem::client::util diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h index 2b637193765215b81519c55397bcc51a7436041b..3e83956805c03705a90269a2dc565e14a6fdddf5 100644 --- a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h +++ b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h @@ -21,7 +21,7 @@ #pragma once -#include <mutex> +#include <optional> #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> @@ -53,25 +53,18 @@ namespace armarx::armem::client::util virtual void connect(armarx::armem::client::MemoryNameSystem& mns); const Properties& properties() const; - - void - setProperties(const Properties& p) - { - props = p; - } + void setProperties(const Properties& p); protected: virtual std::string propertyPrefix() const = 0; virtual Properties defaultProperties() const = 0; - std::mutex& memoryReaderMutex(); const armem::client::Reader& memoryReader() const; private: - Properties props; + std::optional<Properties> props; armem::client::Reader memoryReaderClient; - std::mutex memoryMutex; }; } // namespace armarx::armem::client::util