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