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
56 class GeneratorFactory;
57 typedef std::shared_ptr<GeneratorFactory> SerializerFactoryPtr;
58
59 class Generator;
60 typedef std::shared_ptr<Generator> GeneratorPtr;
61
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;
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
120 virtual CppBlockPtr getWriteBlock(const std::string& cppAccessor,
121 const Path&,
122 std::string& variantAccessor) const = 0;
123
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;
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
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:168
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
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:53
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:72
static const std::string ARON_READER_ACCESSOR
Definition Generator.h:164
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 > &)
Definition Generator.cpp:80
CppMethodPtr toSpecializedDataWriterMethod(const WriterInfo &info) const
static const std::string ARON_PATH_ACCESSOR
Definition Generator.h:163
virtual CppBlockPtr getCopyCtorBlock(const std::string &) const
virtual CppBlockPtr getDtorBlock(const std::string &) const
static const std::string ARON_VARIABLE_PREFIX
Definition Generator.h:160
static const std::string ARON_WRITER_ACCESSOR
Definition Generator.h:165
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 &)
Definition Generator.cpp:91
static const std::string ARON_VARIANT_RETURN_ACCESSOR
Definition Generator.h:167
static const std::string ARON_TEMPLATE_INSTANTIATIONS_ACCESSOR
Definition Generator.h:166
static const std::string ARON_MAYBE_TYPE_ACCESSOR
Definition Generator.h:162
CppBlockPtr resolveMaybeWriteBlock(const CppBlockPtr &, const std::string &) const
The Variant class.
Definition Variant.h:54
const std::map< type::Maybe, std::string > Maybe2CppString
Definition Generator.h:48
std::shared_ptr< GeneratorFactory > SerializerFactoryPtr
Definition Generator.h:57
std::shared_ptr< Generator > GeneratorPtr
Definition Generator.h:60
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