From e4253c36afef2c77ec4268180b07e2f977080466 Mon Sep 17 00:00:00 2001
From: Fabian Peller <fabian.peller-konrad@kit.edu>
Date: Wed, 22 Mar 2023 11:25:11 +0000
Subject: [PATCH] generate default construction of enums

---
 .../codegeneration/codegenerator/codewriter/cpp/Writer.cpp  | 2 ++
 .../codegenerator/codewriter/cpp/generator/Generator.cpp    | 6 +++---
 .../codewriter/cpp/generator/toplevel/IntEnumClass.cpp      | 5 +++--
 .../codewriter/cpp/generator/toplevel/IntEnumClass.h        | 2 +-
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp
index 8478c7119..e6e6c075a 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp
@@ -492,6 +492,8 @@ namespace armarx::aron::codegenerator::cpp
         CppEnumPtr e = std::make_shared<CppEnum>(namespaces, "Enum");
         auto enumFields = gen.toEnumFields();
 
+        ARMARX_CHECK(enumFields.size() > 0);
+
         for (const auto& field : enumFields)
         {
             e->addField(field);
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp
index be87200f5..18dd38f6e 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/Generator.cpp
@@ -395,9 +395,9 @@ namespace armarx::aron::codegenerator::cpp
         return {field};
     }
 
-    std::pair<std::vector<std::pair<std::string, std::string>>, bool> Generator::getCtorInitializers(const std::string&) const
+    std::pair<std::vector<std::pair<std::string, std::string>>, bool> Generator::getCtorInitializers(const std::string& name) const
     {
-        return {{}, false};
+        return {{{name, "{}"}}, false};
     }
 
     CppBlockPtr Generator::getCtorBlock(const std::string&) const
@@ -408,7 +408,7 @@ namespace armarx::aron::codegenerator::cpp
     std::pair<std::vector<std::pair<std::string, std::string>>, bool> Generator::getCopyCtorInitializers(const std::string& name) const
     {
         const auto& t = getType();
-        if (t.getMaybe() == type::Maybe::UNIQUE_PTR || t.getMaybe() == type::Maybe::RAW_PTR)
+        if (t.getMaybe() == type::Maybe::UNIQUE_PTR) // unique ptrs cant be copied
         {
             return {{{name, ARON_OTHER_ACCESSOR + "." + name + " ? " + resolveMaybeGenerator("*" + ARON_OTHER_ACCESSOR + "." + name) + " : nullptr"}}, true};
         }
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp
index ce2bbb8dd..6c1f742f5 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.cpp
@@ -162,9 +162,10 @@ namespace armarx::aron::codegenerator::cpp::generator
         return c;
     }*/
 
-    std::pair<std::vector<std::pair<std::string, std::string>>, bool> IntEnumClass::getCopyCtorInitializers(const std::string&) const
+    std::pair<std::vector<std::pair<std::string, std::string>>, bool> IntEnumClass::getCtorInitializers(const std::string&) const
     {
-        return {{{"value", ARON_OTHER_ACCESSOR + ".value"}}, false};
+        ARMARX_CHECK(type.getAcceptedValueNames().size() > 0);
+        return {{{"value", type.getAcceptedValueNames()[0]}}, true};
     }
 
     CppCtorPtr IntEnumClass::toEnumCtor(const std::string& name) const
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h
index 53e9dd4a3..cbd21cb26 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/toplevel/IntEnumClass.h
@@ -43,7 +43,7 @@ namespace armarx::aron::codegenerator::cpp::generator
         // virtual implementations
         std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const final;
 
-        std::pair<std::vector<std::pair<std::string, std::string>>, bool> getCopyCtorInitializers(const std::string&) const final;
+        std::pair<std::vector<std::pair<std::string, std::string>>, bool> getCtorInitializers(const std::string&) const final;
 
         CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final;
         CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final;
-- 
GitLab