PhoenixGenerator  2.0.4
Set of tools to generate code
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 : CeCILL-C
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
76 if(classConfig.getIsEnum()){
77 name = name + "::" + name;
78 }
79
80 const PVecString & listTemplate = classConfig.getListTemplate();
81 if(listTemplate.size() != 0lu){
82 fs << "///Get the name of the class " << name << std::endl;
83 fs << "/**\t@return name of the class " << name << std::endl;
84 fs << "*/" << std::endl;
85 fs << mode.templateDeclaration;
86 fs << "std::string phoenix_getTypeName<"<<name << mode.defTemplate <<" >(){" << std::endl;
87 fs << "\treturn \""<<name<<"\"";
88 fs << " + \"<\"";
89 for(PVecString::const_iterator it(listTemplate.begin()); it != listTemplate.end(); ++it){
90 fs << " + phoenix_getTypeToStr<"<<it->split(' ').back()<<">()";
91 }
92 fs << " + \">\"";
93 fs << ";" << std::endl;
94 fs << "}" << std::endl << std::endl;
95
96 }else{
97 fs << "template<>" << std::endl;
98 fs << "std::string phoenix_getTypeName<"<<name<<">();" << std::endl << std::endl;
99 }
100}
101
103
107void CppTraitTypeStream::classExtraFunctionImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
108 if(!mode.enableTypeStream){return;}
109 PString name(classConfig.getName());
110 fs << "///Get the name of the class " << name << " for PhoenixTypeStream" << std::endl;
111 fs << "/**\t@return name of the class " << name << " for PhoenixTypeStream" << std::endl;
112 fs << "*/" << std::endl;
113 if(classConfig.getIsEnum()){
114 name = name + "::" + name;
115 }
116 const PVecString & listTemplate = classConfig.getListTemplate();
117 if(listTemplate.size() == 0lu){
118 fs << "template<>" << std::endl;
119 }else{
120 fs << mode.templateDeclaration;
121 }
122 fs << "std::string phoenix_getTypeName<"<<name << mode.defTemplate <<" >(){" << std::endl;
123 fs << "\treturn \""<<name<<"\"";
124 if(listTemplate.size() != 0lu){
125 fs << " + \"<\"";
126 for(PVecString::const_iterator it(listTemplate.begin()); it != listTemplate.end(); ++it){
127 fs << " + phoenix_getTypeToStr<"<<it->split(' ').back()<<">()";
128 }
129 fs << " + \">\"";
130 }
131 fs << ";" << std::endl;
132 fs << "}" << std::endl << std::endl;
133}
134
136
140void CppTraitTypeStream::testFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
141 if(!mode.enableTypeStream){return;}
142 PString name(classConfig.getName());
143 fs << "///Check TypeStream of class "+name+"\n";
144 fs << "void check"+name+"TypeStream(){\n";
145 if(classConfig.getIsEnum()){
146 name = name + "::" + name;
147 }
148 fs << "\t"<<mode.assertCall<<"(phoenix_getTypeToStr<"<<name<<">() == \""<<name<<"\");\n";
149 fs << "}\n\n";
150}
151
153
157void CppTraitTypeStream::testCallFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
158 if(!mode.enableTypeStream){return;}
159 PString name(classConfig.getName());
160 fs << "\tcheck"+name+"TypeStream();\n";
161}
162
163
164
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.
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.