diff --git a/source/RobotAPI/interface/CMakeLists.txt b/source/RobotAPI/interface/CMakeLists.txt index 7ee210481fec8c2714f3cdb29f0eb3c02f46dd7a..547fb0833f1e0475b48a60e8be33979a9dfd09ee 100644 --- a/source/RobotAPI/interface/CMakeLists.txt +++ b/source/RobotAPI/interface/CMakeLists.txt @@ -104,6 +104,7 @@ set(SLICE_FILES armem.ice + armem/io.ice armem/commit.ice armem/memory.ice armem/query.ice @@ -112,6 +113,7 @@ set(SLICE_FILES armem/client/MemoryListenerInterface.ice armem/server.ice + armem/server/LongTermMemoryInterface.ice armem/server/MemoryInterface.ice armem/server/MemoryPredictorInterface.ice armem/server/ReadingMemoryInterface.ice diff --git a/source/RobotAPI/interface/armem/io.ice b/source/RobotAPI/interface/armem/io.ice new file mode 100644 index 0000000000000000000000000000000000000000..51c5f42b2eda1d5bb9f8f83e0171c95b506bf35e --- /dev/null +++ b/source/RobotAPI/interface/armem/io.ice @@ -0,0 +1,50 @@ +#pragma once + +#include <ArmarXCore/interface/core/PackagePath.ice> + +module armarx +{ + module armem + { + module data + { + struct LoadInput + { + armarx::data::PackagePath path; + }; + + struct LoadResult + { + bool success = false; + long timeStartedMicroSeconds; + long timeFinishedMicroSeconds; + + long numLoadedCoreSegments; + long numLoadedProviderSegments; + long numLoadedEntities; + long numLoadedEntitySnapshots; + + string errorMessage; + }; + + struct StoreInput + { + armarx::data::PackagePath path; + }; + + struct StoreResult + { + bool success = false; + long timeStartedMicroSeconds; + long timeFinishedMicroSeconds; + + long numStoredCoreSegments; + long numStoredLoadedProviderSegments; + long numStoredLoadedEntities; + long numStoredLoadedEntitySnapshots; + + string errorMessage; + }; + }; + }; +}; diff --git a/source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice b/source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice new file mode 100644 index 0000000000000000000000000000000000000000..ba64d626c1c156c3820a508625d1c3a3b36ec847 --- /dev/null +++ b/source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice @@ -0,0 +1,19 @@ +#pragma once + +#include <RobotAPI/interface/armem/io.ice> + + +module armarx +{ + module armem + { + module server + { + interface LongTermMemoryInterface + { + data::LoadResult load(data::LoadInput input); + data::StoreResult store(data::StoreInput input); + }; + }; + }; +}; diff --git a/source/RobotAPI/interface/armem/server/MemoryInterface.ice b/source/RobotAPI/interface/armem/server/MemoryInterface.ice index 2764998e2bf3d1226d8d34abb76772806b6bfd25..93213eed1d85269c83cfcd2547908e2be61f2d2a 100644 --- a/source/RobotAPI/interface/armem/server/MemoryInterface.ice +++ b/source/RobotAPI/interface/armem/server/MemoryInterface.ice @@ -3,6 +3,7 @@ #include <RobotAPI/interface/armem/server/ReadingMemoryInterface.ice> #include <RobotAPI/interface/armem/server/WritingMemoryInterface.ice> +#include <RobotAPI/interface/armem/server/LongTermMemoryInterface.ice> module armarx { diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp index d7df863de0a34f0a8007c9b69a0e27c6bbc72e87..e1481de91136feddf28cdd464981558bd15afa89 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/Writer.cpp @@ -264,6 +264,7 @@ namespace armarx::aron::cppcodegenerator // ctor c->addCtor(serializer->toCtor(c->getName())); + c->addCtor(serializer->toInnerEnumCtor(c->getName())); // Specific methods CppEnumPtr enumrepresentation = serializer->toInnerEnumDefinition(); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp index 416d8c6135674c8d26bcca570dfa79b15e7c6166..975086d4464b645f57322cbee532fc2bbe68cb5c 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.cpp @@ -30,7 +30,7 @@ namespace armarx::aron::cppcodegenerator::serializer IntEnumClassSerializer::IntEnumClassSerializer(const typenavigator::IntEnumNavigatorPtr& n) : Serializer(n->getEnumName(), simox::meta::get_type_name(typeid(data::AronNDArray)), simox::meta::get_type_name(typeid(type::AronIntEnum))), navigator(n), - enumName(navigator->getEnumName() + "Enum") + enumName("__ImplEnum") { } @@ -48,11 +48,14 @@ namespace armarx::aron::cppcodegenerator::serializer value_to_enum << "{" << std::endl; for (const auto& [key, value] : navigator->getAcceptedValues()) { - enum_to_name << "\t\t{" << key << ", \"" << key << "\"}," << std::endl; - name_to_enum << "\t\t{\"" << key << "\", " << key << "}," << std::endl; + std::string enumKeyWithNamespace = enumName + "::" + key; + fields.push_back(std::make_shared<CppField>("const static " + enumName, key + " = " + enumKeyWithNamespace)); - enum_to_value << "\t\t{" << key << ", " << value << "}," << std::endl; - value_to_enum << "\t\t{" << value << ", " << key << "}," << std::endl; + enum_to_name << "\t\t{" << enumKeyWithNamespace << ", \"" << key << "\"}," << std::endl; + name_to_enum << "\t\t{\"" << key << "\", " << enumKeyWithNamespace << "}," << std::endl; + + enum_to_value << "\t\t{" << enumKeyWithNamespace << ", " << value << "}," << std::endl; + value_to_enum << "\t\t{" << value << ", " << enumKeyWithNamespace << "}," << std::endl; } enum_to_name << "\t}"; @@ -133,6 +136,14 @@ namespace armarx::aron::cppcodegenerator::serializer return b; } + CppCtorPtr IntEnumClassSerializer::toInnerEnumCtor(const std::string& name) const + { + CppCtorPtr c = std::make_shared<CppCtor>(name + "(const " + enumName + " e)"); + std::vector<std::pair<std::string, std::string>> initList = {{"value", "e"}}; + c->addInitListEntries(initList); + return c; + } + CppEnumPtr IntEnumClassSerializer::toInnerEnumDefinition() const { CppEnumPtr e = std::make_shared<CppEnum>(enumName, "The internal enum definition of the enum of this autogenerated class."); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h index ba64400afa789a83882fb4942e7ba8b3d9fbd2ee..a199fe4fefb4339986cc4847f12d14a1a6408b5a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/serializer/toplevel/IntEnumClass.h @@ -61,6 +61,7 @@ namespace armarx::aron::cppcodegenerator::serializer virtual CppBlockPtr getReadBlock(const std::string&) const override; virtual CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const override; + CppCtorPtr toInnerEnumCtor(const std::string&) const; CppEnumPtr toInnerEnumDefinition() const; CppMethodPtr toIntMethod() const; CppMethodPtr toEnumAssignmentMethod() const;