diff --git a/source/RobotAPI/libraries/armem/core/base/MemoryBase.h b/source/RobotAPI/libraries/armem/core/base/MemoryBase.h index 69cd01fc128338e3d251a2ca99e54849c962dc9e..5fe6f875a7adb42db1b5d4ff49adb5c842e2fb6d 100644 --- a/source/RobotAPI/libraries/armem/core/base/MemoryBase.h +++ b/source/RobotAPI/libraries/armem/core/base/MemoryBase.h @@ -238,7 +238,7 @@ namespace armarx::armem::base * @param update The update. * @return The resulting entity snapshot's ID. */ - UpdateResult update(const EntityUpdate& update) + virtual UpdateResult update(const EntityUpdate& update) { this->_checkContainerName(update.entityID.memoryName, this->name()); diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp index 3d2efd2249f969308b126608d01533500f3bfa73..623858a440abfae4e3281bad5eba644cafd44678 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.cpp @@ -3,6 +3,28 @@ namespace armarx::armem::wm { + + Memory::Base::UpdateResult Memory::update(const EntityUpdate& update) + { + this->_checkContainerName(update.entityID.memoryName, this->name()); + + auto it = this->_container.find(update.entityID.coreSegmentName); + if (it != this->_container.end()) + { + Base::UpdateResult ret; + { + std::scoped_lock lock(it->second.mutex()); + ret = it->second.update(update); + } + ret.memoryUpdateType = UpdateType::UpdatedExisting; + return ret; + } + else + { + throw armem::error::MissingEntry::create<CoreSegment>(update.entityID.coreSegmentName, *this); + } + } + Commit Memory::toCommit() const { Commit c; diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h index 3c64c0841b46a5c95f7f7365af26a1b20226f4dc..b2db9f7bc61aa18b0169a1e4f622d6dc5251ae33 100644 --- a/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h +++ b/source/RobotAPI/libraries/armem/core/workingmemory/Memory.h @@ -27,6 +27,10 @@ namespace armarx::armem::wm Memory& operator=(const Memory& other) = default; Memory& operator=(Memory&& other) = default; + + virtual Base::UpdateResult update(const EntityUpdate& update) override; + + /** * @brief Convert the content of this memory into a commit * @return The resulting commit