From ab806daedd7fc4d67c2b1810be0860fab0ad7676 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Thu, 10 Nov 2022 14:15:39 +0100
Subject: [PATCH] Introduce and use constants for object memory IDs

---
 .../server/ObjectMemory/ObjectMemory.cpp      |  6 +--
 .../armem/server/ObjectMemory/ObjectMemory.h  |  9 +----
 .../libraries/armem_objects/CMakeLists.txt    |  3 ++
 .../libraries/armem_objects/memory_ids.cpp    | 35 +++++++++++++++++
 .../libraries/armem_objects/memory_ids.h      | 38 +++++++++++++++++++
 .../server/attachments/Segment.h              |  3 +-
 .../armem_objects/server/class/Segment.cpp    |  3 +-
 .../armem_objects/server/instance/Segment.cpp |  4 +-
 8 files changed, 87 insertions(+), 14 deletions(-)
 create mode 100644 source/RobotAPI/libraries/armem_objects/memory_ids.cpp
 create mode 100644 source/RobotAPI/libraries/armem_objects/memory_ids.h

diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
index d6966d179..6fe11f319 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
@@ -33,20 +33,18 @@
 #include <RobotAPI/libraries/armem/core/Prediction.h>
 #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron/Marker.aron.generated.h>
+#include <RobotAPI/libraries/armem_objects/memory_ids.h>
 
 
 namespace armarx::armem::server::obj
 {
 
-    const std::string ObjectMemory::defaultMemoryName = "Object";
-
-
     armarx::PropertyDefinitionsPtr ObjectMemory::createPropertyDefinitions()
     {
         armarx::PropertyDefinitionsPtr defs(new ComponentPropertyDefinitions(getConfigIdentifier()));
 
         const std::string prefix = "mem.";
-        workingMemory().name() = defaultMemoryName;
+        workingMemory().name() = objects::memoryID.memoryName;
 
         classSegment.defineProperties(defs, prefix + "cls.");
         instance::SegmentAdapter::defineProperties(defs, prefix + "inst.");
diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
index 869beea33..566d1fec8 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
@@ -22,8 +22,8 @@
 
 #pragma once
 
-#include "RobotAPI/libraries/armem/client/plugins/ReaderWriterPlugin.h"
-#include "RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h"
+#include <RobotAPI/libraries/armem/client/plugins/ReaderWriterPlugin.h>
+#include <RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotReader.h>
 #include <RobotAPI/libraries/armem_objects/server/class/Segment.h>
 #include <RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.h>
 #include <RobotAPI/libraries/armem_objects/server/attachments/Segment.h>
@@ -66,11 +66,6 @@ namespace armarx::armem::server::obj
         , virtual public armarx::LightweightRemoteGuiComponentPluginUser
         , virtual public armarx::ArVizComponentPluginUser
     {
-    public:
-
-        static const std::string defaultMemoryName;
-
-
     public:
 
         ObjectMemory();
diff --git a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
index 7265e46d2..f1fbf745d 100644
--- a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt
@@ -20,6 +20,8 @@ armarx_add_library(
     HEADERS
         aron_conversions.h
         aron_forward_declarations.h
+        memory_ids.h
+        types.h
 
         server/class/FloorVis.h
         server/class/Segment.h
@@ -48,6 +50,7 @@ armarx_add_library(
 
     SOURCES
         aron_conversions.cpp
+        memory_ids.cpp
         types.cpp
 
         client/articulated_object/Reader.cpp
diff --git a/source/RobotAPI/libraries/armem_objects/memory_ids.cpp b/source/RobotAPI/libraries/armem_objects/memory_ids.cpp
new file mode 100644
index 000000000..ad77419a2
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_objects/memory_ids.cpp
@@ -0,0 +1,35 @@
+/*
+ * 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/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::armem_objects
+ * @author     Rainer Kartmann ( rainer dot kartmann at kit dot edu )
+ * @date       2022
+ * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
+ *             GNU General Public License
+ */
+
+#include "memory_ids.h"
+
+
+namespace armarx::armem
+{
+
+    const MemoryID objects::memoryID { "Object" };
+
+    const MemoryID objects::attachmentsSegmentID = memoryID.withCoreSegmentName("Attachments");
+    const MemoryID objects::classSegmentID = memoryID.withCoreSegmentName("Class");
+    const MemoryID objects::instaceSegmentID = memoryID.withCoreSegmentName("Instance");
+
+}
diff --git a/source/RobotAPI/libraries/armem_objects/memory_ids.h b/source/RobotAPI/libraries/armem_objects/memory_ids.h
new file mode 100644
index 000000000..50408b82f
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_objects/memory_ids.h
@@ -0,0 +1,38 @@
+/*
+ * 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/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::armem_objects
+ * @author     Rainer Kartmann ( rainer dot kartmann at kit dot edu )
+ * @date       2022
+ * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
+ *             GNU General Public License
+ */
+
+#pragma once
+
+#include <RobotAPI/libraries/armem/core/MemoryID.h>
+
+
+namespace armarx::armem::objects
+{
+
+    extern const MemoryID memoryID;
+
+    extern const MemoryID attachmentsSegmentID;
+    extern const MemoryID classSegmentID;
+    extern const MemoryID instaceSegmentID;
+
+
+} // namespace armarx::armem::objects
diff --git a/source/RobotAPI/libraries/armem_objects/server/attachments/Segment.h b/source/RobotAPI/libraries/armem_objects/server/attachments/Segment.h
index 4f8cd20cc..9f4636fa9 100644
--- a/source/RobotAPI/libraries/armem_objects/server/attachments/Segment.h
+++ b/source/RobotAPI/libraries/armem_objects/server/attachments/Segment.h
@@ -25,6 +25,7 @@
 #include <RobotAPI/libraries/armem/core/forward_declarations.h>
 #include <RobotAPI/libraries/armem/server/forward_declarations.h>
 #include <RobotAPI/libraries/armem_objects/types.h>
+#include <RobotAPI/libraries/armem_objects/memory_ids.h>
 
 #include <ArmarXCore/core/application/properties/forward_declarations.h>
 #include <ArmarXCore/core/logging/Logging.h>
@@ -57,7 +58,7 @@ namespace armarx::armem::server::obj::attachments
 
         struct Properties
         {
-            std::string coreSegmentName = "Attachments";
+            std::string coreSegmentName = objects::attachmentsSegmentID.coreSegmentName;
             int64_t maxHistorySize = -1;
         };
         Properties p;
diff --git a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp
index 3250a1cca..a95e98d01 100644
--- a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp
@@ -5,6 +5,7 @@
 #include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h>
 #include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
 #include <RobotAPI/libraries/armem_objects/aron_conversions.h>
+#include <RobotAPI/libraries/armem_objects/memory_ids.h>
 #include <RobotAPI/libraries/armem_objects/aron/ObjectClass.aron.generated.h>
 
 #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h>
@@ -22,7 +23,7 @@ namespace armarx::armem::server::obj::clazz
 {
 
     Segment::Segment(armem::server::MemoryToIceAdapter& memoryToIceAdapter) :
-        SpecializedCoreSegment(memoryToIceAdapter, "Class", arondto::ObjectClass::ToAronType(), -1)
+        SpecializedCoreSegment(memoryToIceAdapter, objects::classSegmentID.coreSegmentName, arondto::ObjectClass::ToAronType(), -1)
     {
     }
 
diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
index 9076cedad..7f3aee34f 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
@@ -6,6 +6,7 @@
 #include <RobotAPI/libraries/armem_objects/aron/ObjectClass.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron_conversions.h>
+#include <RobotAPI/libraries/armem_objects/memory_ids.h>
 
 #include <RobotAPI/libraries/armem/core/aron_conversions.h>
 #include <RobotAPI/libraries/armem/core/error.h>
@@ -15,6 +16,7 @@
 #include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
 #include <RobotAPI/libraries/armem/util/util.h>
 
+
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 
 #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
@@ -51,7 +53,7 @@ namespace armarx::armem::server::obj::instance
 
     Segment::Segment(armem::server::MemoryToIceAdapter& memoryToIceAdapter) :
         SpecializedCoreSegment(memoryToIceAdapter,
-                               "Instance",
+                               objects::instaceSegmentID.coreSegmentName,
                                arondto::ObjectInstance::ToAronType(),
                                64)
     {
-- 
GitLab