diff --git a/source/RobotAPI/libraries/armem/client/Writer.cpp b/source/RobotAPI/libraries/armem/client/Writer.cpp index 9b841c6d12f5caa2349f5a7bac763ac2315ecc80..2021f3a189367dc9134d60ce1dd597cb8513dfaf 100644 --- a/source/RobotAPI/libraries/armem/client/Writer.cpp +++ b/source/RobotAPI/libraries/armem/client/Writer.cpp @@ -48,7 +48,7 @@ namespace armarx::armem::client data::Commit commitIce; toIce(commitIce, commit); - data::CommitResult resultIce = this->commit(commitIce); + data::CommitResult resultIce = this->_commit(commitIce); armem::CommitResult result; fromIce(resultIce, result); @@ -58,15 +58,57 @@ namespace armarx::armem::client data::CommitResult Writer::commit(const data::Commit& _commit) + { + data::Commit commit = _commit; + return this->_commit(commit); + } + + + EntityUpdateResult Writer::commit(const EntityUpdate& update) + { + armem::Commit commit; + commit.updates.push_back(update); + + armem::CommitResult result = this->commit(commit); + ARMARX_CHECK_EQUAL(result.results.size(), 1); + return result.results.at(0); + } + + EntityUpdateResult Writer::commit( + const MemoryID& entityID, + const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData, + Time timeCreated) + { + EntityUpdate update; + update.entityID = entityID; + update.instancesData = instancesData; + update.timeCreated = timeCreated; + return commit(update); + } + + void + Writer::setWritingMemory(server::WritingMemoryInterfacePrx memory) + { + this->memory = memory; + } + + data::CommitResult Writer::_commit(data::Commit& commit) { ARMARX_CHECK_NOT_NULL(memory); - data::Commit commit = _commit; + /* + * This function sets the `timeSent` of each `EntityUpdate` before + * sending the data. To allow that, `commit` needs to bo non-const. + * Otherwise, the function would need to make a copy of `commit`, + * which is not necessary in all cases; e.g. when called by + * `commit(Const Commit&)`, which converts the commit to ice types + * anyway. + */ - Time timeSent = armem::Time::now(); + const Time timeSent = armem::Time::now(); for (data::EntityUpdate& update : commit.updates) { - update.timeCreatedMicroSeconds = timeSent.toMicroSeconds(); + update.timeSentMicroSeconds = timeSent.toMicroSeconds(); } data::CommitResult result; @@ -100,35 +142,6 @@ namespace armarx::armem::client return result; } - - - EntityUpdateResult Writer::commit(const EntityUpdate& update) - { - armem::Commit commit; - commit.updates.push_back(update); - - armem::CommitResult result = this->commit(commit); - ARMARX_CHECK_EQUAL(result.results.size(), 1); - return result.results.at(0); - } - - EntityUpdateResult Writer::commit( - const MemoryID& entityID, - const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData, - Time timeCreated) - { - EntityUpdate update; - update.entityID = entityID; - update.instancesData = instancesData; - update.timeCreated = timeCreated; - return commit(update); - } - - void - Writer::setWritingMemory(server::WritingMemoryInterfacePrx memory) - { - this->memory = memory; - } } diff --git a/source/RobotAPI/libraries/armem/client/Writer.h b/source/RobotAPI/libraries/armem/client/Writer.h index 9c6e8851e4fe3792ad728e90eaa9319a88568e0c..dd953fa368d9a46363677d3bc39bc71f8da2a9ce 100644 --- a/source/RobotAPI/libraries/armem/client/Writer.h +++ b/source/RobotAPI/libraries/armem/client/Writer.h @@ -50,6 +50,10 @@ namespace armarx::armem::client const std::vector<aron::datanavigator::DictNavigatorPtr>& instancesData, Time timeCreated); + // with bare-ice types + data::CommitResult commit(const data::Commit& commit); + + void setWritingMemory(server::WritingMemoryInterfacePrx memory); operator bool() const @@ -59,7 +63,9 @@ namespace armarx::armem::client private: - data::CommitResult commit(const data::Commit& commit); + /// Sets `timeSent` on all entity updates and performs the commit, + data::CommitResult _commit(data::Commit& commit); + public: