Writer.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5  * Karlsruhe Institute of Technology (KIT), all rights reserved.
6  *
7  * ArmarX is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * ArmarX is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @author Fabian Peller-Konrad (fabian dot peller-konrad at kit dot edu)
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 
25 // Simox
26 #include <SimoxUtility/algorithm/string.h>
27 
28 // Header
29 #include "Writer.h"
30 
31 // ArmarX
32 
34 {
35 
36  // Function to convert camel case
37  // string to snake case string
38  std::string
39  camelToSnake(const std::string& str)
40  {
41 
42  // Empty String
43  std::string result = "";
44 
45  // Append first character(in lower case)
46  // to result string
47  char c = std::tolower(str[0]);
48  result += (char(c));
49 
50  // Traverse the string from
51  // ist index to last index
52  for (unsigned int i = 1; i < str.length(); i++)
53  {
54 
55  char ch = str[i];
56 
57  // Check if the character is upper case
58  // then append '_' and such character
59  // (in lower case) to result string
60  if (std::isupper(ch))
61  {
62  result = result + '_';
63  result += char(std::tolower(ch));
64  }
65 
66  // If the character is lower case then
67  // add such character into result string
68  else
69  {
70  result = result + ch;
71  }
72  }
73 
74  // return the result
75  return result;
76  }
77 
78  Writer::Writer(const std::string& producerName,
79  const std::vector<std::string>& additionalIncludesFromXMLFile) :
80  CodeWriter(producerName, additionalIncludesFromXMLFile)
81  {
84  }
85 
86  void
88  {
89  // DictData stuff
90  {
91  {
93  toAron.methodName = "toAron";
94  toAron.returnType = "armarx::aron::data::DictPtr";
95  toAron.writerClassType = "armarx::aron::data::writer::VariantWriter";
96  toAron.include =
97  "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
98  toAron.enforceConversion = "armarx::aron::data::Dict::DynamicCastAndCheck";
99  toAron.override = true;
100  dictDataWriters.push_back(toAron);
101  }
102  {
103  codegenerator::WriterInfo toAronDTO;
104  toAronDTO.methodName = "toAronDTO";
105  toAronDTO.returnType = "armarx::aron::data::dto::DictPtr";
106  toAronDTO.writerClassType = "armarx::aron::data::writer::VariantWriter";
107  toAronDTO.include =
108  "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
109  toAronDTO.enforceConversion = "armarx::aron::data::Dict::DynamicCastAndCheck";
110  toAronDTO.enforceMemberAccess = "->toAronDictDTO()";
111  toAronDTO.override = true;
112  dictDataWriters.push_back(toAronDTO);
113  }
114  {
115  // The toAron Serializer is visible by default
116  codegenerator::WriterInfo ToAronType;
117  ToAronType.methodName = "ToAronType";
118  ToAronType.returnType = "armarx::aron::type::ObjectPtr";
119  ToAronType.writerClassType = "armarx::aron::type::writer::VariantWriter";
120  ToAronType.include =
121  "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
122  ToAronType.enforceConversion = "armarx::aron::type::Object::DynamicCastAndCheck";
123  initialDictTypeWriters.push_back(ToAronType);
124  }
125  {
126  // The toAron Serializer is visible by default
127  codegenerator::WriterInfo ToAronTypeDTO;
128  ToAronTypeDTO.methodName = "ToAronTypeDTO";
129  ToAronTypeDTO.returnType = "armarx::aron::type::dto::AronObjectPtr";
130  ToAronTypeDTO.writerClassType = "armarx::aron::type::writer::VariantWriter";
131  ToAronTypeDTO.include =
132  "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
133  ToAronTypeDTO.enforceConversion = "armarx::aron::type::Object::DynamicCastAndCheck";
134  ToAronTypeDTO.enforceMemberAccess = "->toAronObjectDTO()";
135  initialDictTypeWriters.push_back(ToAronTypeDTO);
136  }
137  }
138 
139  // IntEnum stuff
140  {
141  {
143  toAron.methodName = "toAron";
144  toAron.returnType = "armarx::aron::data::IntPtr";
145  toAron.writerClassType = "armarx::aron::data::writer::VariantWriter";
146  toAron.include =
147  "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
148  toAron.enforceConversion = "armarx::aron::data::Int::DynamicCastAndCheck";
149  toAron.override = true;
150  intEnumDataWriters.push_back(toAron);
151  }
152  {
153  codegenerator::WriterInfo toAronDTO;
154  toAronDTO.methodName = "toAronDTO";
155  toAronDTO.returnType = "armarx::aron::data::dto::AronIntPtr";
156  toAronDTO.writerClassType = "armarx::aron::data::writer::VariantWriter";
157  toAronDTO.include =
158  "<RobotAPI/libraries/aron/core/data/rw/writer/variant/VariantWriter.h>";
159  toAronDTO.enforceConversion = "armarx::aron::data::Int::DynamicCastAndCheck";
160  toAronDTO.enforceMemberAccess = "->toAronIntDTO()";
161  toAronDTO.override = true;
162  intEnumDataWriters.push_back(toAronDTO);
163  }
164  {
165  // The toAron Serializer is visible by default
166  codegenerator::WriterInfo ToAronType;
167  ToAronType.methodName = "ToAronType";
168  ToAronType.returnType = "armarx::aron::type::IntEnumPtr";
169  ToAronType.writerClassType = "armarx::aron::type::writer::VariantWriter";
170  ToAronType.include =
171  "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
172  ToAronType.enforceConversion = "armarx::aron::type::IntEnum::DynamicCastAndCheck";
173  initialIntEnumTypeWriters.push_back(ToAronType);
174  }
175  {
176  // The toAron Serializer is visible by default
177  codegenerator::WriterInfo ToAronTypeDTO;
178  ToAronTypeDTO.methodName = "ToAronTypeDTO";
179  ToAronTypeDTO.returnType = "armarx::aron::type::dto::IntEnumPtr";
180  ToAronTypeDTO.writerClassType = "armarx::aron::type::writer::VariantWriter";
181  ToAronTypeDTO.include =
182  "<RobotAPI/libraries/aron/core/type/rw/writer/variant/VariantWriter.h>";
183  ToAronTypeDTO.enforceConversion =
184  "armarx::aron::type::IntEnum::DynamicCastAndCheck";
185  ToAronTypeDTO.enforceMemberAccess = "->toIntEnumDTO()";
186  initialIntEnumTypeWriters.push_back(ToAronTypeDTO);
187  }
188  }
189  }
190 
191  void
193  {
194  // Dict stuff
195  {
196  {
198  fromAron.methodName = "FromAron";
199  fromAron.argumentType = "armarx::aron::data::DictPtr";
200  fromAron.returnType = OWN_TYPE_NAME;
201  staticDictDataReaders.push_back(fromAron);
202  }
203  {
205  fromAronDTO.methodName = "FromAron";
206  fromAronDTO.argumentType = "armarx::aron::data::dto::DictPtr";
207  fromAronDTO.returnType = OWN_TYPE_NAME;
208  staticDictDataReaders.push_back(fromAronDTO);
209  }
210  {
212  fromAron.methodName = "fromAron";
213  fromAron.argumentType = "armarx::aron::data::DictPtr";
214  fromAron.readerClassType = "armarx::aron::data::reader::VariantReader";
215  fromAron.include =
216  "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
217  fromAron.override = true;
218  dictDataReaders.push_back(fromAron);
219  }
220  {
221  codegenerator::ReaderInfo fromAronDTO;
222  fromAronDTO.methodName = "fromAron";
223  fromAronDTO.argumentType = "armarx::aron::data::dto::DictPtr";
224  fromAronDTO.readerClassType = "armarx::aron::data::reader::VariantReader";
225  fromAronDTO.include =
226  "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
227  fromAronDTO.enforceConversion = "std::make_shared<armarx::aron::data::Dict>";
228  fromAronDTO.override = true;
229  dictDataReaders.push_back(fromAronDTO);
230  }
231  }
232 
233  // IntEnum stuff
234  {
235  {
237  fromAron.methodName = "FromAron";
238  fromAron.argumentType = "armarx::aron::data::IntPtr";
239  fromAron.returnType = OWN_TYPE_NAME;
241  }
242  {
244  fromAronDTO.methodName = "FromAron";
245  fromAronDTO.argumentType = "armarx::aron::data::dto::AronIntPtr";
246  fromAronDTO.returnType = OWN_TYPE_NAME;
247  staticIntEnumDataReaders.push_back(fromAronDTO);
248  }
249  {
251  fromAron.methodName = "fromAron";
252  fromAron.argumentType = "armarx::aron::data::IntPtr";
253  fromAron.readerClassType = "armarx::aron::data::reader::VariantReader";
254  fromAron.include =
255  "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
256  fromAron.override = true;
257  intEnumDataReaders.push_back(fromAron);
258  }
259  {
260  codegenerator::ReaderInfo fromAronDTO;
261  fromAronDTO.methodName = "fromAron";
262  fromAronDTO.argumentType = "armarx::aron::data::dto::AronIntPtr";
263  fromAronDTO.readerClassType = "armarx::aron::data::reader::VariantReader";
264  fromAronDTO.include =
265  "<RobotAPI/libraries/aron/core/data/rw/reader/variant/VariantReader.h>";
266  fromAronDTO.enforceConversion = "std::make_shared<armarx::aron::data::Int>";
267  fromAronDTO.override = true;
268  intEnumDataReaders.push_back(fromAronDTO);
269  }
270  }
271  }
272 
273  void
274  Writer::generateTypeObjects(const std::vector<typereader::GenerateObjectInfo>& generateObjects)
275  {
276  for (const auto& publicGenerateObjectType : generateObjects)
277  {
278  const auto type = publicGenerateObjectType.correspondingType;
279 
280  //std::cout << "Generating: " << nav->getName() << std::endl;
281 
282  // Convert to Object type and create class object
283  ARMARX_CHECK_NOT_NULL(type);
284 
285  generator::ObjectClass generator(*type);
286  CppClassPtr c = setupBasicCppClass(publicGenerateObjectType, generator);
287  setupMemberFields(c, publicGenerateObjectType.doc_members, generator);
288 
289  // check for templates
290  if (!type->getTemplates().empty())
291  {
292  std::vector<std::string> tmpl;
293  std::vector<std::string> tmpl_requires;
294  for (auto& t : type->getTemplates())
295  {
296  tmpl_requires.push_back("armarx::aron::cpp::isAronGeneratedObject<" + t + ">");
297  tmpl.push_back("class " + t);
298  }
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);
302  }
303 
304  // check for inheritance
305  if (type->getExtends() != nullptr)
306  {
307  generator::ObjectClass extendsSerializer(*type->getExtends());
308  c->addInherit("public " + extendsSerializer.getFullInstantiatedCppTypename());
309  }
310  else
311  {
312  c->addInherit("public armarx::aron::cpp::AronGeneratedObject<" +
313  generator.getFullClassCppTypename() + ">");
314  }
315 
316  // Writermethods
318  {
319  if (info.returnType == OWN_TYPE_NAME)
320  {
321  info.returnType = generator.getFullClassCppTypename();
322  }
323 
324  if (!info.include.empty())
325  {
326  c->addInclude(info.include);
327  }
328 
330  c->addPublicMethod(convert);
331  }
332 
333  // Add methods to set the member variables
334  // also resolve the original class name if the return type is set to special
336  {
337  if (info.returnType == OWN_TYPE_NAME)
338  {
339  info.returnType = generator.getFullClassCppTypename();
340  }
341  if (info.argumentType == OWN_TYPE_NAME)
342  {
343  info.argumentType = generator.getFullClassCppTypename();
344  }
345 
347  c->addPublicMethod(convert);
348  }
349 
350  // Add methods to set the member variables
352  {
353  if (info.argumentType == OWN_TYPE_NAME)
354  {
355  info.argumentType = generator.getFullClassCppTypename();
356  }
357 
358  if (!info.include.empty())
359  {
360  c->addInclude(info.include);
361  }
362 
364  c->addPublicMethod(convert);
365  }
366 
367  // Typewritermethods
369  {
370  if (info.returnType == OWN_TYPE_NAME)
371  {
372  info.returnType = generator.getFullClassCppTypename();
373  }
374 
375  if (!info.include.empty())
376  {
377  c->addInclude(info.include);
378  }
380  c->addPublicMethod(convert);
381  }
382 
383  typeClasses.push_back(c);
384  }
385  }
386 
387  void
389  const std::vector<typereader::GenerateIntEnumInfo>& generateIntEnums)
390  {
391  for (const auto& publicGenerateIntEnumType : generateIntEnums)
392  {
393  const auto& nav = publicGenerateIntEnumType.correspondingType;
395 
396  generator::IntEnumClass generator(*nav);
397 
398  // Create enum class and add to enums
399  CppEnumPtr enumrepresentation = setupEnumPtr(publicGenerateIntEnumType, generator);
400  typeEnums.push_back(enumrepresentation);
401 
402  // Generate aron wrapper class and add to classes
403  CppClassPtr c = setupBasicCppClass(publicGenerateIntEnumType, generator);
404  c->addInclude("<RobotAPI/libraries/aron/core/data/variant/primitive/Int.h>");
405 
406  setupMemberFields(c, publicGenerateIntEnumType.doc_values, generator);
407 
408  c->addInherit("public armarx::aron::cpp::AronGeneratedIntEnum<" +
409  generator.getFullClassCppTypename() + ">");
410 
411  // ctor
412  c->addCtor(generator.toEnumCtor(c->getName()));
413 
414  CppMethodPtr toString = generator.toToStringMethod();
415  c->addPublicMethod(toString);
416 
417  CppMethodPtr fromString = generator.toFromStringMethod();
418  c->addPublicMethod(fromString);
419 
420  CppMethodPtr intConversion = generator.toIntMethod();
421  c->addPublicMethod(intConversion);
422 
423  CppMethodPtr enumAssignment = generator.toEnumAssignmentMethod();
424  c->addPublicMethod(enumAssignment);
425 
426  CppMethodPtr enumAssignment2 = generator.toCopyAssignmentMethod();
427  c->addPublicMethod(enumAssignment2);
428 
429  CppMethodPtr enumAssignment3 = generator.toIntAssignmentMethod();
430  c->addPublicMethod(enumAssignment3);
431 
432  // Writermethods
434  {
435  if (info.returnType == OWN_TYPE_NAME)
436  {
437  info.returnType = generator.getFullClassCppTypename();
438  }
439 
440  if (!info.include.empty())
441  {
442  c->addInclude(info.include);
443  }
444 
446  c->addPublicMethod(convert);
447  }
448 
449  // Add methods to set the member variables
450  // also resolve the original class name if the return type is set to special
452  {
453  if (info.returnType == OWN_TYPE_NAME)
454  {
455  info.returnType = generator.getFullClassCppTypename();
456  }
457  if (info.argumentType == OWN_TYPE_NAME)
458  {
459  info.argumentType = generator.getFullClassCppTypename();
460  }
461 
463  c->addPublicMethod(convert);
464  }
465 
466  // Add methods to set the member variables
468  {
469  if (info.argumentType == OWN_TYPE_NAME)
470  {
471  info.argumentType = generator.getFullClassCppTypename();
472  }
473 
474  if (!info.include.empty())
475  {
476  c->addInclude(info.include);
477  }
479  c->addPublicMethod(convert);
480  }
481 
482  // Typewritermethods
484  {
485  if (info.returnType == OWN_TYPE_NAME)
486  {
487  info.returnType = generator.getFullClassCppTypename();
488  }
489 
490  if (!info.include.empty())
491  {
492  c->addInclude(info.include);
493  }
495  c->addPublicMethod(convert);
496  }
497 
498  typeClasses.push_back(c);
499  }
500  }
501 
502  CppEnumPtr
504  const generator::IntEnumClass& gen) const
505  {
506  const auto& type = gen.getType();
507  if (type.getMaybe() != type::Maybe::NONE)
508  {
509  // Should not happen since we check the maybe flag on creation of the generator. However, better to double check
511  __PRETTY_FUNCTION__,
512  "Somehow the maybe flag of a top level object declaration is set. This is not "
513  "valid!",
514  std::to_string((int)type.getMaybe()) + " aka " +
516  type.getPath());
517  }
518 
519  const std::string classCppTypename = gen.getClassCppTypename();
520 
521  std::vector<std::string> namespaces = info.getNamespaces();
522  std::string rawObjectName = info.getNameWithoutNamespace();
523  namespaces.push_back(simox::alg::to_lower(camelToSnake(rawObjectName)) + "_details");
524 
525  std::string enumdoc = "The enum definition of the enum of the auogenerated class '" +
526  gen.getFullClassCppTypename() + "'.";
527  CppEnumPtr e = std::make_shared<CppEnum>(namespaces, "Enum");
528  auto enumFields = gen.toEnumFields();
529 
530  ARMARX_CHECK(enumFields.size() > 0);
531 
532  for (const auto& field : enumFields)
533  {
534  e->addField(field);
535  }
536 
537  return e;
538  }
539 
542  {
543  const auto& type = gen.getType();
544  if (type.getMaybe() != type::Maybe::NONE)
545  {
546  // Should not happen since we check the maybe flag on creation of the generator. However, better to double check
548  __PRETTY_FUNCTION__,
549  "Somehow the maybe flag of a top level object declaration is set. This is not "
550  "valid!",
551  std::to_string((int)type.getMaybe()) + " aka " +
553  type.getPath());
554  }
555 
556  const std::string classCppTypename = gen.getClassCppTypename();
557 
558  std::vector<std::string> namespaces = info.getNamespaces();
559  std::string rawObjectName = info.getNameWithoutNamespace();
560 
561  CppClassPtr c = std::make_shared<CppClass>(namespaces, rawObjectName);
562  // Add includes and guard
563  std::string classDoc = "******************************************\n"
564  "* AUTOGENERATED CLASS. Please do NOT edit.\n"
565  "******************************************\n";
566 
567  if (!info.doc_author.empty() or !info.doc_brief.empty())
568  {
569  classDoc += (info.doc_brief.empty() ? "" : " * @brief " + info.doc_brief + "\n");
570  classDoc += (info.doc_author.empty() ? "" : " * @author " + info.doc_author + "\n");
571  }
572 
573  c->addClassDoc(classDoc);
574 
575  // add generator includes (e.g. coming from dto types)
576  for (const auto& s : gen.getRequiredIncludes())
577  {
578  if (!s.empty())
579  {
580  c->addInclude(s);
581  }
582  }
583 
584  // add predefined includes from generator app (e.g. coming from aron includes)
585  for (const std::string& s : additionalIncludes)
586  {
587  if (!s.empty())
588  {
589  c->addInclude(
590  simox::alg::replace_last(s, ".aron.generated.codesuffix", ".aron.generated.h"));
591  }
592  }
593 
594  // always add aron includes
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>");
600 
601  // ctor
602  c->addCtor(gen.toCtor(c->getName()));
603  c->addCtor(gen.toCopyCtor(c->getName()));
604 
605  // dtor
606  c->addPublicMethod(gen.toDtor(c->getName()));
607 
608  // Generic methods
609  //std::cout << "Generate equals method" << std::endl;
610  CppMethodPtr equals = gen.toEqualsMethod();
611  c->addPublicMethod(equals);
612 
613  //std::cout << "Generate reset method" << std::endl;
614  CppMethodPtr resetHard = gen.toResetHardMethod();
615  c->addPublicMethod(resetHard);
616 
617  //std::cout << "Generate init method" << std::endl;
618  CppMethodPtr resetSoft = gen.toResetSoftMethod();
619  c->addPublicMethod(resetSoft);
620 
621  //std::cout << "Generate writeInit method" << std::endl;
622  CppMethodPtr writeType = gen.toWriteTypeMethod();
623  c->addPublicMethod(writeType);
624 
625  //std::cout << "Generate write method" << std::endl;
627  c->addPublicMethod(write);
628 
629  //std::cout << "Generate read method" << std::endl;
631  c->addPublicMethod(read);
632  return c;
633  }
634 
635  void
637  const std::map<std::string, std::string>& doc_members,
638  const generator::ObjectClass& o) const
639  {
640  auto publicFields = o.getPublicVariableDeclarations(c->getName());
641  for (const auto& f : publicFields)
642  {
643  if (auto it = doc_members.find(f->getName()); it != doc_members.end())
644  {
645  f->setDoc("@brief " + it->second);
646  }
647  c->addPublicField(f);
648  }
649  }
650 
651  void
653  const std::map<std::string, std::string>& doc_members,
654  const generator::IntEnumClass& o) const
655  {
656  auto publicFields = o.getPublicVariableDeclarations(camelToSnake(c->getName()));
657  for (const auto& f : publicFields)
658  {
659  if (auto it = doc_members.find(f->getName()); it != doc_members.end())
660  {
661  f->setDoc("@brief " + it->second);
662  }
663  c->addPublicField(f);
664  }
665  }
666 } // namespace armarx::aron::codegenerator::cpp
armarx::aron::codegenerator::cpp::Generator::getFullInstantiatedCppTypename
std::string getFullInstantiatedCppTypename() const
Definition: Generator.cpp:116
armarx::aron::codegenerator::cpp::Generator::toResetHardMethod
CppMethodPtr toResetHardMethod() const
Definition: Generator.cpp:264
armarx::aron::codegenerator::cpp
Definition: AnyObject.cpp:28
armarx::aron::codegenerator::cpp::Generator::getFullClassCppTypename
std::string getFullClassCppTypename() const
Definition: Generator.cpp:168
armarx::aron::codegenerator::ReaderInfo::argumentType
std::string argumentType
Definition: ReaderInfo.h:35
str
std::string str(const T &t)
Definition: UserAssistedSegmenterGuiWidgetController.cpp:43
armarx::aron::codegenerator::ReaderInfo::methodName
std::string methodName
Definition: ReaderInfo.h:34
armarx::aron::codegenerator::WriterInfo::writerClassType
std::string writerClassType
Definition: WriterInfo.h:36
armarx::aron::codegenerator::cpp::Generator::toCtor
CppCtorPtr toCtor(const std::string &) const
Definition: Generator.cpp:191
armarx::aron::codegenerator::cpp::generator::ObjectClass
Definition: ObjectClass.h:31
armarx::aron::codegenerator::cpp::Generator::toSpecializedDataWriterMethod
CppMethodPtr toSpecializedDataWriterMethod(const WriterInfo &info) const
Definition: Generator.cpp:374
armarx::aron::codegenerator::CodeWriter::intEnumDataReaders
std::vector< codegenerator::ReaderInfo > intEnumDataReaders
Definition: CodeWriter.h:86
armarx::aron::codegenerator::cpp::Writer::generateTypeObjects
virtual void generateTypeObjects(const std::vector< typereader::GenerateObjectInfo > &) override
Definition: Writer.cpp:274
armarx::aron::codegenerator::WriterInfo::enforceMemberAccess
std::string enforceMemberAccess
Definition: WriterInfo.h:39
armarx::aron::codegenerator::cpp::Writer::addSpecificReaderMethods
virtual void addSpecificReaderMethods() override
Definition: Writer.cpp:192
armarx::aron::codegenerator::cpp::generator::ObjectClass::getPublicVariableDeclarations
std::vector< CppFieldPtr > getPublicVariableDeclarations(const std::string &) const final
Definition: ObjectClass.cpp:85
armarx::CppClassPtr
std::shared_ptr< CppClass > CppClassPtr
Definition: CppClass.h:35
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::aron::codegenerator::CodeWriter::staticDictDataReaders
std::vector< codegenerator::StaticReaderInfo > staticDictDataReaders
Definition: CodeWriter.h:88
armarx::aron::codegenerator::WriterInfo::returnType
std::string returnType
Definition: WriterInfo.h:35
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toFromStringMethod
CppMethodPtr toFromStringMethod() const
Definition: IntEnumClass.cpp:319
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toEnumCtor
CppCtorPtr toEnumCtor(const std::string &) const
Definition: IntEnumClass.cpp:211
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toIntMethod
CppMethodPtr toIntMethod() const
Definition: IntEnumClass.cpp:232
armarx::aron::codegenerator::cpp::Generator::toResetSoftMethod
CppMethodPtr toResetSoftMethod() const
Definition: Generator.cpp:247
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::aron::codegenerator::CodeWriter::typeEnums
std::vector< MetaEnumPtr > typeEnums
Definition: CodeWriter.h:79
armarx::aron::codegenerator::cpp::generator::IntEnumClass::getPublicVariableDeclarations
std::vector< CppFieldPtr > getPublicVariableDeclarations(const std::string &) const final
Definition: IntEnumClass.cpp:51
armarx::aron::codegenerator::cpp::camelToSnake
std::string camelToSnake(const std::string &str)
Definition: Writer.cpp:39
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toToStringMethod
CppMethodPtr toToStringMethod() const
Definition: IntEnumClass.cpp:305
armarx::aron::codegenerator::CodeWriter::staticIntEnumDataReaders
std::vector< codegenerator::StaticReaderInfo > staticIntEnumDataReaders
Definition: CodeWriter.h:89
armarx::aron::codegenerator::ReaderInfo::readerClassType
std::string readerClassType
Definition: ReaderInfo.h:36
armarx::convert
armem::articulated_object::ArticulatedObject convert(const VirtualRobot::Robot &obj, const armem::Time &timestamp)
Definition: ArticulatedObjectLocalizerDynamicSimulation.cpp:194
armarx::aron::codegenerator::CodeWriter::initialIntEnumTypeWriters
std::vector< codegenerator::WriterInfo > initialIntEnumTypeWriters
Definition: CodeWriter.h:92
armarx::aron::codegenerator::cpp::Generator::toDtor
CppMethodPtr toDtor(const std::string &) const
Definition: Generator.cpp:229
armarx::aron::codegenerator::ReaderInfo::include
std::string include
Definition: ReaderInfo.h:37
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::aron::codegenerator::ReaderInfo
Definition: ReaderInfo.h:32
armarx::aron::codegenerator::cpp::Generator::toWriteTypeMethod
CppMethodPtr toWriteTypeMethod() const
Definition: Generator.cpp:281
armarx::aron::codegenerator::StaticReaderInfo::returnType
std::string returnType
Definition: ReaderInfo.h:47
armarx::aron::codegenerator::WriterInfo::enforceConversion
std::string enforceConversion
Definition: WriterInfo.h:38
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toIntAssignmentMethod
CppMethodPtr toIntAssignmentMethod() const
Definition: IntEnumClass.cpp:281
armarx::aron::codegenerator::cpp::Generator::toSpecializedStaticDataReaderMethod
CppMethodPtr toSpecializedStaticDataReaderMethod(const StaticReaderInfo &info) const
Definition: Generator.cpp:416
armarx::CppEnumPtr
std::shared_ptr< CppEnum > CppEnumPtr
Definition: CppEnum.h:54
armarx::aron::error::ValueNotValidException
The ValueNotValidException class.
Definition: Exception.h:98
armarx::aron::codegenerator::StaticReaderInfo::methodName
std::string methodName
Definition: ReaderInfo.h:45
armarx::aron::codegenerator::cpp::Writer::setupEnumPtr
CppEnumPtr setupEnumPtr(const typereader::GenerateInfo &info, const generator::IntEnumClass &gen) const
Definition: Writer.cpp:503
armarx::aron::codegenerator::CodeWriter::dictDataReaders
std::vector< codegenerator::ReaderInfo > dictDataReaders
Definition: CodeWriter.h:85
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toEnumFields
std::vector< CppEnumFieldPtr > toEnumFields() const
Definition: IntEnumClass.cpp:221
armarx::aron::read
requires data::isReader< ReaderT > void read(ReaderT &aron_r, typename ReaderT::InputType &input, Eigen::Matrix< EigenT, rows, cols, options > &ret)
Definition: eigen.h:23
armarx::aron::typereader::GenerateInfo::getNameWithoutNamespace
std::string getNameWithoutNamespace() const
Definition: GenerateInfo.h:46
armarx::CppMethodPtr
std::shared_ptr< CppMethod > CppMethodPtr
Definition: CppMethod.h:31
armarx::aron::codegenerator::cpp::Generator::getRequiredIncludes
virtual std::vector< std::string > getRequiredIncludes() const
Definition: Generator.cpp:476
armarx::aron::codegenerator::CodeWriter::additionalIncludes
std::vector< std::string > additionalIncludes
Definition: CodeWriter.h:94
armarx::aron::codegenerator::cpp::Generator::toReadMethod
CppMethodPtr toReadMethod() const
Definition: Generator.cpp:339
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toCopyAssignmentMethod
CppMethodPtr toCopyAssignmentMethod() const
Definition: IntEnumClass.cpp:246
armarx::aron::codegenerator::ReaderInfo::override
bool override
Definition: ReaderInfo.h:40
Writer.h
armarx::aron::codegenerator::cpp::Generator::toEqualsMethod
CppMethodPtr toEqualsMethod() const
Definition: Generator.cpp:456
armarx::aron::codegenerator::CodeWriter::dictDataWriters
std::vector< codegenerator::WriterInfo > dictDataWriters
Definition: CodeWriter.h:82
armarx::aron::codegenerator::StaticReaderInfo::argumentType
std::string argumentType
Definition: ReaderInfo.h:46
armarx::aron::typereader::GenerateInfo
A top-level struct for type-generation information.
Definition: GenerateInfo.h:38
armarx::aron::codegenerator::WriterInfo::methodName
std::string methodName
Definition: WriterInfo.h:34
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:41
armarx::aron::codegenerator::cpp::generator::detail::SpecializedGeneratorBase::getType
virtual const type::Variant & getType() const override
Definition: SpecializedGenerator.h:53
armarx::aron::codegenerator::CodeWriter::initialDictTypeWriters
std::vector< codegenerator::WriterInfo > initialDictTypeWriters
Definition: CodeWriter.h:91
armarx::aron::codegenerator::ReaderInfo::enforceConversion
std::string enforceConversion
Definition: ReaderInfo.h:38
armarx::aron::typereader::GenerateInfo::doc_brief
std::string doc_brief
Definition: GenerateInfo.h:42
armarx::aron::codegenerator::cpp::Writer::Writer
Writer()=delete
armarx::aron::typereader::GenerateInfo::doc_author
std::string doc_author
Definition: GenerateInfo.h:43
armarx::aron::toAron
void toAron(T &dto, const T &bo)
Framework for converting ARON DTOs (Data Transfer Objects) to C++ BOs (Business Objects) and back.
Definition: aron_conversions.h:77
armarx::aron::codegenerator::StaticReaderInfo
Definition: ReaderInfo.h:43
armarx::aron::similarity::FloatSimilarity::NONE
@ NONE
Definition: FloatSimilarity.h:14
armarx::aron::codegenerator::WriterInfo::override
bool override
Definition: WriterInfo.h:40
armarx::aron::codegenerator::cpp::Generator::getType
virtual const type::Variant & getType() const =0
armarx::viz::toString
const char * toString(InteractionFeedbackType type)
Definition: Interaction.h:28
armarx::aron::codegenerator::WriterInfo::include
std::string include
Definition: WriterInfo.h:37
armarx::aron::write
requires data::isWriter< WriterT > void write(WriterT &aron_w, const Eigen::Matrix< EigenT, rows, cols, options > &input, typename WriterT::ReturnType &ret, const armarx::aron::Path &aron_p=armarx::aron::Path())
Definition: eigen.h:138
armarx::aron::codegenerator::CodeWriter::intEnumDataWriters
std::vector< codegenerator::WriterInfo > intEnumDataWriters
Definition: CodeWriter.h:83
armarx::aron::codegenerator::cpp::Generator::toSpecializedDataReaderMethod
CppMethodPtr toSpecializedDataReaderMethod(const ReaderInfo &info) const
Definition: Generator.cpp:395
armarx::aron::codegenerator::cpp::Writer::addSpecificWriterMethods
virtual void addSpecificWriterMethods() override
Definition: Writer.cpp:87
armarx::aron::typereader::GenerateInfo::getNamespaces
std::vector< std::string > getNamespaces() const
Definition: GenerateInfo.h:68
armarx::aron::codegenerator::cpp::Generator::toSpecializedTypeWriterMethod
CppMethodPtr toSpecializedTypeWriterMethod(const WriterInfo &info) const
Definition: Generator.cpp:437
armarx::aron::codegenerator::cpp::Generator::toWriteMethod
CppMethodPtr toWriteMethod() const
Definition: Generator.cpp:308
armarx::aron::codegenerator::cpp::Generator
Definition: Generator.h:62
armarx::aron::codegenerator::cpp::Generator::getClassCppTypename
std::string getClassCppTypename() const
Definition: Generator.cpp:162
armarx::aron::codegenerator::cpp::Writer::setupMemberFields
void setupMemberFields(CppClassPtr &, const std::map< std::string, std::string > &doc_members, const generator::ObjectClass &) const
Definition: Writer.cpp:636
armarx::aron::codegenerator::cpp::Generator::toCopyCtor
CppCtorPtr toCopyCtor(const std::string &) const
Definition: Generator.cpp:209
armarx::aron::codegenerator::cpp::generator::IntEnumClass::toEnumAssignmentMethod
CppMethodPtr toEnumAssignmentMethod() const
Definition: IntEnumClass.cpp:264
armarx::aron::fromAron
void fromAron(const T &dto, T &bo)
Definition: aron_conversions.h:84
armarx::aron::codegenerator::cpp::Writer::setupBasicCppClass
CppClassPtr setupBasicCppClass(const typereader::GenerateInfo &info, const Generator &gen) const
Definition: Writer.cpp:541
armarx::aron::codegenerator::CodeWriter
Definition: CodeWriter.h:45
armarx::aron::codegenerator::cpp::generator::IntEnumClass
Definition: IntEnumClass.h:34
armarx::aron::codegenerator::CodeWriter::typeClasses
std::vector< MetaClassPtr > typeClasses
Definition: CodeWriter.h:78
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx::aron::codegenerator::WriterInfo
Definition: WriterInfo.h:32
armarx::aron::type::defaultconversion::string::Maybe2String
const std::map< type::Maybe, std::string > Maybe2String
Definition: Descriptor.h:115
armarx::aron::codegenerator::cpp::Writer::generateTypeIntEnums
virtual void generateTypeIntEnums(const std::vector< typereader::GenerateIntEnumInfo > &) override
Definition: Writer.cpp:388