diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 6898b8e364aa449e87fdb7dac83735f933cb1e1d..475bfbcf1a87ba81e569d8aacd388b4ba630108d 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 76bb297e76d268ce8517449686ffae1cdb3ed2cd..cccf81b00ca35a42247bf7370ba46008404608a9 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 35022275570c93378cbe0c767aad1776da594838..09b8ab78ce246c4173593f08edb30e12ce7af168 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 d22310fb2385d223439a4c563e526549c818234a..e3bff18fa2b85f9650f8b35cff823ec9f7eebf88 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 c27f49951e8d672590a961c05c8713290a31db52..c94ee5dcd243dfd23fb49a917a376784f80ff40f 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 be36a8a7756f45617e55a2b56777b8d8abea6f56..5005af5f7e26cd12963529fe2f2cf0e060d92c19 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 7f7872f7a638cc31122f09b00a95755ede4d9606..de2cae3c7381cb05daab3f9cd01a21f1e7df4deb 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 8ad96ea0630af0d5aba8b7270fe229c235c2a010..eb7d300e08143e958ffd17586fa97b6f3eb61b8f 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 adb3257919abbd9743bc06a0a8b3f7ddacb09144..797b9df1ffab72fa45e22d4fd887a3370167967a 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 c564e60b6471b02c32e08ab366a8047e5b6c9d3c..79c783de9d40b7eeda7d1057f5b531adcd8d5013 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 ba72d68bf6e758f4770b5215754a6c73f2fa3e66..6046f6ac50902d6f7f770361915dbd30d5a15ec1 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 b557602473e937ccad8f962308e6bf8634290d0f..b3d6211bd18e882d2a31864995a11208e5f23cfa 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 c18100e96a1d0b471ce03b181ce35b60afb2b63e..ed48ff071b93386306baba134e8b473574dca978 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 0000000000000000000000000000000000000000..e43995730554ea5045bcb5c40a3fa66a9a562a0a --- /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 0000000000000000000000000000000000000000..9fc479dcf5a573eff83124e5f1df35b728b2bd1e --- /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 9e87538e0ed513ccab7feaa34592869b7fc694b1..eb437eb1637da451fd76439fd0a1a70314edaf4c 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 27661a6ce7975ebbd0be0b2745945943d5e22e7a..e212c0d36c502b0dddb5196b62aceeb4249e2a78 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 450a95c819b49726dac2b6e85a5cd7625e854551..34e9b2abd0e21ec92c9581a4777af42fb968a74f 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 18d744c59731331e010d8ebea257e7d51aa5ed0b..158b1c0f88144248e3bfc4b60d43832c8c246e12 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 5d7506a0f84a574367ff9e7bed10161ed776c6f1..b5daa319226c0b16d1d4b3336efaead6e8c9406e 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 90b03d1ae67ae2a0640d8f5381365040e04aeed0..c19a2f83019c3a208c7d7474c42d3b6ae28dda70 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 c69a222b3e0f3e9809744becb80f33a70da78e83..7bff4f19e39dfb0e2bd796be39714af86cd656f1 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 b6595c83d3a7a2129e0f330894cce9d0044e42e0..e3684b3b6c851c756d78528d38e72f1c3f6a3364 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 b67fa10f5ba4afc363ee4b83d523b9476f054553..01aa4e39b9f9b10ad855032b1c95c90c317fb75e 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 e837469d8b44ce76ad624ee6adea93285705c474..75b5d3b3687994b2626d63c7044d37fec4cb7102 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 b61a3ba136e1bc015886983589e6d43d7d9c1665..60f134edc6cdced8e5ea2b08e45c22d9973eee2e 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