diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index a5274706c4f359b45f1e8d7fb925b66479865625..84a5e312a9ef7502b9b3c22fcd7da4ab0f7e725b 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -47,7 +47,6 @@ set(LIB_FILES # core/base/ProviderSegmentBase.cpp core/workingmemory/ice_conversions.cpp - core/workingmemory/detail/CopyWithoutData.cpp core/workingmemory/CoreSegment.cpp core/workingmemory/Entity.cpp core/workingmemory/EntityInstance.cpp @@ -166,7 +165,6 @@ set(LIB_HEADERS core/base/MemoryBase.h core/base/ProviderSegmentBase.h - core/workingmemory/detail/CopyWithoutData.h core/workingmemory/CoreSegment.h core/workingmemory/Entity.h core/workingmemory/EntityInstance.h diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp index 8097ab7179a37779ce7c55b0659cd9b535978fc9..7a3ef7efe1d9b7b980331c42d7254a4fd69a2a66 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp @@ -39,25 +39,19 @@ namespace armarx::armem::wm } - Commit CoreSegment::toCommit() const + CoreSegment::~CoreSegment() { - Commit c; - for (const auto& [k, s] : _container) - { - c.append(s.toCommit()); - } - return c; } - void CoreSegment::_copySelfWithoutData(CoreSegment& other) const + Commit CoreSegment::toCommit() const { - other.id() = _id; - other.setMaxHistorySize(_maxHistorySize); + Commit c; for (const auto& [k, s] : _container) { - other.addProviderSegment(s.copyWithoutData()); + c.append(s.toCommit()); } + return c; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h index 54df4ff40aa6f19a74e9a8d8e1f968bf111b7711..7dff9a9ad1afa3bf819ef943e0c18179b56f80e0 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h @@ -6,7 +6,6 @@ #include <RobotAPI/libraries/armem/core/base/CoreSegmentBase.h> #include "ProviderSegment.h" -#include "detail/CopyWithoutData.h" namespace armarx::armem::wm @@ -16,14 +15,14 @@ namespace armarx::armem::wm * @brief Data of a core segment containing multiple provider segments. */ class CoreSegment : - public base::CoreSegmentBase<ProviderSegment, CoreSegment>, - public detail::CopyWithoutData<CoreSegment> + public base::CoreSegmentBase<ProviderSegment, CoreSegment> { using Base = base::CoreSegmentBase<ProviderSegment, CoreSegment>; public: using Base::CoreSegmentBase; + virtual ~CoreSegment() override; CoreSegment(const CoreSegment& other); CoreSegment(CoreSegment&& other); @@ -102,8 +101,6 @@ namespace armarx::armem::wm protected: - virtual void _copySelfWithoutData(CoreSegment& other) const override; - mutable std::mutex _mutex; }; diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp index e704e96d5454d27bfb095120c1901e000611122a..27661a6ce7975ebbd0be0b2745945943d5e22e7a 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp @@ -1,5 +1,6 @@ #include "Entity.h" + namespace armarx::armem::wm { @@ -16,13 +17,4 @@ namespace armarx::armem::wm return c; } - void Entity::_copySelfWithoutData(Entity& other) const - { - other.id() = _id; - other.setMaxHistorySize(_maxHistorySize); - for (const auto& [k, s] : _container) - { - other.addSnapshot(s.copyWithoutData()); - } - } } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h index d8e29a7941dc8a9f0477b2f21bdcf81b97583e57..450a95c819b49726dac2b6e85a5cd7625e854551 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h @@ -3,7 +3,6 @@ #include <RobotAPI/libraries/armem/core/base/EntityBase.h> #include "EntitySnapshot.h" -#include "detail/CopyWithoutData.h" namespace armarx::armem::wm @@ -28,8 +27,7 @@ namespace armarx::armem::wm * each containing a single `AronData` object of a specific `AronType`. */ class Entity : - public base::EntityBase<EntitySnapshot, Entity>, - public detail::CopyWithoutData<Entity> + public base::EntityBase<EntitySnapshot, Entity> { using Base = base::EntityBase<EntitySnapshot, Entity>; @@ -48,10 +46,6 @@ namespace armarx::armem::wm */ Commit toCommit() const; - protected: - - virtual void _copySelfWithoutData(Entity& other) const override; - }; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp index 0962f86fb946eb3cc6a48fddc4a4568a936f1362..1be40a13108fc30ac615a3ed08ec1a64f3245b5f 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp @@ -57,11 +57,4 @@ namespace armarx::armem::wm this->_metadata.timeArrived = update.timeArrived; } - - void EntityInstance::_copySelfWithoutData(EntityInstance& other) const - { - other._id = _id; - other._metadata = _metadata; - // no: other._data = _data; - } } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h index 06389c3664542e13195083df8f9513047b4f169a..fbeb3f19f93e594604fd9de94da6975584b12745 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h @@ -2,8 +2,6 @@ #include <RobotAPI/libraries/armem/core/base/EntityInstanceBase.h> -#include "detail/CopyWithoutData.h" - namespace armarx::armem::wm { @@ -42,8 +40,7 @@ namespace armarx::armem::wm * @brief Data of a single entity instance. */ class EntityInstance : - public base::EntityInstanceBase<EntityInstance>, - public detail::CopyWithoutData<EntityInstance> + public base::EntityInstanceBase<EntityInstance> { using Base = base::EntityInstanceBase<EntityInstance>; @@ -87,11 +84,6 @@ namespace armarx::armem::wm virtual bool equalsDeep(const EntityInstance& other) const override; - protected: - - virtual void _copySelfWithoutData(EntityInstance& other) const override; - - private: /// The metadata. diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp index 76d5400131a7ec6a57478f13afb0dfc38a4da174..5d7506a0f84a574367ff9e7bed10161ed776c6f1 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp @@ -17,12 +17,4 @@ namespace armarx::armem::wm return ret; } - void EntitySnapshot::_copySelfWithoutData(EntitySnapshot& other) const - { - other.id() = _id; - for (const auto& s : _container) - { - other.addInstance(s.copyWithoutData()); - } - } } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h index 226fefd83e6cce5e18233bd8b5bf6c58ca16fcc5..90b03d1ae67ae2a0640d8f5381365040e04aeed0 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h @@ -3,7 +3,6 @@ #include <RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h> #include "EntityInstance.h" -#include "detail/CopyWithoutData.h" namespace armarx::armem::wm @@ -13,8 +12,7 @@ namespace armarx::armem::wm * @brief Data of an entity at one point in time. */ class EntitySnapshot : - public base::EntitySnapshotBase<EntityInstance, EntitySnapshot>, - public detail::CopyWithoutData<EntitySnapshot> + public base::EntitySnapshotBase<EntityInstance, EntitySnapshot> { using Base = base::EntitySnapshotBase<EntityInstance, EntitySnapshot>; @@ -31,10 +29,5 @@ namespace armarx::armem::wm std::vector<aron::datanavigator::DictNavigatorPtr> getAronData() const; - - protected: - - virtual void _copySelfWithoutData(EntitySnapshot& other) const override; - }; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp index 70fd41e7c451175d5964a81d48f4e8270c2e611c..c69a222b3e0f3e9809744becb80f33a70da78e83 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp @@ -82,14 +82,4 @@ namespace armarx::armem::wm return c; } - - void Memory::_copySelfWithoutData(Memory& other) const - { - other.id() = _id; - for (const auto& [k, s] : _container) - { - other.addCoreSegment(s.copyWithoutData()); - } - } - } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h index d52bce5ca30d2a464881e73f4cd4994a29429751..b6595c83d3a7a2129e0f330894cce9d0044e42e0 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h @@ -3,7 +3,6 @@ #include <RobotAPI/libraries/armem/core/base/MemoryBase.h> #include "CoreSegment.h" -#include "detail/CopyWithoutData.h" namespace armarx::armem::wm @@ -13,8 +12,7 @@ namespace armarx::armem::wm * @brief Data of a memory consisting of multiple core segments. */ class Memory : - public base::MemoryBase<CoreSegment, Memory>, - public detail::CopyWithoutData<Memory> + public base::MemoryBase<CoreSegment, Memory> { using Base = base::MemoryBase<CoreSegment, Memory>; @@ -47,10 +45,5 @@ namespace armarx::armem::wm */ Commit toCommit() const; - - protected: - - virtual void _copySelfWithoutData(Memory& other) const override; - }; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp index bd03cf21cd8b616a3afcc4d531377288e55c5f2f..b67fa10f5ba4afc363ee4b83d523b9476f054553 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp @@ -18,14 +18,4 @@ namespace armarx::armem::wm return c; } - void ProviderSegment::_copySelfWithoutData(ProviderSegment& other) const - { - other.id() = _id; - other.setMaxHistorySize(_maxHistorySize); - for (const auto& [k, s] : _container) - { - other.addEntity(s.copyWithoutData()); - } - } - } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h index f3e7086288f038853832a2b286a76910e9437bff..e837469d8b44ce76ad624ee6adea93285705c474 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h @@ -3,7 +3,6 @@ #include <RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h> #include "Entity.h" -#include "detail/CopyWithoutData.h" namespace armarx::armem::wm @@ -13,8 +12,7 @@ namespace armarx::armem::wm * @brief Data of a provider segment containing multiple entities. */ class ProviderSegment : - public base::ProviderSegmentBase<Entity, ProviderSegment>, - public detail::CopyWithoutData<ProviderSegment> + public base::ProviderSegmentBase<Entity, ProviderSegment> { using Base = base::ProviderSegmentBase<Entity, ProviderSegment>; @@ -33,11 +31,6 @@ namespace armarx::armem::wm */ Commit toCommit() const; - - protected: - - virtual void _copySelfWithoutData(ProviderSegment& other) const override; - }; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.cpp deleted file mode 100644 index 70441033dd0fcb24a502bcd4e552764c7c2f5d3c..0000000000000000000000000000000000000000 --- a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "CopyWithoutData.h" diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.h b/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.h deleted file mode 100644 index caabd1e6002c803aa6a1015afd7ce660abd2482f..0000000000000000000000000000000000000000 --- a/source/RobotAPI/libraries/armem/core/workingmemory/detail/CopyWithoutData.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - - -namespace armarx::armem::wm::detail -{ - - /** - * @class Allows copying `*this` without data in the leaf - * data structures. - */ - template <class DerivedT> - class CopyWithoutData - { - public: - - /// Get a copy of `this` without data. - virtual DerivedT copyWithoutData() const - { - DerivedT t; - _copySelfWithoutData(t); - return t; - } - - - protected: - - virtual void _copySelfWithoutData(DerivedT& other) const = 0; - - }; -} diff --git a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp index cc27449064f6134df205616a17bcd9758f679865..0c41d3a6f0d587a320f119159af235613a9721c2 100644 --- a/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp +++ b/source/RobotAPI/libraries/armem/server/query_proc/workingmemory/EntityQueryProcessor.cpp @@ -22,7 +22,13 @@ namespace armarx::armem::wm::query_proc } else { - result.addSnapshot(snapshot.copyWithoutData()); + wm::EntitySnapshot copy = snapshot; + copy.forEachEntityInstance([](EntityInstance & i) + { + i.setData(nullptr); + return true; + }); + result.addSnapshot(std::move(copy)); } }