From 97875eb62d2d1e05f836f0dcb7661698e0c49d84 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Tue, 26 Oct 2021 16:32:17 +0200
Subject: [PATCH] Pass info objects instead of single arguments

---
 .../codegenerator/codewriter/cpp/Writer.cpp   |  6 ++--
 .../codewriter/cpp/generator/Generator.cpp    | 30 +++++++++----------
 .../codewriter/cpp/generator/Generator.h      |  8 +++--
 3 files changed, 23 insertions(+), 21 deletions(-)

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 25d16c3b6..751ee665e 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/codewriter/cpp/Writer.cpp
@@ -147,7 +147,7 @@ namespace armarx::aron::codegenerator::cpp
                 {
                     c->addInclude(info.include);
                 }
-                CppMethodPtr convert = generator.toSpecializedDataWriterMethod(info.returnType, info.methodName, info.writerClassType, info.enforceConversion);
+                CppMethodPtr convert = generator.toSpecializedDataWriterMethod(info);
                 c->addMethod(convert);
             }
 
@@ -158,7 +158,7 @@ namespace armarx::aron::codegenerator::cpp
                 {
                     c->addInclude(info.include);
                 }
-                CppMethodPtr convert = generator.toSpecializedDataReaderMethod(info.argumentType, info.methodName, info.readerClassType, info.enforceConversion);
+                CppMethodPtr convert = generator.toSpecializedDataReaderMethod(info);
                 c->addMethod(convert);
             }
 
@@ -169,7 +169,7 @@ namespace armarx::aron::codegenerator::cpp
                 {
                     c->addInclude(info.include);
                 }
-                CppMethodPtr convert = generator.toSpecializedTypeWriterMethod(info.returnType, info.methodName, info.writerClassType, info.enforceConversion);
+                CppMethodPtr convert = generator.toSpecializedTypeWriterMethod(info);
                 c->addMethod(convert);
             }
 
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 f858cb12d..89801e0fc 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
@@ -203,39 +203,39 @@ namespace armarx::aron::codegenerator::cpp
         return m;
     }
 
-    CppMethodPtr Generator::toSpecializedDataWriterMethod(const std::string& returnname, const std::string& methodname, const std::string& writerName, const std::string& enforceConversion) const
+    CppMethodPtr Generator::toSpecializedDataWriterMethod(const WriterInfo& info) const
     {
         std::stringstream doc;
-        doc << "@brief specializedDataWrite() - This method returns a new data from the member data types using a writer implementation. \n";
+        doc << "@brief " << info.methodName << "() - This method returns a new data from the member data types using a writer implementation. \n";
         doc << "@return - the result of the writer implementation";
 
-        CppMethodPtr m = CppMethodPtr(new CppMethod(returnname + " " + methodname + "() const", doc.str()));
-        m->addLine(writerName + " writer;");
-        m->addLine("return " + enforceConversion + "(this->write(writer));");
+        CppMethodPtr m = CppMethodPtr(new CppMethod(info.returnType + " " + info.methodName + "() const", doc.str()));
+        m->addLine(info.writerClassType + " writer;");
+        m->addLine("return " + info.enforceConversion + "(this->write(writer));");
         return m;
     }
 
-    CppMethodPtr Generator::toSpecializedDataReaderMethod(const std::string& argumentname, const std::string& methodname, const std::string& readerName, const std::string& enforceConversion) const
+    CppMethodPtr Generator::toSpecializedDataReaderMethod(const ReaderInfo& info) const
     {
         std::stringstream doc;
-        doc << "@brief specializedDataRead() - This method sets the struct members to new values given in a reader implementation. \n";
+        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("void " + methodname + "(const " + argumentname + "& input)", doc.str()));
-        m->addLine(readerName + " reader;");
-        m->addLine("this->read<"+readerName+"::InputType>(reader, "+enforceConversion+"(input));");
+        CppMethodPtr m = CppMethodPtr(new CppMethod("void " + info.methodName + "(const " + info.argumentType + "& input)", doc.str()));
+        m->addLine(info.readerClassType + " reader;");
+        m->addLine("this->read<" + info.readerClassType + "::InputType>(reader, " + info.enforceConversion + "(input));");
         return m;
     }
 
-    CppMethodPtr Generator::toSpecializedTypeWriterMethod(const std::string& returnname, const std::string& methodname, const std::string& writerName, const std::string& enforceConversion) const
     {
         std::stringstream doc;
-        doc << "@brief specializedTypeWrite() - This method returns a new type from the member data types using a writer implementation. \n";
+    CppMethodPtr Generator::toSpecializedTypeWriterMethod(const WriterInfo& info) const
+        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";
 
-        CppMethodPtr m = CppMethodPtr(new CppMethod("static " + returnname + " " + methodname + "()", doc.str()));
-        m->addLine(writerName + " writer;");
-        m->addLine("return " + enforceConversion + "(writeType(writer));");
+        CppMethodPtr m = CppMethodPtr(new CppMethod("static " + info.returnType + " " + info.methodName + "()", doc.str()));
+        m->addLine(info.writerClassType + " writer;");
+        m->addLine("return " + info.enforceConversion + "(writeType(writer));");
         return m;
     }
 
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 906df641b..dddc73d51 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
@@ -26,6 +26,8 @@
 #include <RobotAPI/interface/aron.h>
 #include <RobotAPI/libraries/aron/core/Exception.h>
 #include <RobotAPI/libraries/aron/core/type/variant/Variant.h>
+#include <RobotAPI/libraries/aron/core/codegenerator/helper/ReaderInfo.h>
+#include <RobotAPI/libraries/aron/core/codegenerator/helper/WriterInfo.h>
 
 #include <ArmarXCore/libraries/cppgen/CppBlock.h>
 #include <ArmarXCore/libraries/cppgen/CppField.h>
@@ -107,9 +109,9 @@ namespace armarx::aron::codegenerator::cpp
         std::string getCoreCppTypename() const;
         std::string getFullCppTypename() const;
 
-        CppMethodPtr toSpecializedDataWriterMethod(const std::string&, const std::string&, const std::string&, const std::string& enforceType = "") const;
-        CppMethodPtr toSpecializedDataReaderMethod(const std::string&, const std::string&, const std::string&, const std::string& enforceType = "") const;
-        CppMethodPtr toSpecializedTypeWriterMethod(const std::string&, const std::string&, const std::string&, const std::string& enforceType = "") const;
+        CppMethodPtr toSpecializedDataWriterMethod(const WriterInfo& info) const;
+        CppMethodPtr toSpecializedDataReaderMethod(const ReaderInfo& info) const;
+        CppMethodPtr toSpecializedTypeWriterMethod(const WriterInfo& info) const;
 
         // virtual override definitions
         virtual std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const;
-- 
GitLab