From aea2802ec2c3eca7bd573398f12be896ed4845f8 Mon Sep 17 00:00:00 2001
From: Fabian Peller-Konrad <fabian.peller-konrad@kit.edu>
Date: Thu, 21 Dec 2023 10:39:51 +0100
Subject: [PATCH] change codegeneration for matrix default type for gcc13

---
 .../cpp/generator/ndarray/Matrix.cpp          | 31 ++++++++++++++++---
 .../codewriter/cpp/generator/ndarray/Matrix.h |  1 +
 2 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
index 6ace1783e..0cacba084 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
@@ -69,15 +69,11 @@ namespace armarx::aron::codegenerator::cpp::generator
     std::pair<std::vector<std::pair<std::string, std::string>>, bool>
     Matrix::getCtorInitializers(const std::string& name) const
     {
-        if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT)
-        {
-            return {{}, false};
-        }
         if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY)
         {
             return {{{name, getInstantiatedCppTypename() + "::Identity()"}}, true};
         }
-        if (type.getDefaultValue() == aron::type::matrix::default_value::ZEROS)
+        if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS)
         {
             return {{{name, getInstantiatedCppTypename() + "::Zero()"}}, true};
         }
@@ -93,6 +89,31 @@ namespace armarx::aron::codegenerator::cpp::generator
         }
     }
 
+    CppBlockPtr
+    Matrix::getResetHardBlock(const std::string& cppAccessor) const
+    {
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
+
+        if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY)
+        {
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Identity();");
+        }
+        if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS)
+        {
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Zero();");
+        }
+        if (type.getDefaultValue() == aron::type::matrix::default_value::ONES)
+        {
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::One();");
+        }
+        else
+        {
+            // try to parse num. We ensure from typereader that defaultValue is valid number
+            block_if_data->addLine(cppAccessor + " = " + "::One() * " + type.getDefaultValue() + ";");
+        }
+        return resolveMaybeResetHardBlock(block_if_data, cppAccessor);
+    }
+
     CppBlockPtr
     Matrix::getResetSoftBlock(const std::string& cppAccessor) const
     {
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
index 452ac7b53..69790642a 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
@@ -42,6 +42,7 @@ namespace armarx::aron::codegenerator::cpp::generator
         std::vector<std::string> getRequiredIncludes() 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;
         CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor,
                                       const std::string& cppAccessor,
-- 
GitLab