From 23f4e131fcac4b9edcd66efab13f40f812622e81 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Mon, 6 Nov 2023 16:42:48 +0100 Subject: [PATCH] Remove mutex, make SimpleReaderBase copy-able. Set default properties when used without registerPropertyDefinitions(). --- .../armem/client/util/SimpleReaderBase.cpp | 34 ++++++++++++------- .../armem/client/util/SimpleReaderBase.h | 13 ++----- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp index e14ce8848..650eae74f 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 2b6371937..3e8395680 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 -- GitLab