Generator.h
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 #pragma once
25 
26 #include <map>
27 #include <memory>
28 #include <string>
29 #include <vector>
30 
36 
37 #include <RobotAPI/interface/aron.h>
42 
44 {
45 
46  namespace conversion
47  {
48  const std::map<type::Maybe, std::string> Maybe2CppString = {
49  {type::Maybe::NONE, "::armarx::aron::type::Maybe::NONE"},
50  {type::Maybe::OPTIONAL, "::armarx::aron::type::Maybe::OPTIONAL"},
51  {type::Maybe::RAW_PTR, "::armarx::aron::type::Maybe::RAW_PTR"},
52  {type::Maybe::SHARED_PTR, "::armarx::aron::type::Maybe::SHARED_PTR"},
53  {type::Maybe::UNIQUE_PTR, "::armarx::aron::type::Maybe::UNIQUE_PTR"}};
54  }
55 
57  typedef std::shared_ptr<GeneratorFactory> SerializerFactoryPtr;
58 
59  class Generator;
60  typedef std::shared_ptr<Generator> GeneratorPtr;
61 
62  class Generator
63  {
64  public:
66 
67  public:
68  // constructors
69  Generator() = delete;
70  Generator(const std::string&
71  instantiatedCppTypename /* used for templates, e.g. vector<string> */,
72  const std::string& classCppTypename /* the raw typename, e.g. vector<T> */,
73  const std::string& aronDataTypename,
74  const std::string& aronTypeTypename);
75  virtual ~Generator() = default;
76 
77  // public member methods
78  std::string getInstantiatedCppTypename() const;
79  std::string getFullInstantiatedCppTypename() const;
80  std::string getFullInstantiatedCppTypenameGenerator() const;
81 
82  std::string getClassCppTypename() const;
83  std::string getFullClassCppTypename() const;
84 
89 
90  // virtual override definitions
91  virtual std::vector<std::string> getRequiredIncludes() const;
92  virtual std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const;
93 
94  CppCtorPtr toCtor(const std::string&) const;
95  virtual std::pair<std::vector<std::pair<std::string, std::string>>, bool>
96  getCtorInitializers(const std::string&) const;
97  virtual CppBlockPtr getCtorBlock(const std::string&) const;
98 
99  CppCtorPtr toCopyCtor(const std::string&) const;
100  virtual std::pair<std::vector<std::pair<std::string, std::string>>, bool>
101  getCopyCtorInitializers(const std::string&) const;
102  virtual CppBlockPtr getCopyCtorBlock(const std::string&) const;
103 
104  CppMethodPtr toDtor(const std::string&) const;
105  virtual CppBlockPtr getDtorBlock(const std::string&) const;
106 
108  virtual CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const;
109 
111  virtual CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const;
112 
114  virtual CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor,
115  const std::string& cppAccessor,
116  const Path&,
117  std::string& variantAccessor) const = 0;
118 
119  CppMethodPtr toWriteMethod() const;
120  virtual CppBlockPtr getWriteBlock(const std::string& cppAccessor,
121  const Path&,
122  std::string& variantAccessor) const = 0;
123 
124  CppMethodPtr toReadMethod() const;
125  virtual CppBlockPtr getReadBlock(const std::string& cppAccessor,
126  const std::string& variantAccessor) const = 0;
127 
129  virtual CppBlockPtr getEqualsBlock(const std::string& cppAccessorThis,
130  const std::string& cppAccessorOther) const;
131 
132  virtual const type::Variant& getType() const = 0;
133 
134  // static methods
135  static std::string EscapeAccessor(const std::string&);
136 
137  static std::string ExtractCppTypename(const type::Variant&);
138  static std::vector<std::string> ExtractCppTypenames(const std::vector<type::VariantPtr>&);
139 
140  static std::unique_ptr<Generator> FromAronType(const type::Variant&);
141 
142  protected:
143  std::string nextEl() const;
144  std::string toPointerAccessor(const std::string&) const;
145 
146  std::string resolveMaybeAccessor(const std::string&) const;
147  std::string resolveMaybeGenerator(const std::string& args = "") const;
148  std::string resolveMaybeGeneratorWithSetter(const std::string&,
149  const std::string& args = "") const;
150 
151  CppBlockPtr resolveMaybeResetHardBlock(const CppBlockPtr&, const std::string&) const;
152  CppBlockPtr resolveMaybeResetSoftBlock(const CppBlockPtr&, const std::string&) const;
153  CppBlockPtr resolveMaybeWriteBlock(const CppBlockPtr&, const std::string&) const;
155  resolveMaybeReadBlock(const CppBlockPtr&, const std::string&, const std::string&) const;
157  resolveMaybeEqualsBlock(const CppBlockPtr&, const std::string&, const std::string&) const;
158 
159  protected:
160  static const std::string ARON_VARIABLE_PREFIX;
161 
162  static const std::string ARON_MAYBE_TYPE_ACCESSOR;
163  static const std::string ARON_PATH_ACCESSOR;
164  static const std::string ARON_READER_ACCESSOR;
165  static const std::string ARON_WRITER_ACCESSOR;
166  static const std::string ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR;
167  static const std::string ARON_VARIANT_RETURN_ACCESSOR;
168  static const std::string ARON_OTHER_ACCESSOR;
169 
170  private:
171  static const SerializerFactoryPtr FACTORY;
172 
173  std::string instantiatedCppTypename;
174  std::string classCppTypename;
175  std::string aronDataTypename;
176  std::string aronTypeTypename;
177  };
178 } // 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::Generator::ARON_MAYBE_TYPE_ACCESSOR
static const std::string ARON_MAYBE_TYPE_ACCESSOR
Definition: Generator.h:162
armarx::aron::codegenerator::cpp
Definition: AnyObject.cpp:28
armarx::aron::codegenerator::cpp::Generator::ARON_VARIANT_RETURN_ACCESSOR
static const std::string ARON_VARIANT_RETURN_ACCESSOR
Definition: Generator.h:167
armarx::aron::codegenerator::cpp::Generator::getFullClassCppTypename
std::string getFullClassCppTypename() const
Definition: Generator.cpp:168
CppMethod.h
armarx::aron::codegenerator::cpp::Generator::toCtor
CppCtorPtr toCtor(const std::string &) const
Definition: Generator.cpp:191
armarx::aron::codegenerator::cpp::Generator::getReadBlock
virtual CppBlockPtr getReadBlock(const std::string &cppAccessor, const std::string &variantAccessor) const =0
armarx::aron::codegenerator::cpp::Generator::getCopyCtorInitializers
virtual std::pair< std::vector< std::pair< std::string, std::string > >, bool > getCopyCtorInitializers(const std::string &) const
Definition: Generator.cpp:501
armarx::CppCtorPtr
std::shared_ptr< CppCtor > CppCtorPtr
Definition: CppCtor.h:31
armarx::aron::codegenerator::cpp::Generator::toSpecializedDataWriterMethod
CppMethodPtr toSpecializedDataWriterMethod(const WriterInfo &info) const
Definition: Generator.cpp:374
armarx::aron::codegenerator::cpp::Generator::FromAronType
static std::unique_ptr< Generator > FromAronType(const type::Variant &)
Definition: Generator.cpp:91
CppCtor.h
armarx::aron::codegenerator::cpp::Generator::EscapeAccessor
static std::string EscapeAccessor(const std::string &)
Definition: Generator.cpp:53
armarx::aron::codegenerator::cpp::Generator::resolveMaybeGeneratorWithSetter
std::string resolveMaybeGeneratorWithSetter(const std::string &, const std::string &args="") const
Definition: Generator.cpp:602
CppBlock.h
armarx::aron::codegenerator::cpp::SerializerFactoryPtr
std::shared_ptr< GeneratorFactory > SerializerFactoryPtr
Definition: Generator.h:56
armarx::aron::codegenerator::cpp::Generator::ARON_VARIABLE_PREFIX
static const std::string ARON_VARIABLE_PREFIX
Definition: Generator.h:160
armarx::aron::codegenerator::cpp::Generator::resolveMaybeAccessor
std::string resolveMaybeAccessor(const std::string &) const
Definition: Generator.cpp:563
armarx::CppBlockPtr
std::shared_ptr< CppBlock > CppBlockPtr
Definition: CppBlock.h:37
armarx::aron::codegenerator::cpp::Generator::ARON_WRITER_ACCESSOR
static const std::string ARON_WRITER_ACCESSOR
Definition: Generator.h:165
armarx::aron::codegenerator::cpp::Generator::toResetSoftMethod
CppMethodPtr toResetSoftMethod() const
Definition: Generator.cpp:247
armarx::aron::codegenerator::cpp::Generator::Generator
Generator()=delete
ReaderInfo.h
armarx::aron::codegenerator::cpp::Generator::getEqualsBlock
virtual CppBlockPtr getEqualsBlock(const std::string &cppAccessorThis, const std::string &cppAccessorOther) const
Definition: Generator.cpp:547
armarx::aron::codegenerator::cpp::Generator::toDtor
CppMethodPtr toDtor(const std::string &) const
Definition: Generator.cpp:229
armarx::aron::codegenerator::cpp::Generator::ARON_PATH_ACCESSOR
static const std::string ARON_PATH_ACCESSOR
Definition: Generator.h:163
armarx::aron::codegenerator::ReaderInfo
Definition: ReaderInfo.h:32
armarx::aron::codegenerator::cpp::Generator::toWriteTypeMethod
CppMethodPtr toWriteTypeMethod() const
Definition: Generator.cpp:281
armarx::aron::Path
The Path class.
Definition: Path.h:35
armarx::aron::type::Variant
The Variant class.
Definition: Variant.h:53
armarx::aron::codegenerator::cpp::Generator::resolveMaybeGenerator
std::string resolveMaybeGenerator(const std::string &args="") const
Definition: Generator.cpp:579
armarx::aron::codegenerator::cpp::Generator::toSpecializedStaticDataReaderMethod
CppMethodPtr toSpecializedStaticDataReaderMethod(const StaticReaderInfo &info) const
Definition: Generator.cpp:416
Variant.h
CppClass.h
armarx::aron::codegenerator::cpp::Generator::ARON_OTHER_ACCESSOR
static const std::string ARON_OTHER_ACCESSOR
Definition: Generator.h:168
armarx::aron::codegenerator::cpp::Generator::getFullInstantiatedCppTypenameGenerator
std::string getFullInstantiatedCppTypenameGenerator() const
Definition: Generator.cpp:139
armarx::aron::codegenerator::cpp::GeneratorFactory
Definition: Factory.h:37
armarx::aron::codegenerator::cpp::Generator::getCtorBlock
virtual CppBlockPtr getCtorBlock(const std::string &) const
Definition: Generator.cpp:495
armarx::aron::codegenerator::cpp::Generator::~Generator
virtual ~Generator()=default
CppField.h
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::cpp::Generator::toReadMethod
CppMethodPtr toReadMethod() const
Definition: Generator.cpp:339
armarx::aron::codegenerator::cpp::Generator::getPublicVariableDeclarations
virtual std::vector< CppFieldPtr > getPublicVariableDeclarations(const std::string &) const
Definition: Generator.cpp:482
WriterInfo.h
armarx::aron::codegenerator::cpp::Generator::getCopyCtorBlock
virtual CppBlockPtr getCopyCtorBlock(const std::string &) const
Definition: Generator.cpp:517
armarx::aron::codegenerator::cpp::Generator::toEqualsMethod
CppMethodPtr toEqualsMethod() const
Definition: Generator.cpp:456
armarx::aron::codegenerator::cpp::Generator::resolveMaybeReadBlock
CppBlockPtr resolveMaybeReadBlock(const CppBlockPtr &, const std::string &, const std::string &) const
Definition: Generator.cpp:711
armarx::aron::codegenerator::cpp::Generator::toPointerAccessor
std::string toPointerAccessor(const std::string &) const
Definition: Generator.cpp:633
armarx::aron::codegenerator::cpp::GeneratorPtr
std::shared_ptr< Generator > GeneratorPtr
Definition: Generator.h:59
armarx::aron::codegenerator::cpp::Generator::resolveMaybeResetHardBlock
CppBlockPtr resolveMaybeResetHardBlock(const CppBlockPtr &, const std::string &) const
Definition: Generator.cpp:655
armarx::aron::codegenerator::cpp::Generator::resolveMaybeEqualsBlock
CppBlockPtr resolveMaybeEqualsBlock(const CppBlockPtr &, const std::string &, const std::string &) const
Definition: Generator.cpp:735
Exception.h
armarx::aron::codegenerator::StaticReaderInfo
Definition: ReaderInfo.h:43
armarx::aron::similarity::FloatSimilarity::NONE
@ NONE
Definition: FloatSimilarity.h:14
armarx::aron::codegenerator::cpp::Generator::ExtractCppTypename
static std::string ExtractCppTypename(const type::Variant &)
Definition: Generator.cpp:72
armarx::aron::codegenerator::cpp::Generator::getDtorBlock
virtual CppBlockPtr getDtorBlock(const std::string &) const
Definition: Generator.cpp:523
armarx::aron::codegenerator::cpp::Generator::getType
virtual const type::Variant & getType() const =0
armarx::aron::codegenerator::cpp::Generator::getCtorInitializers
virtual std::pair< std::vector< std::pair< std::string, std::string > >, bool > getCtorInitializers(const std::string &) const
Definition: Generator.cpp:489
armarx::aron::codegenerator::cpp::Generator::ExtractCppTypenames
static std::vector< std::string > ExtractCppTypenames(const std::vector< type::VariantPtr > &)
Definition: Generator.cpp:80
armarx::aron::codegenerator::cpp::Generator::toSpecializedDataReaderMethod
CppMethodPtr toSpecializedDataReaderMethod(const ReaderInfo &info) const
Definition: Generator.cpp:395
armarx::aron::codegenerator::cpp::Generator::toSpecializedTypeWriterMethod
CppMethodPtr toSpecializedTypeWriterMethod(const WriterInfo &info) const
Definition: Generator.cpp:437
armarx::aron::codegenerator::cpp::Generator::nextEl
std::string nextEl() const
Definition: Generator.cpp:613
armarx::aron::codegenerator::cpp::Generator::resolveMaybeResetSoftBlock
CppBlockPtr resolveMaybeResetSoftBlock(const CppBlockPtr &, const std::string &) const
Definition: Generator.cpp:677
armarx::aron::codegenerator::cpp::Generator::ARON_READER_ACCESSOR
static const std::string ARON_READER_ACCESSOR
Definition: Generator.h:164
armarx::aron::codegenerator::cpp::Generator::getWriteBlock
virtual CppBlockPtr getWriteBlock(const std::string &cppAccessor, const Path &, std::string &variantAccessor) const =0
armarx::aron::codegenerator::cpp::Generator::toWriteMethod
CppMethodPtr toWriteMethod() const
Definition: Generator.cpp:308
armarx::aron::codegenerator::cpp::Generator::getResetHardBlock
virtual CppBlockPtr getResetHardBlock(const std::string &cppAccessor) const
Definition: Generator.cpp:529
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::Generator::getInstantiatedCppTypename
std::string getInstantiatedCppTypename() const
Definition: Generator.cpp:110
armarx::aron::codegenerator::cpp::Generator::toCopyCtor
CppCtorPtr toCopyCtor(const std::string &) const
Definition: Generator.cpp:209
armarx::aron::codegenerator::cpp::Generator::getResetSoftBlock
virtual CppBlockPtr getResetSoftBlock(const std::string &cppAccessor) const
Definition: Generator.cpp:538
armarx::aron::codegenerator::cpp::Generator::resolveMaybeWriteBlock
CppBlockPtr resolveMaybeWriteBlock(const CppBlockPtr &, const std::string &) const
Definition: Generator.cpp:694
armarx::aron::codegenerator::WriterInfo
Definition: WriterInfo.h:32
armarx::aron::codegenerator::cpp::conversion::Maybe2CppString
const std::map< type::Maybe, std::string > Maybe2CppString
Definition: Generator.h:48
armarx::aron::codegenerator::cpp::Generator::ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR
static const std::string ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR
Definition: Generator.h:166
armarx::aron::codegenerator::cpp::Generator::getWriteTypeBlock
virtual CppBlockPtr getWriteTypeBlock(const std::string &typeAccessor, const std::string &cppAccessor, const Path &, std::string &variantAccessor) const =0
armarx::aron::codegenerator::cpp::Generator::PointerType
GeneratorPtr PointerType
Definition: Generator.h:65