PhoenixGenerator  2.2.0
Set of tools to generate code
Loading...
Searching...
No Matches
nanobind_generator.h File Reference
#include "ProjectParam.h"
+ Include dependency graph for nanobind_generator.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool generator_nanobind_class (const PNanobindTraitBackendManager &manager, const PPath &sourceFile, const PPath &headerFile, const PVecClassConfig &vecClassConfig, const GeneratorMode &mode)
 
bool generator_nanobind_full (const PNanobindTraitBackendManager &manager, const ProjectParam &projectParam)
 Generate the full sources and related unit tests from configuration.
 
bool generator_nanobind_test (const PNanobindTraitBackendManager &manager, const PPath &outputTestDir, const std::vector< PClassConfig > &vecClassConfig, const PString &projectName, const PPath &baseFileName, const GeneratorMode &mode)
 

Function Documentation

◆ generator_nanobind_class()

bool generator_nanobind_class ( const PNanobindTraitBackendManager & manager,
const PPath & sourceFile,
const PPath & headerFile,
const PVecClassConfig & vecClassConfig,
const GeneratorMode & mode )

◆ generator_nanobind_full()

bool generator_nanobind_full ( const PNanobindTraitBackendManager & manager,
const ProjectParam & projectParam )

Generate the full sources and related unit tests from configuration.

Parameters
manager: PTraitBackendManager which handles all trait backend
projectParam: description of classes and how and where to generate sources and test
Returns
true on success, false otherwise

Definition at line 83 of file nanobind_generator.cpp.

84{
85 bool b(true);
86 b &= projectParam.outputSourceDir.createDirectory();
87 b &= projectParam.outputTestDir.createDirectory();
88 const PVecDataConfig & vecDataConfig = projectParam.vecDataConfig;
89
90 for(const PDataConfig & config : vecDataConfig){
91 const PVecPath & extraInclude = config.getVecInclude();
92 PPath baseFileName = config.getFileName().getFileName().eraseExtension();
93 PPath headerFile = projectParam.outputSourceDir / PPath(baseFileName + ".h");
94 PPath sourceFile = projectParam.outputSourceDir / PPath(baseFileName + "_binding.cpp");
95 if(!generator_nanobind_class(manager, baseFileName, sourceFile, headerFile, extraInclude, config.getVecClassConfig(), projectParam.mode)){
96 std::cerr << termRed() << "generator_nanobind_full : cannot generate nanobind sources at '"<<projectParam.outputSourceDir<<"'" << termDefault() << std::endl;
97 b = false; //best effort strategy
98 }
99 PPath outputCurrentTestDir = projectParam.outputTestDir / PPath("TEST_PYTHON_BINDINGS");
100 if(!generator_nanobind_test(manager, outputCurrentTestDir, config.getVecClassConfig(), projectParam.name, baseFileName, projectParam.mode)){
101 std::cerr << termRed() << "generator_nanobind_full : cannot generate nanobind tests at '"<<projectParam.outputTestDir<<"'" << termDefault() << std::endl;
102 b = false; //best effort strategy
103 }
104 }
105 return b;
106}
std::vector< PDataConfig > PVecDataConfig
Definition PDataConfig.h:48
Class to describe a basic class.
Definition PDataConfig.h:17
bool generator_nanobind_test(const PNanobindTraitBackendManager &manager, const PPath &outputTestDir, const std::vector< PClassConfig > &vecClassConfig, const PString &projectName, const PPath &baseFileName, const GeneratorMode &mode)
bool generator_nanobind_class(const PNanobindTraitBackendManager &manager, PPath &baseFileName, const PPath &sourceFile, const PPath &headerFile, const PVecPath &extraInclude, const PVecClassConfig &vecClassConfig, const GeneratorMode &mode)
Generate nanobind wrapper class.
GeneratorMode mode
Mode to be used to generate the project.
PPath outputTestDir
Output path of the unit tests.
PVecDataConfig vecDataConfig
Configuration of classes to be generated.
PString name
Name of the project.
PPath outputSourceDir
Output path of the sources.

References generator_nanobind_class(), generator_nanobind_test(), ProjectParam::mode, ProjectParam::name, ProjectParam::outputSourceDir, ProjectParam::outputTestDir, and ProjectParam::vecDataConfig.

Referenced by generateNanobindClassesFull().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generator_nanobind_test()

bool generator_nanobind_test ( const PNanobindTraitBackendManager & manager,
const PPath & outputTestDir,
const std::vector< PClassConfig > & vecClassConfig,
const PString & projectName,
const PPath & baseFileName,
const GeneratorMode & mode )

Definition at line 61 of file nanobind_generator.cpp.

61 {
62 for(std::vector<PClassConfig>::const_iterator it(vecClassConfig.begin()); it != vecClassConfig.end(); ++it){
63 PString name = it->getName();
64 PPath outputCurrentTestDir(outputTestDir + PString("/TEST_") + name.toUpper() + "_BINDINGS");
65 if(!outputCurrentTestDir.createDirectory()){
66 std::cerr << "generator_class_test : cannot create TEST directory '"<<outputCurrentTestDir<<"'" << std::endl;
67 return false;
68 }
69 std::ofstream fs;
70 if(!openFileStream(fs, PPath(outputCurrentTestDir + PString("/test_") + name + "_binding.py"))){return false;}
71 manager.headerTestInclude(fs, mode, baseFileName);
72 manager.testFunction(fs, *it, mode, baseFileName);
73 fs.close();
74 }
75 return true;
76}
virtual void headerTestInclude(std::ofstream &fs, const GeneratorMode &mode, const PString &baseFileName) const
Add extra include on the test header.
virtual void testFunction(std::ofstream &fs, const PClassConfig &classConfig, const GeneratorMode &mode, const PString &baseFileName) const
Implementation of test function.

References PNanobindTraitBackendManager::headerTestInclude(), and PNanobindTraitBackendManager::testFunction().

Referenced by generator_nanobind_full().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: