From 4096f771df2248cd4d96a31010b4855912e0506e Mon Sep 17 00:00:00 2001 From: "fabian.peller-konrad@kit.edu" <fabian.peller-konrad@kit.edu> Date: Thu, 18 Mar 2021 10:24:10 +0100 Subject: [PATCH] Aron now generates an EnumClass --- source/RobotAPI/interface/CMakeLists.txt | 2 + source/RobotAPI/interface/armem/io.ice | 50 +++++++++++++++++++ .../armem/server/LongTermMemoryInterface.ice | 19 +++++++ .../armem/server/MemoryInterface.ice | 1 + .../codegenerator/codeWriter/cpp/Writer.cpp | 1 + .../cpp/serializer/toplevel/IntEnumClass.cpp | 21 ++++++-- .../cpp/serializer/toplevel/IntEnumClass.h | 1 + 7 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 source/RobotAPI/interface/armem/io.ice create mode 100644 source/RobotAPI/interface/armem/server/LongTermMemoryInterface.ice diff --git a/source/RobotAPI/interface/CMakeLists.txt b/source/RobotAPI/interface/CMakeLists.txt index 7ee210481..547fb0833 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 000000000..51c5f42b2 --- /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 000000000..ba64d626c --- /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 2764998e2..93213eed1 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 d7df863de..e1481de91 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 416d8c613..975086d44 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 ba64400af..a199fe4fe 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; -- GitLab