PhoenixGenerator  3.4.0
Generate code from template files and projects in C++, Rust, Python and wrapped C++ to Python
Loading...
Searching...
No Matches
CppTraitTypeStream.cpp
Go to the documentation of this file.
1
2/***************************************
3 Auteur : Pierre Aubert
4 Mail : pierre.aubert@lapp.in2p3.fr
5 Licence : LGPL-3.0-only
6****************************************/
7
9
14
17
19
22void CppTraitTypeStream::headerExtraInclude(std::ofstream & fs, const GeneratorMode & mode) const{
23 if(!mode.enableTypeStream){return;}
24 fs << "#include \"phoenix_type_stream.h\"" << std::endl;
25}
26
28
32void CppTraitTypeStream::protectedMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
33 if(!mode.enableTypeStream){return;}
34
35}
36
38
42void CppTraitTypeStream::protectedMethodImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
43 if(!mode.enableTypeStream){return;}
44
45}
46
48
52void CppTraitTypeStream::privateMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
53 if(!mode.enableTypeStream){return;}
54
55}
56
58
62void CppTraitTypeStream::privateMethodImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
63 if(!mode.enableTypeStream){return;}
64
65}
66
68
72void CppTraitTypeStream::classExtraFunctionDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
73 if(!mode.enableTypeStream){return;}
74 PString name(classConfig.getName());
75 PString fullName(classConfig.getFullName());
76
77 if(classConfig.getIsEnum()){
78 name = name + "::" + name;
79 }
80
81 const PVecString & listTemplate = classConfig.getListTemplate();
82 if(listTemplate.size() != 0LU){
83 fs << "///Get the name of the class " << name << std::endl;
84 fs << "/**\t@return name of the class " << name << std::endl;
85 fs << "*/" << std::endl;
86 fs << mode.templateDeclaration;
87 fs << "std::string phoenix_getTypeName<"<<fullName << mode.defTemplate <<" >(){" << std::endl;
88 fs << "\treturn \""<<name<<"\"";
89 fs << " + \"<\"";
90 for(PVecString::const_iterator it(listTemplate.begin()); it != listTemplate.end(); ++it){
91 fs << " + phoenix_getTypeToStr<"<<it->split(' ').back()<<">()";
92 }
93 fs << " + \">\"";
94 fs << ";" << std::endl;
95 fs << "}" << std::endl << std::endl;
96
97 }else{
98 fs << "template<>" << std::endl;
99 //Enums are generated without their namespace (namespace Name{enum Name}), so they keep Name::Name
100 fs << "std::string phoenix_getTypeName<"<<(classConfig.getIsEnum() ? name : fullName)<<">();" << std::endl << std::endl;
101 }
102}
103
105
109void CppTraitTypeStream::classExtraFunctionImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
110 if(!mode.enableTypeStream){return;}
111 PString name(classConfig.getName());
112 PString fullName(classConfig.getFullName());
113 fs << "///Get the name of the class " << name << " for PhoenixTypeStream" << std::endl;
114 fs << "/**\t@return name of the class " << name << " for PhoenixTypeStream" << std::endl;
115 fs << "*/" << std::endl;
116 if(classConfig.getIsEnum()){
117 //Enums are generated without their namespace (namespace Name{enum Name}), so they keep Name::Name
118 name = name + "::" + name;
119 fullName = name;
120 }
121 const PVecString & listTemplate = classConfig.getListTemplate();
122 if(listTemplate.size() == 0LU){
123 fs << "template<>" << std::endl;
124 }else{
125 fs << mode.templateDeclaration;
126 }
127 fs << "std::string phoenix_getTypeName<"<<fullName << mode.defTemplate <<" >(){" << std::endl;
128 fs << "\treturn \""<<name<<"\"";
129 if(listTemplate.size() != 0LU){
130 fs << " + \"<\"";
131 for(PVecString::const_iterator it(listTemplate.begin()); it != listTemplate.end(); ++it){
132 fs << " + phoenix_getTypeToStr<"<<it->split(' ').back()<<">()";
133 }
134 fs << " + \">\"";
135 }
136 fs << ";" << std::endl;
137 fs << "}" << std::endl << std::endl;
138}
139
141
145void CppTraitTypeStream::testFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
146 if(!mode.enableTypeStream){return;}
147 PString name(classConfig.getName());
148 fs << "///Check TypeStream of class "+name+"\n";
149 fs << "void check"+name+"TypeStream(){\n";
150 if(classConfig.getIsEnum()){
151 name = name + "::" + name;
152 }
153 fs << "\t"<<mode.assertCall<<"(phoenix_getTypeToStr<"<<name<<">() == \""<<name<<"\");\n";
154 fs << "}\n\n";
155}
156
158
162void CppTraitTypeStream::testCallFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
163 if(!mode.enableTypeStream){return;}
164 PString name(classConfig.getName());
165 fs << "\tcheck"+name+"TypeStream();\n";
166}
167
168
169
virtual ~CppTraitTypeStream()
Desctructor of CppTraitTypeStream.
virtual void privateMethodDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of private methods.
virtual void classExtraFunctionImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of extra functions.
virtual void protectedMethodImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of protected methods.
virtual void privateMethodImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of private methods.
virtual void classExtraFunctionDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of extra functions.
virtual void testCallFunction(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Call of the test function.
virtual void testFunction(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of test function.
virtual void protectedMethodDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of protected methods.
virtual void headerExtraInclude(std::ofstream &fs, const GeneratorMode &mode) const
Add extra include on the header.
CppTraitTypeStream()
Consctructor of CppTraitTypeStream.
Class to describe a basic class.
PString getFullName() const
Returns the full name of the class including the namespace.
const PVecString & getListTemplate() const
Returns the list of the template of the class.
const PString & getName() const
Returns the class name.
bool getIsEnum() const
Say if the current PClassConfig is an enum.
All the genertor modes.
PString defTemplate
Template definition for the class header.
PString templateDeclaration
Template declaration of the method implementation.
PString assertCall
Assert to be used.
bool enableTypeStream
True to enable type stream interface generator.