eRPC Generator (erpcgen)  Rev. 1.11.0
NXP Semiconductors
Generator.hpp
1 /*
2  * Copyright (c) 2014-2015, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef _EMBEDDED_RPC__GENERATOR_H_
11 #define _EMBEDDED_RPC__GENERATOR_H_
12 
13 #include "InterfaceDefinition.hpp"
14 #include "cpptempl.hpp"
15 #include "types/AliasType.hpp"
16 #include "types/ArrayType.hpp"
17 #include "types/BuiltinType.hpp"
18 #include "types/ConstType.hpp"
19 #include "types/DataType.hpp"
20 #include "types/EnumMember.hpp"
21 #include "types/EnumType.hpp"
22 #include "types/Function.hpp"
23 #include "types/FunctionType.hpp"
24 #include "types/Group.hpp"
25 #include "types/Interface.hpp"
26 #include "types/ListType.hpp"
27 #include "types/StructMember.hpp"
28 #include "types/StructType.hpp"
29 #include "types/UnionType.hpp"
30 #include "types/VoidType.hpp"
31 
32 #include <filesystem>
33 #include <fstream>
34 #include <string>
35 
37 // Classes
39 
40 namespace erpcgen {
41 
45 class Generator
46 {
47 public:
48  enum generator_type_t
49  {
50  kC,
51  kPython
52  };
54  typedef std::vector<DataType *> datatype_vector_t;
63  Generator(InterfaceDefinition *def, generator_type_t generatorType);
64 
68  virtual ~Generator() {}
69 
73  virtual void generate() = 0;
74 
75 protected:
76  uint16_t m_idlCrc16;
77  cpptempl::data_map m_templateData;
80  std::vector<Group *> m_groups;
81  std::set<std::string> reserverdWords;
82  generator_type_t m_generatorType;
83  std::filesystem::path m_outputDirectory;
93  void openFile(std::ofstream &fileOutputStream, const std::string &fileName);
94 
105  void generateOutputFile(const std::string &fileName, const std::string &templateName,
106  cpptempl::data_map &templateData, const char *const kParseFile);
107 
115  std::string stripExtension(const std::string &filename);
116 
128  const std::string &referenceName, const std::string &annName);
129 
140  const std::string &referenceName);
141 
151  StructMember *findParamReferencedFrom(const StructType::member_vector_t &members, const std::string &referenceName);
152 
158  std::string getTime();
159 
163  void findGroupDataTypes();
164 
175  virtual DataType *findChildDataType(std::set<DataType *> &dataTypes, DataType *dataType);
176 
182  virtual void setBinaryList(StructMember *structMember) { (void)structMember; };
183 
194  virtual cpptempl::data_map makeGroupSymbolsTemplateData(Group *group) = 0;
195 
208  virtual cpptempl::data_map getFunctionTemplateData(Group *group, Function *fn) = 0;
209 
216  virtual void setTemplateComments(Symbol *symbol, cpptempl::data_map &symbolInfo) = 0;
217 
228  cpptempl::data_list makeGroupInterfacesTemplateData(Group *group);
229 
239  virtual void generateOutputFiles(const std::string &fileNameExtension) = 0;
240 
246  void generateGroupOutputFiles(Group *group);
247 
252 
260  cpptempl::data_list makeGroupIncludesTemplateData(Group *group);
261 
269  Group *getGroupByName(const std::string &name);
270 
280  bool isMemberDataTypeUsingForwardDeclaration(Symbol *topSymbol, Symbol *memberSymbol);
281 
291  std::string getOutputName(Symbol *symbol, bool check = true);
292 
298  Annotation::program_lang_t getAnnotationLang();
299 
308  Annotation *findAnnotation(Symbol *symbol, const std::string &name);
309 
318  std::vector<Annotation *> getAnnotations(Symbol *symbol, const std::string &name);
319 
328  Value *getAnnValue(Symbol *symbol, const std::string &name);
329 
338  std::string getAnnStringValue(Symbol *symbol, const std::string &name);
339 
348  datatype_vector_t getDataTypesFromSymbolScope(SymbolScope *scope, DataType::data_type_t datatype);
349 
350 private:
361  cpptempl::data_list getFunctionsTemplateData(Group *group, Interface *iface);
362 };
363 
364 } // namespace erpcgen
365 
366 #endif // _EMBEDDED_RPC__GENERATOR_H_
Collects all definitions from an IDL.
Definition: InterfaceDefinition.hpp:31
virtual void setTemplateComments(Symbol *symbol, cpptempl::data_map &symbolInfo)=0
This function will get symbol comments and convert to language specific ones.
std::set< std::string > reserverdWords
Definition: Generator.hpp:81
Group * getGroupByName(const std::string &name)
This function returns pointer to a group with specified name.
Definition: Generator.cpp:172
Member of a struct.
Definition: StructMember.hpp:38
datatype_vector_t getDataTypesFromSymbolScope(SymbolScope *scope, DataType::data_type_t datatype)
This function returns vector of data types from scope.
Definition: Generator.cpp:629
Annotation class.
Definition: Annotation.hpp:28
virtual cpptempl::data_map getFunctionTemplateData(Group *group, Function *fn)=0
This function return interface function template data.
generator_type_t m_generatorType
Definition: Generator.hpp:82
std::vector< Group * > m_groups
Definition: Generator.hpp:80
uint16_t m_idlCrc16
Definition: Generator.hpp:76
virtual cpptempl::data_map makeGroupSymbolsTemplateData(Group *group)=0
This function sets group symbols template data.
StructMember * findParamReferencedFromAnn(const StructType::member_vector_t &members, const std::string &referenceName, const std::string &annName)
This function will return pointer to function parameter/structure member where given reference name i...
Definition: Generator.cpp:237
virtual ~Generator()
Destructor.
Definition: Generator.hpp:68
Value * getAnnValue(Symbol *symbol, const std::string &name)
This function search and returns Value object for given annotation name.
Definition: Generator.cpp:604
cpptempl::data_list makeGroupInterfacesTemplateData(Group *group)
This function sets interfaces template data.
Definition: Generator.cpp:417
Function declaration.
Definition: Function.hpp:117
std::vector< DataType * > datatype_vector_t
Definition: Generator.hpp:54
StructMember * findParamReferencedFromUnion(const StructType::member_vector_t &members, const std::string &referenceName)
This function will return pointer to function parameter/structure member where given reference name i...
Definition: Generator.cpp:251
Base class for all named declarations in the IDL.
Definition: Symbol.hpp:28
std::string stripExtension(const std::string &filename)
Definition: Generator.cpp:224
std::vector< Annotation * > getAnnotations(Symbol *symbol, const std::string &name)
Find annotations matching name in the annotation list.
Definition: Generator.cpp:599
std::filesystem::path m_outputDirectory
Definition: Generator.hpp:83
std::string getAnnStringValue(Symbol *symbol, const std::string &name)
This function search and returns string for given annotation name.
Definition: Generator.cpp:609
Abstract base class for values of arbitrary types.
Definition: Value.hpp:27
cpptempl::data_list makeGroupIncludesTemplateData(Group *group)
This function sets template data for group include directives.
Definition: Generator.cpp:500
cpptempl::data_map m_templateData
Definition: Generator.hpp:77
void makeIncludesTemplateData()
This function sets template data for include directives from an IDL file.
Definition: Generator.cpp:486
std::string getTime()
This function return actual time string representation.
Definition: Generator.cpp:295
A scoped namespace containing symbols.
Definition: SymbolScope.hpp:28
Abstract code generator base class.
Definition: Generator.hpp:45
Annotation::program_lang_t getAnnotationLang()
Returns Generator flag used for annotation.
Definition: Generator.cpp:580
void openFile(std::ofstream &fileOutputStream, const std::string &fileName)
This function open file.
Definition: Generator.cpp:185
Generator(InterfaceDefinition *def, generator_type_t generatorType)
Constructor.
Definition: Generator.cpp:32
Base class for data types.
Definition: DataType.hpp:26
An interface that contains functions.
Definition: Group.hpp:28
StructMember * findParamReferencedFrom(const StructType::member_vector_t &members, const std::string &referenceName)
This function will return pointer to function parameter/structure member where given reference name i...
Definition: Generator.cpp:281
std::vector< StructMember * > member_vector_t
Definition: StructType.hpp:32
bool isMemberDataTypeUsingForwardDeclaration(Symbol *topSymbol, Symbol *memberSymbol)
This function returns information if member data type symbol is using forward declared type...
Definition: Generator.cpp:536
data_type_t
Supported data types.
Definition: DataType.hpp:32
Annotation * findAnnotation(Symbol *symbol, const std::string &name)
Find annotation in the annotation list.
Definition: Generator.cpp:594
virtual void generateOutputFiles(const std::string &fileNameExtension)=0
This function generates output files.
void findGroupDataTypes()
This function finds all group&#39;s data types.
Definition: Generator.cpp:370
An interface that contains functions.
Definition: Interface.hpp:29
SymbolScope * m_globals
Definition: Generator.hpp:79
void generateOutputFile(const std::string &fileName, const std::string &templateName, cpptempl::data_map &templateData, const char *const kParseFile)
This function open file, generate output into this file and close this file.
Definition: Generator.cpp:205
virtual void setBinaryList(StructMember *structMember)
This function transform binary data type to list and set annotation to it.
Definition: Generator.hpp:182
void generateGroupOutputFiles(Group *group)
This function generates output files for defined interfaces.
Definition: Generator.cpp:458
virtual void generate()=0
Generate output files.
Definition: AstNode.hpp:26
InterfaceDefinition * m_def
Definition: Generator.hpp:78
virtual DataType * findChildDataType(std::set< DataType * > &dataTypes, DataType *dataType)
This function finds child data types of specified data type.
Definition: Generator.cpp:303