From 478c9d26393b0a29f11c3809f25b9e9b6f547441 Mon Sep 17 00:00:00 2001
From: Fabian Peller-Konrad <fabian.peller-konrad@kit.edu>
Date: Thu, 21 Dec 2023 10:50:19 +0100
Subject: [PATCH] remove useless .empty check. Fix codegeneration for
 quaternioins for gcc13

---
 .../cpp/generator/ndarray/Matrix.cpp          |  2 +-
 .../cpp/generator/ndarray/Quaternion.cpp      | 31 +++++++++++++++++--
 .../cpp/generator/ndarray/Quaternion.h        |  1 +
 3 files changed, 30 insertions(+), 4 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 d8f53d388..0fe08b1dc 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
@@ -98,7 +98,7 @@ namespace armarx::aron::codegenerator::cpp::generator
         {
             block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Identity();");
         }
-        else if (type.getDefaultValue().empty() || type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS)
+        else if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS)
         {
             block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Zero();");
         }
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp
index 365b3c882..150c0be30 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp
@@ -62,13 +62,13 @@ namespace armarx::aron::codegenerator::cpp::generator
     {
         if (type.getDefaultValue() == aron::type::quaternion::default_value::DEFAULT)
         {
-            return {{}, false};
+            return {{{name, getInstantiatedCppTypename() + "::Identity())"}}, true};
         }
-        if (type.getDefaultValue() == aron::type::quaternion::default_value::ZEROS)
+        else if (type.getDefaultValue() == aron::type::quaternion::default_value::ZEROS)
         {
             return {{{name, getInstantiatedCppTypename() + "(0, 0, 0, 0)"}}, true};
         }
-        if (type.getDefaultValue() == aron::type::quaternion::default_value::ONES)
+        else if (type.getDefaultValue() == aron::type::quaternion::default_value::ONES)
         {
             return {{{name, getInstantiatedCppTypename() + "(1, 1, 1, 1)"}}, true};
         }
@@ -80,6 +80,31 @@ namespace armarx::aron::codegenerator::cpp::generator
         }
     }
 
+    CppBlockPtr
+    Quaternion::getResetHardBlock(const std::string& cppAccessor) const
+    {
+        CppBlockPtr block_if_data = std::make_shared<CppBlock>();
+
+        if (type.getDefaultValue() == aron::type::quaternion::default_value::DEFAULT)
+        {
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Identity();");
+        }
+        else if (type.getDefaultValue() == aron::type::quaternion::default_value::ZEROS)
+        {
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "(0, 0, 0, 0);");
+        }
+        else if (type.getDefaultValue() == aron::type::quaternion::default_value::ONES)
+        {
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "(1, 1, 1, 1);");
+        }
+        else if (not type.getDefaultValue().empty())
+        {
+            // try to parse num. We ensure from typereader that defaultValue is valid number
+            block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "(" + type.getDefaultValue() + ");");
+        }
+        return resolveMaybeResetHardBlock(block_if_data, cppAccessor);
+    }
+
     CppBlockPtr
     Quaternion::getResetSoftBlock(const std::string& cppAccessor) const
     {
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h
index 4fd41b7db..70f8e890e 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.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