PhoenixGenerator  3.4.0
Generate code from template files and projects in C++, Rust, Python and wrapped C++ to Python
Loading...
Searching...
No Matches
CppTraitConfigStream.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
8#include "type_utils.h"
10
15
18
20
23void CppTraitConfigStream::headerExtraInclude(std::ofstream & fs, const GeneratorMode & mode) const{
24 if(!mode.enableConfigStream){return;}
25 fs << "#include \"phoenix_config_stream.h\"" << std::endl;
26}
27
29
33void CppTraitConfigStream::publicMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
34 if(!mode.enableConfigStream){return;}
35
36}
37
39
43void CppTraitConfigStream::publicMethodImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
44 if(!mode.enableConfigStream){return;}
45
46}
47
49
53void CppTraitConfigStream::protectedMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
54
55}
56
58
62void CppTraitConfigStream::protectedMethodImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
63
64}
65
67
71void CppTraitConfigStream::privateMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
72
73}
74
76
80void CppTraitConfigStream::privateMethodImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
81
82}
83
85
89void CppTraitConfigStream::classExtraFunctionDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
90 if(!mode.enableConfigStream){return;}
91 PString name(classConfig.getName());
92 if(classConfig.getIsEnum()){
93 name = name + "::" + name;
94 }
95 fs << "template<>" << std::endl;
96 fs << "bool phoenix_config_stream<"<<name<<">(ConfigNodeIter & iter, "<<name<<" & data, const GenericConfigCheck * checker);" << std::endl << std::endl;
97}
98
100
104void CppTraitConfigStream::classExtraFunctionImplementation(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
105 if(!mode.enableConfigStream){return;}
106
107 PString name(classConfig.getName());
108 // PString fullName(classConfig.getFullName());
109 fs << "///Load and save the given " << name << " depending on the ConfigNodeIter mode (interface with PhoenixConfigStream)" << std::endl;
110 fs << "/**\t@param[out] iter : ConfigNodeIter to be used to load and save the configuration" << std::endl;
111 fs << " * \t@param[out] data : " << name << " to load or save" << std::endl;
112 fs << " * \t@param checker : check caracteristics of the given " << name << " (eg: boundaries or size)" << std::endl;
113 fs << " * \t@return true on success, false otherwise" << std::endl;
114 fs << "*/" << std::endl;
115 const PVecString & listTemplate = classConfig.getListTemplate();
116 if(listTemplate.size() == 0LU){
117 fs << "template<>" << std::endl;
118 }else{
119 fs << mode.templateDeclaration;
120 }
121 if(classConfig.getIsEnum()){
122 name = name + "::" + name;
123 }
124
125 fs << "bool phoenix_config_stream<"<<name << mode.defTemplate<<">(ConfigNodeIter & iter, "<<name << mode.defTemplate<<" & data, const GenericConfigCheck * checker){" << std::endl;
126 fs << "\tbool b(true);" << std::endl;
127 if(classConfig.getIsEnum()){
128 fs << "\tPString value = iter->getString();" << std::endl;
129 fs << "\tif(!fromString(data, value)){" << std::endl;
130 fs << "\t\t*iter.getOut() << \"phoenix_config_stream<"<<name << mode.defTemplate<<"> : cannot load enum '"<<name<<"' with value '\"<<value<<\"'\" << std::endl;" << std::endl;
131 fs << "\t\tb = false;" << std::endl;
132 fs << "\t}" << std::endl;
133 }else{
134 const PVecClassAttribute & vecAttr(classConfig.getListAttribute());
135 for(PVecClassAttribute::const_iterator it(vecAttr.begin()); it != vecAttr.end(); ++it){
136 //TODO : add a call to the ConfigCheck when it will be available in the pdata
137 PString attrName(it->getName().firstToUpper()), attrKey(it->getName().toSnakeCase());
138 if(getIsPointerType(it->getType())){
139 //phoenix_config_stream has a dedicated overload for T*& : go through a local variable since the getter returns the pointer by value, not by reference
140 PString pointeeType(it->getType().eraseFirstLastChar(" \n\t*")), localVar(it->getName().toSnakeCase());
141 fs << "\t" << pointeeType << " * " << localVar << "(data.get" << attrName << "());" << std::endl;
142 fs << "\tb &= phoenix_config_stream(iter, " << localVar << ", \"" << attrKey << "\", checker);" << std::endl;
143 fs << "\tdata.set" << attrName << "(" << localVar << ");" << std::endl;
144 }else{
145 fs << "\tb &= phoenix_config_stream<"<<it->getType()<<">(iter, data.get"<<attrName<<"(), \""<<attrKey<<"\", checker);" << std::endl;
146 }
147 }
148 }
149 fs << "\treturn b;" << std::endl;
150 fs << "}" << std::endl << std::endl;
151}
152
153
154
155
std::vector< PClassAttribute > PVecClassAttribute
Definition PDataConfig.h:13
virtual ~CppTraitConfigStream()
Desctructor of CppTraitConfigStream.
virtual void protectedMethodDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of protected methods.
virtual void publicMethodDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of public methods.
virtual void protectedMethodImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of protected methods.
CppTraitConfigStream()
Consctructor of CppTraitConfigStream.
virtual void headerExtraInclude(std::ofstream &fs, const GeneratorMode &mode) const
Add extra include on the header.
virtual void classExtraFunctionImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of extra functions.
virtual void publicMethodImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of public methods.
virtual void privateMethodImplementation(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Implementation of private methods.
virtual void privateMethodDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of private methods.
virtual void classExtraFunctionDeclaration(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode) const
Declaration of extra functions.
Class to describe a basic class.
const std::vector< PClassAttribute > & getListAttribute() const
Returns the list of attributes of the 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.
bool enableConfigStream
True to enable config stream interface generator.
bool getIsPointerType(const PString &varType)
Say if a given type is a pointer type (i.e. it ends with a '*').