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 <optional>
29#include <string>
30#include <vector>
31
37
38#include <RobotAPI/interface/aron.h>
43
45{
46
47 namespace conversion
48 {
49 const std::map<type::Maybe, std::string> Maybe2CppString = {
50 {type::Maybe::NONE, "::armarx::aron::type::Maybe::NONE"},
51 {type::Maybe::OPTIONAL, "::armarx::aron::type::Maybe::OPTIONAL"},
52 {type::Maybe::RAW_PTR, "::armarx::aron::type::Maybe::RAW_PTR"},
53 {type::Maybe::SHARED_PTR, "::armarx::aron::type::Maybe::SHARED_PTR"},
54 {type::Maybe::UNIQUE_PTR, "::armarx::aron::type::Maybe::UNIQUE_PTR"}};
55 }
56
57 class GeneratorFactory;
58 typedef std::shared_ptr<GeneratorFactory> SerializerFactoryPtr;
59
60 class Generator;
61 typedef std::shared_ptr<Generator> GeneratorPtr;
62
64 {
65 public:
67
68 public:
69 // constructors
70 Generator() = delete;
71 Generator(const std::string&
72 instantiatedCppTypename /* used for templates, e.g. vector<string> */,
73 const std::string& classCppTypename /* the raw typename, e.g. vector<T> */,
74 const std::string& aronDataTypename,
75 const std::string& aronTypeTypename);
76 virtual ~Generator() = default;
77
78 // public member methods
79 std::string getInstantiatedCppTypename() const;
80 std::string getFullInstantiatedCppTypename() const;
82
83 std::string getClassCppTypename() const;
84 std::string getFullClassCppTypename() const;
85
90
91 // virtual override definitions
92 virtual std::vector<std::string> getRequiredIncludes() const;
93 virtual std::vector<CppFieldPtr> getPublicVariableDeclarations(const std::string&) const;
94
95 CppCtorPtr toCtor(const std::string&) const;
96 virtual std::pair<std::vector<std::pair<std::string, std::string>>, bool>
97 getCtorInitializers(const std::string&) const;
98 virtual CppBlockPtr getCtorBlock(const std::string&) const;
99
100 CppCtorPtr toCopyCtor(const std::string&) const;
101 virtual std::pair<std::vector<std::pair<std::string, std::string>>, bool>
102 getCopyCtorInitializers(const std::string&) const;
103 virtual CppBlockPtr getCopyCtorBlock(const std::string&) const;
104
105 CppMethodPtr toDtor(const std::string&) const;
106 virtual CppBlockPtr getDtorBlock(const std::string&) const;
107
109 virtual CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const;
110
112 virtual CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const;
113
115 virtual CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor,
116 const std::string& cppAccessor,
117 const Path&,
118 std::string& variantAccessor) const = 0;
119
121 virtual CppBlockPtr getWriteBlock(const std::string& cppAccessor,
122 const Path&,
123 std::string& variantAccessor) const = 0;
124
126 virtual CppBlockPtr getReadBlock(const std::string& cppAccessor,
127 const std::string& variantAccessor) const = 0;
128
130 virtual CppBlockPtr getEqualsBlock(const std::string& cppAccessorThis,
131 const std::string& cppAccessorOther) const;
132
133 virtual const type::Variant& getType() const = 0;
134
135 // static methods
136 static std::string EscapeAccessor(const std::string&);
137 static std::string OptionalFloatLiteral(const std::optional<float>&);
138
139 static std::string ExtractCppTypename(const type::Variant&);
140 static std::vector<std::string> ExtractCppTypenames(const std::vector<type::VariantPtr>&);
141
142 static std::unique_ptr<Generator> FromAronType(const type::Variant&);
143
144 protected:
145 std::string nextEl() const;
146 std::string toPointerAccessor(const std::string&) const;
147
148 std::string resolveMaybeAccessor(const std::string&) const;
149 std::string resolveMaybeGenerator(const std::string& args = "") const;
150 std::string resolveMaybeGeneratorWithSetter(const std::string&,
151 const std::string& args = "") const;
152
153 CppBlockPtr resolveMaybeResetHardBlock(const CppBlockPtr&, const std::string&) const;
154 CppBlockPtr resolveMaybeResetSoftBlock(const CppBlockPtr&, const std::string&) const;
155 CppBlockPtr resolveMaybeWriteBlock(const CppBlockPtr&, const std::string&) const;
157 resolveMaybeReadBlock(const CppBlockPtr&, const std::string&, const std::string&) const;
159 resolveMaybeEqualsBlock(const CppBlockPtr&, const std::string&, const std::string&) const;
160
161 protected:
162 static const std::string ARON_VARIABLE_PREFIX;
163
164 static const std::string ARON_MAYBE_TYPE_ACCESSOR;
165 static const std::string ARON_PATH_ACCESSOR;
166 static const std::string ARON_READER_ACCESSOR;
167 static const std::string ARON_WRITER_ACCESSOR;
169 static const std::string ARON_VARIANT_RETURN_ACCESSOR;
170 static const std::string ARON_OTHER_ACCESSOR;
171
172 private:
173 static const SerializerFactoryPtr FACTORY;
174
175 std::string instantiatedCppTypename;
176 std::string classCppTypename;
177 std::string aronDataTypename;
178 std::string aronTypeTypename;
179 };
180} // namespace armarx::aron::codegenerator::cpp
The Path class.
Definition Path.h:36
virtual std::pair< std::vector< std::pair< std::string, std::string > >, bool > getCtorInitializers(const std::string &) const
static const std::string ARON_OTHER_ACCESSOR
Definition Generator.h:170
virtual CppBlockPtr getWriteTypeBlock(const std::string &typeAccessor, const std::string &cppAccessor, const Path &, std::string &variantAccessor) const =0
CppCtorPtr toCopyCtor(const std::string &) const
virtual std::vector< CppFieldPtr > getPublicVariableDeclarations(const std::string &) const
std::string resolveMaybeAccessor(const std::string &) const
CppMethodPtr toSpecializedDataReaderMethod(const ReaderInfo &info) const
CppBlockPtr resolveMaybeResetHardBlock(const CppBlockPtr &, const std::string &) const
static std::string OptionalFloatLiteral(const std::optional< float > &)
Definition Generator.cpp:74
CppBlockPtr resolveMaybeEqualsBlock(const CppBlockPtr &, const std::string &, const std::string &) const
CppBlockPtr resolveMaybeReadBlock(const CppBlockPtr &, const std::string &, const std::string &) const
std::string resolveMaybeGeneratorWithSetter(const std::string &, const std::string &args="") const
static std::string EscapeAccessor(const std::string &)
Definition Generator.cpp:55
virtual CppBlockPtr getWriteBlock(const std::string &cppAccessor, const Path &, std::string &variantAccessor) const =0
std::string getFullInstantiatedCppTypenameGenerator() const
virtual CppBlockPtr getResetSoftBlock(const std::string &cppAccessor) const
CppBlockPtr resolveMaybeResetSoftBlock(const CppBlockPtr &, const std::string &) const
CppCtorPtr toCtor(const std::string &) const
virtual const type::Variant & getType() const =0
virtual std::pair< std::vector< std::pair< std::string, std::string > >, bool > getCopyCtorInitializers(const std::string &) const
virtual CppBlockPtr getReadBlock(const std::string &cppAccessor, const std::string &variantAccessor) const =0
std::string toPointerAccessor(const std::string &) const
static std::string ExtractCppTypename(const type::Variant &)
Definition Generator.cpp:93
static const std::string ARON_READER_ACCESSOR
Definition Generator.h:166
std::string resolveMaybeGenerator(const std::string &args="") const
virtual std::vector< std::string > getRequiredIncludes() const
virtual CppBlockPtr getResetHardBlock(const std::string &cppAccessor) const
virtual CppBlockPtr getEqualsBlock(const std::string &cppAccessorThis, const std::string &cppAccessorOther) const
CppMethodPtr toDtor(const std::string &) const
static std::vector< std::string > ExtractCppTypenames(const std::vector< type::VariantPtr > &)
CppMethodPtr toSpecializedDataWriterMethod(const WriterInfo &info) const
static const std::string ARON_PATH_ACCESSOR
Definition Generator.h:165
virtual CppBlockPtr getCopyCtorBlock(const std::string &) const
virtual CppBlockPtr getDtorBlock(const std::string &) const
static const std::string ARON_VARIABLE_PREFIX
Definition Generator.h:162
static const std::string ARON_WRITER_ACCESSOR
Definition Generator.h:167
CppMethodPtr toSpecializedTypeWriterMethod(const WriterInfo &info) const
CppMethodPtr toSpecializedStaticDataReaderMethod(const StaticReaderInfo &info) const
virtual CppBlockPtr getCtorBlock(const std::string &) const
static std::unique_ptr< Generator > FromAronType(const type::Variant &)
static const std::string ARON_VARIANT_RETURN_ACCESSOR
Definition Generator.h:169
static const std::string ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR
Definition Generator.h:168
static const std::string ARON_MAYBE_TYPE_ACCESSOR
Definition Generator.h:164
CppBlockPtr resolveMaybeWriteBlock(const CppBlockPtr &, const std::string &) const
The Variant class.
Definition Variant.h:55
const std::map< type::Maybe, std::string > Maybe2CppString
Definition Generator.h:49
std::shared_ptr< GeneratorFactory > SerializerFactoryPtr
Definition Generator.h:58
std::shared_ptr< Generator > GeneratorPtr
Definition Generator.h:61
std::shared_ptr< CppBlock > CppBlockPtr
Definition CppBlock.h:37
std::shared_ptr< CppCtor > CppCtorPtr
Definition CppCtor.h:31
std::shared_ptr< CppMethod > CppMethodPtr
Definition CppMethod.h:31