bool ResourceFile::write (Array<File>& filesCreated, const int maxFileSize) { const File headerFile (project.getBinaryDataHeaderFile()); { MemoryOutputStream mo; if (! (writeHeader (mo) && FileHelpers::overwriteFileWithNewDataIfDifferent (headerFile, mo))) return false; filesCreated.add (headerFile); } int i = 0; int fileIndex = 0; for (;;) { File cpp (project.getBinaryDataCppFile (fileIndex)); MemoryOutputStream mo; if (! (writeCpp (mo, headerFile, i, maxFileSize) && FileHelpers::overwriteFileWithNewDataIfDifferent (cpp, mo))) return false; filesCreated.add (cpp); ++fileIndex; if (i >= files.size()) break; } return true; }
Result ResourceFile::write (Array<File>& filesCreated, const int maxFileSize) { const File headerFile (project.getBinaryDataHeaderFile()); { MemoryOutputStream mo; Result r (writeHeader (mo)); if (r.failed()) return r; if (! FileHelpers::overwriteFileWithNewDataIfDifferent (headerFile, mo)) return Result::fail ("Can't write to file: " + headerFile.getFullPathName()); filesCreated.add (headerFile); } int i = 0; int fileIndex = 0; for (;;) { File cpp (project.getBinaryDataCppFile (fileIndex)); MemoryOutputStream mo; Result r (writeCpp (mo, headerFile, i, maxFileSize)); if (r.failed()) return r; if (! FileHelpers::overwriteFileWithNewDataIfDifferent (cpp, mo)) return Result::fail ("Can't write to file: " + cpp.getFullPathName()); filesCreated.add (cpp); ++fileIndex; if (i >= files.size()) break; } return Result::ok(); }
bool ResourceFile::write (const File& cppFile, Array<File>& filesCreated) { const File headerFile (cppFile.withFileExtension (".h")); { MemoryOutputStream mo; if (! (writeHeader (mo) && FileHelpers::overwriteFileWithNewDataIfDifferent (headerFile, mo))) return false; filesCreated.add (headerFile); } int i = 0; int fileIndex = 0; for (;;) { File cpp (cppFile); if (fileIndex > 0) cpp = cpp.getSiblingFile (cppFile.getFileNameWithoutExtension() + String (fileIndex + 1)) .withFileExtension (cppFile.getFileExtension()); MemoryOutputStream mo; if (! (writeCpp (mo, headerFile, i) && FileHelpers::overwriteFileWithNewDataIfDifferent (cpp, mo))) return false; filesCreated.add (cpp); ++fileIndex; if (i >= files.size()) break; } return true; }
void D3D11InterfaceWriter::write(const string &_name, const string &input, const string &outputCpp, const string &outputHeader) { name = _name; auto lines = util::getFileLines(input, 3); string fullDesc; for (const string &s : lines) fullDesc += s + "\n"; fullDesc = util::remove(fullDesc, "/* [annotation] */"); fullDesc = util::remove(fullDesc, "/* [annotation][out] */"); fullDesc = util::remove(fullDesc, "/* [annotation][in] */"); fullDesc = util::remove(fullDesc, "/* [annotation][out][in] */"); fullDesc = util::remove(fullDesc, "/* [in] */"); fullDesc = util::remove(fullDesc, "__inout_opt"); fullDesc = util::remove(fullDesc, "_In_opt_"); fullDesc = util::remove(fullDesc, "__in_opt"); fullDesc = util::remove(fullDesc, "_Out_opt_"); fullDesc = util::remove(fullDesc, "_In_"); fullDesc = util::remove(fullDesc, "_Out_"); fullDesc = util::remove(fullDesc, "_Out_"); fullDesc = util::remove(fullDesc, "__in"); fullDesc = util::remove(fullDesc, "__out"); fullDesc = util::remove(fullDesc, "_opt"); fullDesc = util::remove(fullDesc, ") = 0;"); auto functionDescriptions = util::split(fullDesc, "virtual "); functions.clear(); for (const string &funcDesc : functionDescriptions) { auto funcParts = util::split(wordify(funcDesc), '('); auto header = funcParts[0]; auto params = util::split(funcParts[1], ','); D3D11InterfaceFunction func; func.returnType = util::split(header, ' ')[0]; func.name = util::split(header, ' ')[2]; for (const string &p : params) { //const D3D11_SHADER_RESOURCE_VIEW_DESC * pDesc auto words = util::split(p, ' '); FunctionParameter newParam; for (int i = 0; i < words.size() - 1; i++) newParam.type += words[i] + ' '; newParam.name = words.back(); func.params.push_back(newParam); } functions.push_back(func); } writeCpp(outputCpp); writeHeader(outputHeader); }