From 2f5f50805c2b641a027fc3b00efc84423b52020b Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Mon, 8 Feb 2021 09:25:47 +0100 Subject: [PATCH] Refactor and fix MaxHistorySize, add to CoreSegment --- .../RobotAPI/libraries/armem/CMakeLists.txt | 3 ++ .../libraries/armem/core/CoreSegment.cpp | 11 +++++++ .../libraries/armem/core/CoreSegment.h | 13 +++++++- source/RobotAPI/libraries/armem/core/Entity.h | 2 -- .../libraries/armem/core/ProviderSegment.cpp | 2 +- .../libraries/armem/core/ProviderSegment.h | 14 ++++----- .../armem/core/detail/MaxHistorySize.cpp | 19 ++++++++++++ .../armem/core/detail/MaxHistorySize.h | 31 +++++++++++++++++++ 8 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp create mode 100644 source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 644c655fa..5e85729b1 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -28,7 +28,9 @@ set(LIB_FILES core/ice_conversions.cpp core/Memory.cpp core/ProviderSegment.cpp + core/detail/MemoryItem.cpp + core/detail/MaxHistorySize.cpp core/error/ArMemError.cpp @@ -88,6 +90,7 @@ set(LIB_HEADERS core/ProviderSegment.h core/detail/EntityContainer.h + core/detail/MaxHistorySize.h core/detail/MemoryContainer.h core/detail/MemoryItem.h core/detail/TypedEntityContainer.h diff --git a/source/RobotAPI/libraries/armem/core/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/CoreSegment.cpp index 16e3b4291..34f73cbdf 100644 --- a/source/RobotAPI/libraries/armem/core/CoreSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/CoreSegment.cpp @@ -126,11 +126,22 @@ namespace armarx::armem throw armem::error::ContainerEntryAlreadyExists( providerSegment.getLevelName(), providerSegment.name(), getLevelName(), this->name()); } + auto it = providerSegments.emplace(providerSegment.name(), std::move(providerSegment)).first; it->second.id().setCoreSegmentID(id()); + it->second.setMaxHistorySize(maxHistorySize); return it->second; } + void CoreSegment::setMaxHistorySize(long maxSize) + { + MaxHistorySize::setMaxHistorySize(maxSize); + for (auto& [name, seg] : providerSegments) + { + seg.setMaxHistorySize(maxSize); + } + } + std::string CoreSegment::getLevelName() const { return "core segment"; diff --git a/source/RobotAPI/libraries/armem/core/CoreSegment.h b/source/RobotAPI/libraries/armem/core/CoreSegment.h index 68bf7dc4e..aed697fb0 100644 --- a/source/RobotAPI/libraries/armem/core/CoreSegment.h +++ b/source/RobotAPI/libraries/armem/core/CoreSegment.h @@ -5,6 +5,7 @@ #include "ProviderSegment.h" #include "detail/TypedEntityContainer.h" +#include "detail/MaxHistorySize.h" namespace armarx::armem @@ -13,7 +14,9 @@ namespace armarx::armem /** * @brief Data of a core segment containing multiple provider segments. */ - class CoreSegment : public detail::TypedEntityContainer<ProviderSegment, CoreSegment> + class CoreSegment : + public detail::TypedEntityContainer<ProviderSegment, CoreSegment> + , public detail::MaxHistorySize { using Base = detail::TypedEntityContainer<ProviderSegment, CoreSegment>; @@ -59,6 +62,14 @@ namespace armarx::armem ProviderSegment& addProviderSegment(ProviderSegment&& providerSegment); + /** + * @brief Sets the maximum history size of entities in this segment. + * This affects all current entities as well as new ones. + * @see Entity::setMaxHistorySize() + */ + void setMaxHistorySize(long maxSize) override; + + bool equalsDeep(const CoreSegment& other) const; diff --git a/source/RobotAPI/libraries/armem/core/Entity.h b/source/RobotAPI/libraries/armem/core/Entity.h index 51d55aa49..b81ffe761 100644 --- a/source/RobotAPI/libraries/armem/core/Entity.h +++ b/source/RobotAPI/libraries/armem/core/Entity.h @@ -169,8 +169,6 @@ namespace armarx::armem // ToDo: Add max age; // ToDo in future: keep/remove predicate - - // MemoryItem interface public: std::string getKeyString() const override diff --git a/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp b/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp index 28010d765..fb0ca8cc8 100644 --- a/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp +++ b/source/RobotAPI/libraries/armem/core/ProviderSegment.cpp @@ -154,7 +154,7 @@ namespace armarx::armem void ProviderSegment::setMaxHistorySize(long maxSize) { - this->maxHistorySize = maxSize; + MaxHistorySize::setMaxHistorySize(maxSize); for (auto& [name, entity] : entities) { entity.setMaxHistorySize(maxSize); diff --git a/source/RobotAPI/libraries/armem/core/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/ProviderSegment.h index ecfa53be2..384ee1b41 100644 --- a/source/RobotAPI/libraries/armem/core/ProviderSegment.h +++ b/source/RobotAPI/libraries/armem/core/ProviderSegment.h @@ -5,6 +5,7 @@ #include "Entity.h" #include "detail/TypedEntityContainer.h" +#include "detail/MaxHistorySize.h" namespace armarx::armem @@ -13,7 +14,10 @@ namespace armarx::armem /** * @brief Data of a provider segment containing multiple entities. */ - class ProviderSegment : public detail::TypedEntityContainer<Entity, ProviderSegment> + class ProviderSegment : + public detail::TypedEntityContainer<Entity, ProviderSegment> + , public detail::MaxHistorySize + { using Base = detail::TypedEntityContainer<Entity, ProviderSegment>; @@ -66,7 +70,7 @@ namespace armarx::armem * This affects all current entities as well as new ones. * @see Entity::setMaxHistorySize() */ - void setMaxHistorySize(long maxSize); + void setMaxHistorySize(long maxSize) override; bool equalsDeep(const ProviderSegment& other) const; @@ -88,12 +92,6 @@ namespace armarx::armem /// The entities. std::map<std::string, Entity> entities; - /** - * @brief Maximum size of entity histories. - * @see Entity::maxHstorySize - */ - long maxHistorySize = -1; - }; } diff --git a/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp new file mode 100644 index 000000000..cdd34e3be --- /dev/null +++ b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.cpp @@ -0,0 +1,19 @@ +#include "MaxHistorySize.h" + + +namespace armarx::armem::detail +{ + MaxHistorySize::~MaxHistorySize() + { + } + + void MaxHistorySize::setMaxHistorySize(long maxSize) + { + this->maxHistorySize = maxSize; + } + + long MaxHistorySize::getMaxHistorySize() const + { + return maxHistorySize; + } +} diff --git a/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h new file mode 100644 index 000000000..d96e73296 --- /dev/null +++ b/source/RobotAPI/libraries/armem/core/detail/MaxHistorySize.h @@ -0,0 +1,31 @@ +#pragma once + + + +namespace armarx::armem::detail +{ + class MaxHistorySize + { + public: + + virtual ~MaxHistorySize(); + + /** + * @brief Sets the maximum history size of entities in this segment. + * This affects all current entities as well as new ones. + * @see Entity::setMaxHistorySize() + */ + virtual void setMaxHistorySize(long maxSize); + virtual long getMaxHistorySize() const; + + + protected: + + /** + * @brief Maximum size of entity histories. + * @see Entity::maxHstorySize + */ + long maxHistorySize = -1; + + }; +} -- GitLab