From e869278a650f06076f73f5210123067b3c7b9d91 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Tue, 26 Oct 2021 16:32:33 +0200 Subject: [PATCH] Add static AronClass::FromAron(data) --- .../codegenerator/codewriter/CodeWriter.h | 1 + .../codegenerator/codewriter/cpp/Writer.cpp | 20 ++++++++++++++++++- .../codegenerator/codewriter/cpp/Writer.h | 2 ++ .../codewriter/cpp/generator/Generator.cpp | 13 ++++++++++++ .../codewriter/cpp/generator/Generator.h | 1 + .../core/codegenerator/helper/ReaderInfo.h | 8 ++++++++ 6 files changed, 44 insertions(+), 1 deletion(-) diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h index 006713e3d..0bbf6ca52 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/CodeWriter.h @@ -71,6 +71,7 @@ namespace armarx::aron::codegenerator std::string producerName; std::vector<codegenerator::WriterInfo> dataWriters; std::vector<codegenerator::ReaderInfo> dataReaders; + std::vector<codegenerator::StaticReaderInfo> staticDataReaders; std::vector<codegenerator::WriterInfo> initialTypeWriters; std::vector<std::string> additionalIncludes; }; 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 751ee665e..452424150 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp @@ -78,7 +78,16 @@ namespace armarx::aron::codegenerator::cpp void Writer::addSpecificReaderMethods() { - // The toAron Serializer is visible by default + // The static FromAron Deserializer + { + codegenerator::StaticReaderInfo fromAron; + fromAron.methodName = "FromAron"; + fromAron.argumentType = "armarx::aron::data::DictPtr"; + fromAron.returnType = OWN_TYPE_NAME; + staticDataReaders.push_back(fromAron); + } + + // The fromAron Deserializer is visible by default { codegenerator::ReaderInfo fromAron; fromAron.methodName = "fromAron"; @@ -151,6 +160,13 @@ namespace armarx::aron::codegenerator::cpp c->addMethod(convert); } + // Add methods to set the member variables + for (const codegenerator::StaticReaderInfo& info : staticDataReaders) + { + CppMethodPtr convert = generator.toSpecializedStaticDataReaderMethod(info); + c->addMethod(convert); + } + // Add methods to set the member variables for (const codegenerator::ReaderInfo& info : dataReaders) { @@ -257,6 +273,8 @@ namespace armarx::aron::codegenerator::cpp c->addInclude("<map>"); c->addInclude("<RobotAPI/interface/aron.h>"); + c->addPublicField(std::string("using ") + OWN_TYPE_NAME + " = " + cppTypename + ";"); + // ctor c->addCtor(gen.toCtor(c->getName())); diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h index 7c4d3eb5d..2e6cc994c 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.h @@ -63,5 +63,7 @@ namespace armarx::aron::codegenerator::cpp void setupMemberFields(CppClassPtr&, const std::map<std::string, std::string>& doc_members, const generator::IntEnumClass&) const; private: + static const constexpr char* OWN_TYPE_NAME = "This"; + }; } diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp index 89801e0fc..911555fea 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.cpp @@ -227,9 +227,22 @@ namespace armarx::aron::codegenerator::cpp return m; } + CppMethodPtr Generator::toSpecializedStaticDataReaderMethod(const StaticReaderInfo& info) const { std::stringstream doc; + doc << "@brief " << info.methodName << "() - This method sets the struct members to new values given in a reader implementation. \n"; + doc << "@return - nothing"; + + CppMethodPtr m = CppMethodPtr(new CppMethod("static " + info.returnType + " " + info.methodName + "(const " + info.argumentType + "& input)", doc.str())); + m->addLine("This t;"); + m->addLine("t.fromAron(input);"); + m->addLine("return t;"); + return m; + } + CppMethodPtr Generator::toSpecializedTypeWriterMethod(const WriterInfo& info) const + { + std::stringstream doc; doc << "@brief " << info.methodName << "() - This method returns a new type from the member data types using a writer implementation. \n"; doc << "@return - the result of the writer implementation"; diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h index dddc73d51..3978677fd 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/generator/Generator.h @@ -111,6 +111,7 @@ namespace armarx::aron::codegenerator::cpp CppMethodPtr toSpecializedDataWriterMethod(const WriterInfo& info) const; CppMethodPtr toSpecializedDataReaderMethod(const ReaderInfo& info) const; + CppMethodPtr toSpecializedStaticDataReaderMethod(const StaticReaderInfo& info) const; CppMethodPtr toSpecializedTypeWriterMethod(const WriterInfo& info) const; // virtual override definitions diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h b/source/RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h index 71cbc0ff0..a025da99a 100644 --- a/source/RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h +++ b/source/RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h @@ -37,4 +37,12 @@ namespace armarx::aron::codegenerator std::string include; std::string enforceConversion = ""; }; + + + struct StaticReaderInfo + { + std::string methodName; + std::string argumentType; + std::string returnType; + }; } -- GitLab