PhoenixFileGenerator  0.2.0
Set of tools to generate code
Loading...
Searching...
No Matches
main.cpp File Reference
#include <iostream>
#include "OptionParser.h"
#include "header_generator.h"
#include "parserClassConfig.h"
#include "generator_class_cpp.h"
#include "simple_project_generator.h"
#include "CppTraitFromString.h"
#include "CppTraitSetter.h"
#include "CppTraitGetter.h"
#include "CppTraitCopy.h"
#include "CppTraitTypeStream.h"
#include "CppTraitDataStream.h"
#include "CppTraitConfigStream.h"
#include "CppTraitCheckStream.h"
+ Include dependency graph for main.cpp:

Go to the source code of this file.

Functions

bool createClass (const OptionMode &classMode)
 Class creator.
 
bool createHeaderSource (const OptionMode &sourceMode)
 Create header and source file name.
 
OptionParser createOptionParser ()
 Create the OptionParser of this program.
 
bool createProjectSource (const OptionMode &projectMode)
 Create project.
 
int main (int argc, char **argv)
 

Function Documentation

◆ createClass()

bool createClass ( const OptionMode & classMode)

Class creator.

Parameters
classMode: set of argument passe in the class mode
Returns
true on success, false otherwise

Definition at line 78 of file main.cpp.

78 {
79 PString className;
80 PVecString templatedef;
81
82 ProjectParam projectParam;
83 projectParam.configFile = PPath("");
84 projectParam.outputTestDir = PPath("./");
85 projectParam.outputSourceDir = PPath("./");
86 classMode.getValue(className, "name");
87 classMode.getValue(projectParam.configFile, "config");
88 classMode.getValue(templatedef, "template");
89 classMode.getValue(projectParam.outputTestDir, "testdir");
90 classMode.getValue(projectParam.outputSourceDir, "outputpath");
91
92 GeneratorMode & mode = projectParam.mode;
93 mode.enableSetter = true;
94 mode.enableGetter = true;
95 mode.enableCopy = true;
96 mode.enableFromString = true;
97 mode.enableDataStream = classMode.isOptionExist("datastream");
98 mode.enableTypeStream = classMode.isOptionExist("typestream");
99 mode.enableConfigStream = classMode.isOptionExist("configstream");
100 mode.enableCheckStream = classMode.isOptionExist("checkstream");
101 mode.enableUnitTest = classMode.isOptionExist("tests");
102
103 PTraitBackendManager manager;
104 manager.addTraitBackend<CppTraitFromString>();
105 manager.addTraitBackend<CppTraitCopy>();
106 manager.addTraitBackend<CppTraitSetter>();
107 manager.addTraitBackend<CppTraitGetter>();
108 manager.addTraitBackend<CppTraitTypeStream>();
109 manager.addTraitBackend<CppTraitDataStream>();
110 manager.addTraitBackend<CppTraitConfigStream>();
111 manager.addTraitBackend<CppTraitCheckStream>();
112 if(projectParam.configFile != ""){
113 if(className == ""){
114 className = projectParam.configFile.getFileName().eraseExtension();
115 }
116 classMode.getValue(projectParam.name, "projectname");
117
118 PDataConfig dataConfig;
119 dataConfig.setFileName(projectParam.configFile);
120 if(!parserClassConfig(dataConfig.getVecClassConfig(), dataConfig.getVecInclude(), projectParam.configFile)){
121 std::cerr << "createClass : unexisting configuration file '"<<projectParam.configFile<<"'" << std::endl;
122 return false;
123 }
124 projectParam.vecDataConfig.push_back(dataConfig);
125 if(!generator_class_full(manager, projectParam)){
126 std::cerr << "createClass : can't save file '"<<className<<"'[.h or .cpp] with configuration file '"<<projectParam.configFile<<"'" << std::endl;
127 return false;
128 }
129 }else{
130 if(className == ""){
131 std::cerr << "createClass : cannot create class with empty name" << std::endl;
132 return false;
133 }
134 PVecClassConfig vecClassConfig;
135 PClassConfig classConfig;
136 classConfig.setName(className);
137
138 classConfig.setListTemplate(templatedef);
139
140 vecClassConfig.push_back(classConfig);
141 if(!generator_class_cpp(manager, vecClassConfig, projectParam.outputSourceDir, className, projectParam.mode, PVecPath())){
142 std::cerr << "createClass : can't save file '"<<className<<"'[.h or .cpp]" << std::endl;
143 return false;
144 }
145 }
146 return true;
147}

Referenced by main().

+ Here is the caller graph for this function:

◆ createHeaderSource()

bool createHeaderSource ( const OptionMode & sourceMode)

Create header and source file name.

Parameters
sourceMode: arguments passed in the source mode
Returns
true on success, false otherwise

Definition at line 153 of file main.cpp.

153 {
154 PPath headerName("header");
155 sourceMode.getValue(headerName, "name");
156 PPath baseHeaderName(headerName.eraseExtension());
157 saveHeaderSourceFile(PPath(baseHeaderName + ".h"), PPath(baseHeaderName + ".cpp"));
158 return true;
159}

Referenced by main().

+ Here is the caller graph for this function:

◆ createOptionParser()

OptionParser createOptionParser ( )

Create the OptionParser of this program.

Returns
OptionParser of this program

Definition at line 29 of file main.cpp.

29 {
30 OptionParser parser(true, __PROGRAM_VERSION__);
31 parser.setExampleLongOption("phoenix_filegenerator class --name=some_source");
32 parser.setExampleShortOption("phoenix_filegenerator class -n some_source");
33
34 //Class mode
35 parser.addMode("class");
36 PString defaultClassName("");
37 parser.addOption("name", "n", defaultClassName, "base name of the file to be created");
38 PVecString templateDef;
39 parser.addOption("template", "t", templateDef, "template definition of the class (ex: 'typename T' or 'typename T' 'typename U', etc)");
40 parser.addOption("config", "c", OptionType::FILENAME, false, "Configuration file to create a class (*.pdata)");
41 parser.addOption("datastream", "s", OptionType::NONE, false, "Enable PhoenixDataStream use to save/load generated class automatically");
42 parser.addOption("typestream", "y", OptionType::NONE, false, "Enable PhoenixTypeStream use to get the class name automatically");
43 parser.addOption("configstream", "f", OptionType::NONE, false, "Enable PhoenixConfigStream use to get the class name automatically");
44 parser.addOption("checkstream", "e", OptionType::NONE, false, "Enable PhoenixCheckStream use to get the class name automatically");
45 parser.addOption("tests", "u", OptionType::NONE, false, "Enable unit tests generation");
46 PString templateDir(".");
47 parser.addOption("testdir", "d", templateDir, "Directory for the unit tests");
48 parser.addOption("outputpath", "o", templateDir, "Path where the generated source files will be saved");
49 PString projectName("project_name");
50 parser.addOption("projectname", "r", projectName, "Name of the project to generate class in with unit test (will be used for unit test linking)");
51 parser.closeMode();
52
53 //Source mode
54 parser.addMode("source");
55 parser.addOption("name", "n", OptionType::STRING, true, "base name of the file to be created");
56 parser.closeMode();
57
58 //Project mode
59 parser.addMode("project");
60 parser.addOption("description", "d", OptionType::FILENAME, false, "description of the full project (*.toml)");
61 parser.addOption("config", "c", OptionType::FILENAME, false, "Configuration file to create a class (*.pdata)");
62 PString baseProjectType("SimpleCpp");
63 parser.addOption("type", "t", baseProjectType, "Type of the project to generate");
64 parser.addOption("pythonwrapper", "w", OptionType::NONE, false, "Enable python wrapper generation");
65 parser.addOption("datastream", "s", OptionType::NONE, false, "Enable PhoenixDataStream use to save/load generated class automatically");
66 parser.addOption("typestream", "y", OptionType::NONE, false, "Enable PhoenixTypeStream use to get the class name automatically");
67 parser.addOption("configstream", "f", OptionType::NONE, false, "Enable PhoenixConfigStream use to get the class name automatically");
68 parser.addOption("checkstream", "e", OptionType::NONE, false, "Enable PhoenixCheckStream use to get the class name automatically");
69 parser.addOption("tests", "u", OptionType::NONE, false, "Enable unit tests generation");
70 parser.closeMode();
71 return parser;
72}

Referenced by main().

+ Here is the caller graph for this function:

◆ createProjectSource()

bool createProjectSource ( const OptionMode & projectMode)

Create project.

Parameters
projectMode: arguments passed in the project mode
Returns
true on success, false otherwise

Definition at line 165 of file main.cpp.

165 {
166 PPath descriptionFile;
167 PVecPath vecConfigFile;
168 PString projectType;
169 projectMode.getValue(vecConfigFile, "config");
170 projectMode.getValue(descriptionFile, "description");
171 projectMode.getValue(projectType, "type");
172
173 GeneratorMode mode;
174 mode.enableDataStream = projectMode.isOptionExist("datastream");
175 mode.enableTypeStream = projectMode.isOptionExist("typestream");
176 mode.enableConfigStream = projectMode.isOptionExist("configstream");
177 mode.enableCheckStream = projectMode.isOptionExist("checkstream");
178 mode.enableUnitTest = projectMode.isOptionExist("tests");
179
180 return simple_project_generator(descriptionFile, vecConfigFile, projectType, mode);
181}

Referenced by main().

+ Here is the caller graph for this function:

◆ main()

int main ( int argc,
char ** argv )

Definition at line 183 of file main.cpp.

183 {
184 OptionParser parser = createOptionParser();
185 parser.parseArgument(argc, argv);
186
187 const OptionMode & classMode = parser.getMode("class");
188 const OptionMode & sourceMode = parser.getMode("source");
189 const OptionMode & projectMode = parser.getMode("project");
190 bool b(true);
191 if(classMode.isParsed()){ //We are using the class mode
192 b &= createClass(classMode);
193 }
194 if(sourceMode.isParsed()){ //We are using the source mode
195 b &= createHeaderSource(sourceMode);
196 }
197 if(projectMode.isParsed()){ //We are using the project mode
198 b &= createProjectSource(projectMode);
199 }
200 return b - 1;
201}
bool createProjectSource(const OptionMode &projectMode)
Create project.
Definition main.cpp:165
bool createClass(const OptionMode &classMode)
Class creator.
Definition main.cpp:78
OptionParser createOptionParser()
Create the OptionParser of this program.
Definition main.cpp:29
bool createHeaderSource(const OptionMode &sourceMode)
Create header and source file name.
Definition main.cpp:153

References createClass(), createHeaderSource(), createOptionParser(), and createProjectSource().

+ Here is the call graph for this function: