26 #include <SimoxUtility/algorithm/string.h>
43 std::string result =
"";
47 char c = std::tolower(
str[0]);
52 for (
unsigned int i = 1; i <
str.length(); i++)
62 result = result +
'_';
63 result += char(std::tolower(ch));
79 const std::vector<std::string>& additionalIncludesFromXMLFile) :
80 CodeWriter(producerName, additionalIncludesFromXMLFile)
93 toAron.methodName =
"toAron";
94 toAron.returnType =
"armarx::aron::data::DictPtr";
95 toAron.writerClassType =
"armarx::aron::data::writer::VariantWriter";
97 "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
98 toAron.enforceConversion =
"armarx::aron::data::Dict::DynamicCastAndCheck";
105 toAronDTO.
returnType =
"armarx::aron::data::dto::DictPtr";
106 toAronDTO.
writerClassType =
"armarx::aron::data::writer::VariantWriter";
108 "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
118 ToAronType.
returnType =
"armarx::aron::type::ObjectPtr";
119 ToAronType.
writerClassType =
"armarx::aron::type::writer::VariantWriter";
121 "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
122 ToAronType.
enforceConversion =
"armarx::aron::type::Object::DynamicCastAndCheck";
129 ToAronTypeDTO.
returnType =
"armarx::aron::type::dto::AronObjectPtr";
130 ToAronTypeDTO.
writerClassType =
"armarx::aron::type::writer::VariantWriter";
132 "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
133 ToAronTypeDTO.
enforceConversion =
"armarx::aron::type::Object::DynamicCastAndCheck";
143 toAron.methodName =
"toAron";
144 toAron.returnType =
"armarx::aron::data::IntPtr";
145 toAron.writerClassType =
"armarx::aron::data::writer::VariantWriter";
147 "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
148 toAron.enforceConversion =
"armarx::aron::data::Int::DynamicCastAndCheck";
155 toAronDTO.
returnType =
"armarx::aron::data::dto::AronIntPtr";
156 toAronDTO.
writerClassType =
"armarx::aron::data::writer::VariantWriter";
158 "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
168 ToAronType.
returnType =
"armarx::aron::type::IntEnumPtr";
169 ToAronType.
writerClassType =
"armarx::aron::type::writer::VariantWriter";
171 "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
172 ToAronType.
enforceConversion =
"armarx::aron::type::IntEnum::DynamicCastAndCheck";
179 ToAronTypeDTO.
returnType =
"armarx::aron::type::dto::IntEnumPtr";
180 ToAronTypeDTO.
writerClassType =
"armarx::aron::type::writer::VariantWriter";
182 "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
184 "armarx::aron::type::IntEnum::DynamicCastAndCheck";
199 fromAron.argumentType =
"armarx::aron::data::DictPtr";
200 fromAron.returnType = OWN_TYPE_NAME;
206 fromAronDTO.
argumentType =
"armarx::aron::data::dto::DictPtr";
213 fromAron.argumentType =
"armarx::aron::data::DictPtr";
214 fromAron.readerClassType =
"armarx::aron::data::reader::VariantReader";
216 "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
223 fromAronDTO.
argumentType =
"armarx::aron::data::dto::DictPtr";
224 fromAronDTO.
readerClassType =
"armarx::aron::data::reader::VariantReader";
226 "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
238 fromAron.argumentType =
"armarx::aron::data::IntPtr";
239 fromAron.returnType = OWN_TYPE_NAME;
245 fromAronDTO.
argumentType =
"armarx::aron::data::dto::AronIntPtr";
252 fromAron.argumentType =
"armarx::aron::data::IntPtr";
253 fromAron.readerClassType =
"armarx::aron::data::reader::VariantReader";
255 "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
262 fromAronDTO.
argumentType =
"armarx::aron::data::dto::AronIntPtr";
263 fromAronDTO.
readerClassType =
"armarx::aron::data::reader::VariantReader";
265 "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
276 for (
const auto& publicGenerateObjectType : generateObjects)
278 const auto type = publicGenerateObjectType.correspondingType;
290 if (!type->getTemplates().empty())
292 std::vector<std::string> tmpl;
293 std::vector<std::string> tmpl_requires;
294 for (
auto& t : type->getTemplates())
296 tmpl_requires.push_back(
"armarx::aron::cpp::isAronGeneratedObject<" + t +
">");
297 tmpl.push_back(
"class " + t);
299 std::string templateDef =
"template <" + simox::alg::join(tmpl,
", ") +
">";
300 std::string requiresDef =
"requires " + simox::alg::join(tmpl_requires,
" && ");
301 c->setTemplates(templateDef +
"\n" + requiresDef);
305 if (type->getExtends() !=
nullptr)
312 c->addInherit(
"public armarx::aron::cpp::AronGeneratedObject<" +
319 if (info.returnType == OWN_TYPE_NAME)
324 if (!info.include.empty())
326 c->addInclude(info.include);
337 if (info.returnType == OWN_TYPE_NAME)
341 if (info.argumentType == OWN_TYPE_NAME)
353 if (info.argumentType == OWN_TYPE_NAME)
358 if (!info.include.empty())
360 c->addInclude(info.include);
370 if (info.returnType == OWN_TYPE_NAME)
375 if (!info.include.empty())
377 c->addInclude(info.include);
389 const std::vector<typereader::GenerateIntEnumInfo>& generateIntEnums)
391 for (
const auto& publicGenerateIntEnumType : generateIntEnums)
393 const auto& nav = publicGenerateIntEnumType.correspondingType;
404 c->addInclude(
"<RobotAPI/libraries/aron/core/data/variant/primitive/Int.h>");
408 c->addInherit(
"public armarx::aron::cpp::AronGeneratedIntEnum<" +
418 c->addPublicMethod(fromString);
421 c->addPublicMethod(intConversion);
424 c->addPublicMethod(enumAssignment);
427 c->addPublicMethod(enumAssignment2);
430 c->addPublicMethod(enumAssignment3);
435 if (info.returnType == OWN_TYPE_NAME)
440 if (!info.include.empty())
442 c->addInclude(info.include);
453 if (info.returnType == OWN_TYPE_NAME)
457 if (info.argumentType == OWN_TYPE_NAME)
469 if (info.argumentType == OWN_TYPE_NAME)
474 if (!info.include.empty())
476 c->addInclude(info.include);
485 if (info.returnType == OWN_TYPE_NAME)
490 if (!info.include.empty())
492 c->addInclude(info.include);
506 const auto& type = gen.
getType();
512 "Somehow the maybe flag of a top level object declaration is set. This is not "
523 namespaces.push_back(simox::alg::to_lower(
camelToSnake(rawObjectName)) +
"_details");
525 std::string enumdoc =
"The enum definition of the enum of the auogenerated class '" +
527 CppEnumPtr e = std::make_shared<CppEnum>(namespaces,
"Enum");
532 for (
const auto& field : enumFields)
543 const auto& type = gen.
getType();
549 "Somehow the maybe flag of a top level object declaration is set. This is not "
561 CppClassPtr c = std::make_shared<CppClass>(namespaces, rawObjectName);
563 std::string classDoc =
"******************************************\n"
564 "* AUTOGENERATED CLASS. Please do NOT edit.\n"
565 "******************************************\n";
573 c->addClassDoc(classDoc);
590 simox::alg::replace_last(
s,
".aron.generated.codesuffix",
".aron.generated.h"));
595 c->addInclude(
"<RobotAPI/libraries/aron/core/aron_conversions.h>");
596 c->addInclude(
"<RobotAPI/libraries/aron/core/rw.h>");
597 c->addInclude(
"<RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedClass.h>");
598 c->addInclude(
"<RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedObject.h>");
599 c->addInclude(
"<RobotAPI/libraries/aron/core/codegeneration/cpp/AronGeneratedIntEnum.h>");
602 c->addCtor(gen.
toCtor(
c->getName()));
606 c->addPublicMethod(gen.
toDtor(
c->getName()));
611 c->addPublicMethod(equals);
615 c->addPublicMethod(resetHard);
619 c->addPublicMethod(resetSoft);
623 c->addPublicMethod(writeType);
627 c->addPublicMethod(
write);
631 c->addPublicMethod(
read);
637 const std::map<std::string, std::string>& doc_members,
641 for (
const auto& f : publicFields)
643 if (
auto it = doc_members.find(f->getName()); it != doc_members.end())
645 f->setDoc(
"@brief " + it->second);
647 c->addPublicField(f);
653 const std::map<std::string, std::string>& doc_members,
657 for (
const auto& f : publicFields)
659 if (
auto it = doc_members.find(f->getName()); it != doc_members.end())
661 f->setDoc(
"@brief " + it->second);
663 c->addPublicField(f);