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