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 e6e6c075acaeade78eef6df5c6642894675b0e8e..a597e8ecc65735354fc7bd9837d13dceca2f18ee 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/Writer.cpp @@ -305,6 +305,11 @@ namespace armarx::aron::codegenerator::cpp { c->addInclude(info.include); } + + if (type->getExtends() != nullptr) + { + info.extends = true; + } CppMethodPtr convert = generator.toSpecializedDataWriterMethod(info); c->addPublicMethod(convert); } @@ -338,6 +343,11 @@ namespace armarx::aron::codegenerator::cpp { c->addInclude(info.include); } + + if (type->getExtends() != nullptr) + { + info.extends = true; + } CppMethodPtr convert = generator.toSpecializedDataReaderMethod(info); c->addPublicMethod(convert); } @@ -416,6 +426,7 @@ namespace armarx::aron::codegenerator::cpp { c->addInclude(info.include); } + CppMethodPtr convert = generator.toSpecializedDataWriterMethod(info); c->addPublicMethod(convert); } 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 18dd38f6e03bae69bc465d45468044b4db82f91f..a0715b220c8e5d96f431802b6da8db78857194cc 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 @@ -317,7 +317,10 @@ namespace armarx::aron::codegenerator::cpp doc << "@brief " << info.methodName << "() - This method returns a new data from the member data types using a writer implementation. \n"; doc << "@return - the result of the writer implementation"; - CppMethodPtr m = CppMethodPtr(new CppMethod(info.returnType + " " + info.methodName + "() const", doc.str())); + const std::string fin = info.extends ? " final" : ""; + const std::string virt = info.extends ? "" : "virtual "; + + CppMethodPtr m = CppMethodPtr(new CppMethod(virt + info.returnType + " " + info.methodName + "() const" + fin, doc.str())); m->addLine(info.writerClassType + " writer;"); m->addLine("return " + info.enforceConversion + "(this->write(writer))" + info.enforceMemberAccess + ";"); @@ -331,7 +334,10 @@ namespace armarx::aron::codegenerator::cpp doc << "@brief " << info.methodName << " - This method sets the struct members to new values given in a reader implementation. \n"; doc << "@return - nothing"; - CppMethodPtr m = CppMethodPtr(new CppMethod("void " + info.methodName + "(const " + info.argumentType + "& input)", doc.str())); + const std::string fin = info.extends ? " final" : ""; + const std::string virt = info.extends ? "" : "virtual "; + + CppMethodPtr m = CppMethodPtr(new CppMethod(virt + "void " + info.methodName + "(const " + info.argumentType + "& input)" + fin, doc.str())); m->addLine(info.readerClassType + " reader;"); m->addLine("this->read(reader, " + info.enforceConversion + "(input)" + info.enforceMemberAccess + ");"); diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h index 3bda10de7b14849fe6e18da11f7201704c2f3670..58dda63811ac9282d571c6db89620f6400e6fa10 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/ReaderInfo.h @@ -37,6 +37,7 @@ namespace armarx::aron::codegenerator std::string include; std::string enforceConversion = ""; std::string enforceMemberAccess = ""; + bool extends = false; }; diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h index 1989ac5de9e93ee5ddda8ac66cfa1e65edeab98b..d3cff5ef8c6dd719199469ccb4da3a252c8bd3c8 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/helper/WriterInfo.h @@ -37,5 +37,6 @@ namespace armarx::aron::codegenerator std::string include; std::string enforceConversion = ""; std::string enforceMemberAccess = ""; + bool extends = false; }; }