From b86d2b48cbd0a6367ba667f432879624a7098cca Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 5 Aug 2021 15:08:51 +0200 Subject: [PATCH] Make toCommit() a free function, remove copy/move ctors/ops --- .../RobotAPI/libraries/armem/CMakeLists.txt | 2 + .../armem/core/diskmemory/CoreSegment.h | 1 - .../libraries/armem/core/diskmemory/Entity.h | 1 - .../armem/core/diskmemory/EntityInstance.cpp | 6 --- .../armem/core/diskmemory/EntityInstance.h | 5 --- .../armem/core/diskmemory/EntitySnapshot.h | 1 - .../libraries/armem/core/diskmemory/Memory.h | 1 - .../armem/core/diskmemory/ProviderSegment.h | 1 - .../armem/core/longtermmemory/CoreSegment.h | 1 - .../armem/core/longtermmemory/Entity.h | 1 - .../core/longtermmemory/EntityInstance.h | 5 --- .../core/longtermmemory/EntitySnapshot.h | 1 - .../core/longtermmemory/ProviderSegment.h | 1 - .../libraries/armem/core/operations.cpp | 34 +++++++++++++++ .../libraries/armem/core/operations.h | 42 +++++++++++++++++++ .../armem/core/workingmemory/CoreSegment.cpp | 11 ----- .../armem/core/workingmemory/Entity.cpp | 12 ------ .../armem/core/workingmemory/Entity.h | 15 +------ .../armem/core/workingmemory/EntityInstance.h | 5 --- .../core/workingmemory/EntitySnapshot.cpp | 13 ------ .../armem/core/workingmemory/EntitySnapshot.h | 13 +----- .../armem/core/workingmemory/Memory.cpp | 11 ----- .../armem/core/workingmemory/Memory.h | 11 ----- .../core/workingmemory/ProviderSegment.cpp | 13 ------ .../core/workingmemory/ProviderSegment.h | 15 +------ .../armem/server/MemoryToIceAdapter.cpp | 2 +- 26 files changed, 82 insertions(+), 142 deletions(-) create mode 100644 source/RobotAPI/libraries/armem/core/operations.cpp create mode 100644 source/RobotAPI/libraries/armem/core/operations.h diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 6898b8e36..475bfbcf1 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -25,6 +25,7 @@ set(LIB_FILES core/Commit.cpp core/MemoryID.cpp core/MemoryID_operators.cpp + core/operations.cpp core/SuccessHeader.cpp core/Time.cpp core/ice_conversions.cpp @@ -138,6 +139,7 @@ set(LIB_HEADERS core/DataMode.h core/MemoryID.h core/MemoryID_operators.h + core/operations.h core/SuccessHeader.h core/Time.h core/aron_conversions.h diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h index 76bb297e7..cccf81b00 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/CoreSegment.h @@ -22,7 +22,6 @@ namespace armarx::armem::d_ltm public: using Base::CoreSegmentBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h b/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h index 350222755..09b8ab78c 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/Entity.h @@ -38,7 +38,6 @@ namespace armarx::armem::d_ltm public: using Base::EntityBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp index d22310fb2..e3bff18fa 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp @@ -15,12 +15,6 @@ namespace armarx::armem::d_ltm { - EntityInstance::EntityInstance(const EntityInstance& other) : - Base(other), - path(other.path) - { - } - bool EntityInstance::equalsDeep(const EntityInstance& other) const { return id() == other.id(); diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h index c27f49951..c94ee5dcd 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h @@ -22,11 +22,6 @@ namespace armarx::armem::d_ltm using Base::EntityInstanceBase; - EntityInstance(const EntityInstance& other); - EntityInstance(EntityInstance&& other) = default; - EntityInstance& operator=(const EntityInstance& other) = default; - EntityInstance& operator=(EntityInstance&& other) = default; - /** * @brief Fill `*this` with the update's values. diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h index be36a8a77..5005af5f7 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h @@ -24,7 +24,6 @@ namespace armarx::armem::d_ltm public: using Base::EntitySnapshotBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h b/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h index 7f7872f7a..de2cae3c7 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/Memory.h @@ -22,7 +22,6 @@ namespace armarx::armem::d_ltm public: using Base::MemoryBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h index 8ad96ea06..eb7d300e0 100644 --- a/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h +++ b/source/RobotAPI/libraries/armem/core/diskmemory/ProviderSegment.h @@ -22,7 +22,6 @@ namespace armarx::armem::d_ltm public: using Base::ProviderSegmentBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h index adb325791..797b9df1f 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h @@ -21,7 +21,6 @@ namespace armarx::armem::ltm public: using Base::CoreSegmentBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h index c564e60b6..79c783de9 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h @@ -36,7 +36,6 @@ namespace armarx::armem::ltm public: using Base::EntityBase; - using Base::operator=; Entity() { diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h index ba72d68bf..6046f6ac5 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h @@ -21,11 +21,6 @@ namespace armarx::armem::ltm using Base::EntityInstanceBase; - EntityInstance(const EntityInstance& other) = default; - EntityInstance(EntityInstance&& other) = default; - EntityInstance& operator=(const EntityInstance& other) = default; - EntityInstance& operator=(EntityInstance&& other) = default; - /** * @brief Fill `*this` with the update's values. diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h index b55760247..b3d6211bd 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h @@ -23,7 +23,6 @@ namespace armarx::armem::ltm public: using Base::EntitySnapshotBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h index c18100e96..ed48ff071 100644 --- a/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h +++ b/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h @@ -21,7 +21,6 @@ namespace armarx::armem::ltm public: using Base::ProviderSegmentBase; - using Base::operator=; // Conversion diff --git a/source/RobotAPI/libraries/armem/core/operations.cpp b/source/RobotAPI/libraries/armem/core/operations.cpp new file mode 100644 index 000000000..e43995730 --- /dev/null +++ b/source/RobotAPI/libraries/armem/core/operations.cpp @@ -0,0 +1,34 @@ +#include "operations.h" + +#include "workingmemory/EntityInstance.h" + + +namespace armarx +{ + + std::vector<aron::datanavigator::DictNavigatorPtr> + armem::getAronData(const wm::EntitySnapshot& snapshot) + { + std::vector<aron::datanavigator::DictNavigatorPtr> result; + snapshot.forEachChild([&result](const wm::EntityInstance& instance) + { + result.push_back(instance.data()); + return true; + }); + return result; + } + + + armem::EntityUpdate armem::toEntityUpdate(const wm::EntitySnapshot& snapshot) + { + EntityUpdate up; + up.entityID = snapshot.id().getEntityID(); + up.timeCreated = snapshot.time(); + up.instancesData = getAronData(snapshot); + return up; + } + +} + + + diff --git a/source/RobotAPI/libraries/armem/core/operations.h b/source/RobotAPI/libraries/armem/core/operations.h new file mode 100644 index 000000000..9fc479dcf --- /dev/null +++ b/source/RobotAPI/libraries/armem/core/operations.h @@ -0,0 +1,42 @@ +#pragma once + +#if 0 // Not need at the moment. +#include "workingmemory/Memory.h" +#include "workingmemory/CoreSegment.h" +#include "workingmemory/ProviderSegment.h" +#include "workingmemory/Entity.h" +#include "workingmemory/EntityInstance.h" +#endif + +#include "workingmemory/EntitySnapshot.h" + + +/* + * Functions performing some "advanced" operations on the memory + * data structure, which are using their public API but should not + * be part of it. + */ + +namespace armarx::armem +{ + + std::vector<aron::datanavigator::DictNavigatorPtr> + getAronData(const wm::EntitySnapshot& snapshot); + + EntityUpdate toEntityUpdate(const wm::EntitySnapshot& snapshot); + + + template <class ContainerT> + Commit toCommit(const ContainerT& container) + { + Commit commit; + container.forEachSnapshot([&commit](const wm::EntitySnapshot & snapshot) + { + commit.add(toEntityUpdate(snapshot)); + return true; + }); + return commit; + } + +} + diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp index 9e87538e0..eb437eb16 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/CoreSegment.cpp @@ -39,17 +39,6 @@ namespace armarx::armem::wm } - Commit CoreSegment::toCommit() const - { - Commit c; - for (const auto& [k, s] : _container) - { - c.append(s.toCommit()); - } - return c; - } - - std::mutex& CoreSegment::mutex() const { return _mutex; diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp index 27661a6ce..e212c0d36 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.cpp @@ -4,17 +4,5 @@ namespace armarx::armem::wm { - Commit Entity::toCommit() const - { - Commit c; - for (const auto& [k, s] : _container) - { - EntityUpdate& up = c.add(); - up.entityID = id(); - up.timeCreated = k; - up.instancesData = s.getAronData(); - } - return c; - } } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h index 450a95c81..34e9b2abd 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Entity.h @@ -29,22 +29,9 @@ namespace armarx::armem::wm class Entity : public base::EntityBase<EntitySnapshot, Entity> { - using Base = base::EntityBase<EntitySnapshot, Entity>; - public: - using Base::EntityBase; - - Entity(const Entity& other) = default; - Entity(Entity&& other) = default; - Entity& operator=(const Entity& other) = default; - Entity& operator=(Entity&& other) = default; - - /** - * @brief Convert the content of this segmnet into a commit - * @return The resulting commit - */ - Commit toCommit() const; + using base::EntityBase<EntitySnapshot, Entity>::EntityBase; }; diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h index 18d744c59..158b1c0f8 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h @@ -23,11 +23,6 @@ namespace armarx::armem::wm using Base::EntityInstanceBase; - EntityInstance(const EntityInstance& other) = default; - EntityInstance(EntityInstance&& other) = default; - EntityInstance& operator=(const EntityInstance& other) = default; - EntityInstance& operator=(EntityInstance&& other) = default; - /** * @brief Fill `*this` with the update's values. diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp index 5d7506a0f..b5daa3192 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.cpp @@ -1,20 +1,7 @@ #include "EntitySnapshot.h" -#include <ArmarXCore/core/exceptions/local/ExpressionException.h> - -#include "error.h" - namespace armarx::armem::wm { - std::vector<aron::datanavigator::DictNavigatorPtr> EntitySnapshot::getAronData() const - { - std::vector<aron::datanavigator::DictNavigatorPtr> ret; - for (const auto& aron : _container) - { - ret.push_back(aron.data()); - } - return ret; - } } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h index 90b03d1ae..c19a2f830 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntitySnapshot.h @@ -14,20 +14,9 @@ namespace armarx::armem::wm class EntitySnapshot : public base::EntitySnapshotBase<EntityInstance, EntitySnapshot> { - using Base = base::EntitySnapshotBase<EntityInstance, EntitySnapshot>; - public: - using Base::EntitySnapshotBase; - // using Base::operator=; - - EntitySnapshot(const EntitySnapshot& other) = default; - EntitySnapshot(EntitySnapshot&& other) = default; - EntitySnapshot& operator=(const EntitySnapshot& other) = default; - EntitySnapshot& operator=(EntitySnapshot&& other) = default; - - - std::vector<aron::datanavigator::DictNavigatorPtr> getAronData() const; + using base::EntitySnapshotBase<EntityInstance, EntitySnapshot>::EntitySnapshotBase; }; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp index c69a222b3..7bff4f19e 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp @@ -71,15 +71,4 @@ namespace armarx::armem::wm return result; } - - Commit Memory::toCommit() const - { - Commit c; - for (const auto& [k, s] : _container) - { - c.append(s.toCommit()); - } - return c; - } - } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h index b6595c83d..e3684b3b6 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h @@ -20,10 +20,6 @@ namespace armarx::armem::wm using Base::MemoryBase; - Memory(const Memory& other) = default; - Memory(Memory&& other) = default; - Memory& operator=(const Memory& other) = default; - Memory& operator=(Memory&& other) = default; /** * @brief Perform the commit, locking the core segments. @@ -38,12 +34,5 @@ namespace armarx::armem::wm */ Base::UpdateResult updateLocking(const EntityUpdate& update); - - /** - * @brief Convert the content of this memory into a commit - * @return The resulting commit - */ - Commit toCommit() const; - }; } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp index b67fa10f5..01aa4e39b 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.cpp @@ -1,21 +1,8 @@ #include "ProviderSegment.h" -#include <ArmarXCore/core/exceptions/local/ExpressionException.h> - -#include "error.h" - namespace armarx::armem::wm { - Commit ProviderSegment::toCommit() const - { - Commit c; - for (const auto& [k, s] : _container) - { - c.append(s.toCommit()); - } - return c; - } } diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h index e837469d8..75b5d3b36 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h @@ -14,22 +14,9 @@ namespace armarx::armem::wm class ProviderSegment : public base::ProviderSegmentBase<Entity, ProviderSegment> { - using Base = base::ProviderSegmentBase<Entity, ProviderSegment>; - public: - using Base::ProviderSegmentBase; - - ProviderSegment(const ProviderSegment& other) = default; - ProviderSegment(ProviderSegment&& other) = default; - ProviderSegment& operator=(const ProviderSegment& other) = default; - ProviderSegment& operator=(ProviderSegment&& other) = default; - - /** - * @brief Convert the content of this segmnet into a commit - * @return The resulting commit - */ - Commit toCommit() const; + using base::ProviderSegmentBase<Entity, ProviderSegment>::ProviderSegmentBase; }; diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp index b61a3ba13..60f134edc 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp @@ -279,7 +279,7 @@ namespace armarx::armem::server result.memory = toIce<data::MemoryPtr>(merged_result); // also move results of ltm to wm - //this->commit(ltm_converted.toCommit()); + //this->commit(toCommit(ltm_converted)); // mark removed entries of wm in viewer // TODO -- GitLab