Loading TemplateTest/TemplateTest.pro +3 −0 Original line number Original line Diff line number Diff line Loading @@ -5,3 +5,6 @@ CONFIG -= qt SOURCES += \ SOURCES += \ main.cpp main.cpp HEADERS += \ ../src/Debug/JSONLogger.h TemplateTest/main.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -2369,6 +2369,8 @@ void testTraitsTuple(){ get<0>(t) = 2.5; get<0>(t) = 2.5; auto foo = static_cast<double&(*)(std::tuple<double>&)>(std::get<0>); auto foo = static_cast<double&(*)(std::tuple<double>&)>(std::get<0>); DBGVAR(foo(t), t); DBGVAR(foo(t), t); DBGVAR_JSON(t,t,t,t); DBGCHECK; } } /* /* Loading Loading @@ -2420,9 +2422,9 @@ int main() //testPrivateTrait(); //testPrivateTrait(); //testJson(); //testJson(); //testTestTraits(); //testTestTraits(); testTraitsAlgorithms(); //testTraitsAlgorithms(); //testNumericTraitsPerformance(); //testNumericTraitsPerformance(); //testTraitsTuple(); testTraitsTuple(); //testFactorial(); //testFactorial(); return 0; return 0; } } Loading Unstructured_mesh/Unstructured_mesh.pro +1 −0 Original line number Original line Diff line number Diff line Loading @@ -8,6 +8,7 @@ SOURCES += \ multiphaseflow.cpp multiphaseflow.cpp HEADERS += \ HEADERS += \ ../src/Debug/JSONLogger.h \ ../src/Macros/MacroForEach.h \ ../src/Macros/MacroForEach.h \ ../src/Debug/CSVLogger.h \ ../src/Debug/CSVLogger.h \ ../src/Debug/ConsoleLogger.h \ ../src/Debug/ConsoleLogger.h \ Loading src/Debug/Debug.h +26 −9 Original line number Original line Diff line number Diff line Loading @@ -6,6 +6,7 @@ #include <iostream> #include <iostream> #include "HTMLLogger.h" #include "HTMLLogger.h" #include "CSVLogger.h" #include "CSVLogger.h" #include "JSONLogger.h" #include "ConsoleLogger.h" #include "ConsoleLogger.h" #include <stdexcept> #include <stdexcept> /* /* Loading @@ -24,6 +25,12 @@ namespace dbg { static CSVLogger CSVDBGLog("DBG.csv"); static CSVLogger CSVDBGLog("DBG.csv"); return CSVDBGLog; return CSVDBGLog; } } static JSONLogger getJSONLogger(){ static JSONLogger JSONDBGLog("DBG.json"); return JSONDBGLog; } }; }; } } Loading @@ -47,7 +54,12 @@ abort();} // Macros using csv debug output // Macros using csv debug output #define DBGVAR_CSV(...) dbg::DBGStatics::getCSVLogger().writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__)) #define DBGVAR_CSV(...) dbg::DBGStatics::getCSVLogger().writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__)) #define DBGVARCOND_CSV(condition, ...) if(condition) DBGVAR_HTML(__VA_ARGS__) #define DBGVARCOND_CSV(condition, ...) if(condition) DBGVAR_CSV(__VA_ARGS__) // Macros using json debug output #define DBGVAR_JSON(...) dbg::DBGStatics::getJSONLogger().writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__)) #define DBGVARCOND_JSON(condition, ...) if(condition) DBGVAR_JSON(__VA_ARGS__) #define DBGCHECK ConsoleLogger<>::writeMessage("--", __LINE__, __FILE__, "check line") #define DBGCHECK ConsoleLogger<>::writeMessage("--", __LINE__, __FILE__, "check line") Loading @@ -67,13 +79,18 @@ abort();} #define DBGTRY(code) code #define DBGTRY(code) code #define HTMLDBGVAR(...) #define DBGVAR_HTML(...) #define DBGVARCOND_HTML(condition, ...) #define DBGVAR_CSV(...) #define DBGVARCOND_CSV(condition, ...) #define HTMLDBGCOND(condition, ...) #define DBGVAR_JSON(...) #define CSVDBGVAR(...) #define DBGVARCOND_JSON(condition, ...) #define CSVDBGCOND(condition, ...) #endif //UNDEBUG #endif //UNDEBUG #endif // DEBUG_H #endif // DEBUG_H src/Debug/JSONLogger.h 0 → 100644 +179 −0 Original line number Original line Diff line number Diff line #ifndef JSONLOGGER_H #define JSONLOGGER_H #include <string> #include <fstream> #include "VariableExport.h" #include <iostream> /** * @brief The JSONLogger class * has opened file to write log * if it opens existing file overwrites it. * in destructor it closes the file. */ class JSONLogger { std::string logFileName = ""; std::ofstream* logFile; int groupIndex = 0; bool firstWrite = true; public: JSONLogger(){logFile = nullptr;} /** * @brief JSONLogger * opens specified file for writing * @param fileName * */ JSONLogger(const char* fileName) : JSONLogger(){ logFileName = fileName; } ~JSONLogger(){ destroy(); } /** * @brief Create * opens specified file and writes headder and script in html * @param fileName */ void create(const char* fileName){ if (logFile){ logFile->close(); delete logFile; } firstWrite = true; logFile = new std::ofstream(fileName); (*logFile) << "{\n\"logs\":[\n"; } void destroy(){ if(logFile){ (*logFile) << "\n]\n}"; logFile->flush(); logFile->close(); delete logFile; } } template<typename VAR, typename ... REST> void writeVar(const char* name, const VAR& value, REST ... rest){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); writeVar(name, value); writeVar(rest...); } template<typename VAR> void writeVar(const char* name, const VAR& value){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); if (!firstWrite) { (*logFile) << ",\n"; } else { firstWrite = false; } (*logFile) << "\t{\n\t\t\"expr\" : \""<< name << "\",\n\t\t\"data\""; VariableExport<>::exportVariable(*logFile, value); (*logFile) << "\n}"; logFile->flush(); } template<typename VAR, typename ... REST> void writeVar(int line, std::string& cppFile, const char* name, const VAR& value, const REST& ... rest){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); if (!firstWrite) { (*logFile) << ",\n"; } else { firstWrite = false; } (*logFile) << "\t{" << "\n\t\t\"gInd\" : " << groupIndex << "," << "\n\t\t\"file\" : \"" << cppFile << "\"," << "\n\t\t\"line\" : " << line << "," << "\n\t\t\"expr\" : \""<< name << "\"," << "\n\t\t\"data\" : "; VariableExport<>::exportVariable(*logFile, value); (*logFile) << "\n\t}"; writeVar(line, cppFile, rest...); } template<typename VAR> void writeVar(int line, std::string& cppFile, const char* name, const VAR& value){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); if (!firstWrite) { (*logFile) << ",\n"; } else { firstWrite = false; } (*logFile) << "\t{" << "\n\t\t\"gInd\" : " << groupIndex << "," << "\n\t\t\"file\" : \"" << cppFile << "\"," << "\n\t\t\"line\" : " << line << "," << "\n\t\t\"expr\" : \""<< name << "\"," << "\n\t\t\"data\" : "; VariableExport<>::exportVariable(*logFile, value); (*logFile) << "\n\t}"; groupIndex++; } template<typename VAR_NAME, typename VAR, typename ... REST> void writeVar(int line, const char* cppFile, VAR_NAME name, VAR value, REST ... rest){ std::string file; int i = 0; while(cppFile[i] != '\0'){ if (cppFile[i] == '\\'){ file += "\\\\"; } else { file += cppFile[i]; } i++; } writeVar(line, file, name, value, rest...); } template<typename VAR_NAME, typename VAR> void writeVar(int line, const char* cppFile, VAR_NAME name, VAR value){ std::string file; int i = 0; while(cppFile[i] != '\0'){ if (cppFile[i] == '\\'){ file += "\\\\"; } else { file += cppFile[i]; } i++; } writeVar(line, file, name, value); } }; #endif // JSONLOGGER_H Loading
TemplateTest/TemplateTest.pro +3 −0 Original line number Original line Diff line number Diff line Loading @@ -5,3 +5,6 @@ CONFIG -= qt SOURCES += \ SOURCES += \ main.cpp main.cpp HEADERS += \ ../src/Debug/JSONLogger.h
TemplateTest/main.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -2369,6 +2369,8 @@ void testTraitsTuple(){ get<0>(t) = 2.5; get<0>(t) = 2.5; auto foo = static_cast<double&(*)(std::tuple<double>&)>(std::get<0>); auto foo = static_cast<double&(*)(std::tuple<double>&)>(std::get<0>); DBGVAR(foo(t), t); DBGVAR(foo(t), t); DBGVAR_JSON(t,t,t,t); DBGCHECK; } } /* /* Loading Loading @@ -2420,9 +2422,9 @@ int main() //testPrivateTrait(); //testPrivateTrait(); //testJson(); //testJson(); //testTestTraits(); //testTestTraits(); testTraitsAlgorithms(); //testTraitsAlgorithms(); //testNumericTraitsPerformance(); //testNumericTraitsPerformance(); //testTraitsTuple(); testTraitsTuple(); //testFactorial(); //testFactorial(); return 0; return 0; } } Loading
Unstructured_mesh/Unstructured_mesh.pro +1 −0 Original line number Original line Diff line number Diff line Loading @@ -8,6 +8,7 @@ SOURCES += \ multiphaseflow.cpp multiphaseflow.cpp HEADERS += \ HEADERS += \ ../src/Debug/JSONLogger.h \ ../src/Macros/MacroForEach.h \ ../src/Macros/MacroForEach.h \ ../src/Debug/CSVLogger.h \ ../src/Debug/CSVLogger.h \ ../src/Debug/ConsoleLogger.h \ ../src/Debug/ConsoleLogger.h \ Loading
src/Debug/Debug.h +26 −9 Original line number Original line Diff line number Diff line Loading @@ -6,6 +6,7 @@ #include <iostream> #include <iostream> #include "HTMLLogger.h" #include "HTMLLogger.h" #include "CSVLogger.h" #include "CSVLogger.h" #include "JSONLogger.h" #include "ConsoleLogger.h" #include "ConsoleLogger.h" #include <stdexcept> #include <stdexcept> /* /* Loading @@ -24,6 +25,12 @@ namespace dbg { static CSVLogger CSVDBGLog("DBG.csv"); static CSVLogger CSVDBGLog("DBG.csv"); return CSVDBGLog; return CSVDBGLog; } } static JSONLogger getJSONLogger(){ static JSONLogger JSONDBGLog("DBG.json"); return JSONDBGLog; } }; }; } } Loading @@ -47,7 +54,12 @@ abort();} // Macros using csv debug output // Macros using csv debug output #define DBGVAR_CSV(...) dbg::DBGStatics::getCSVLogger().writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__)) #define DBGVAR_CSV(...) dbg::DBGStatics::getCSVLogger().writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__)) #define DBGVARCOND_CSV(condition, ...) if(condition) DBGVAR_HTML(__VA_ARGS__) #define DBGVARCOND_CSV(condition, ...) if(condition) DBGVAR_CSV(__VA_ARGS__) // Macros using json debug output #define DBGVAR_JSON(...) dbg::DBGStatics::getJSONLogger().writeVar(__LINE__, __FILE__, FOR_EACH(STRVAR, __VA_ARGS__)) #define DBGVARCOND_JSON(condition, ...) if(condition) DBGVAR_JSON(__VA_ARGS__) #define DBGCHECK ConsoleLogger<>::writeMessage("--", __LINE__, __FILE__, "check line") #define DBGCHECK ConsoleLogger<>::writeMessage("--", __LINE__, __FILE__, "check line") Loading @@ -67,13 +79,18 @@ abort();} #define DBGTRY(code) code #define DBGTRY(code) code #define HTMLDBGVAR(...) #define DBGVAR_HTML(...) #define DBGVARCOND_HTML(condition, ...) #define DBGVAR_CSV(...) #define DBGVARCOND_CSV(condition, ...) #define HTMLDBGCOND(condition, ...) #define DBGVAR_JSON(...) #define CSVDBGVAR(...) #define DBGVARCOND_JSON(condition, ...) #define CSVDBGCOND(condition, ...) #endif //UNDEBUG #endif //UNDEBUG #endif // DEBUG_H #endif // DEBUG_H
src/Debug/JSONLogger.h 0 → 100644 +179 −0 Original line number Original line Diff line number Diff line #ifndef JSONLOGGER_H #define JSONLOGGER_H #include <string> #include <fstream> #include "VariableExport.h" #include <iostream> /** * @brief The JSONLogger class * has opened file to write log * if it opens existing file overwrites it. * in destructor it closes the file. */ class JSONLogger { std::string logFileName = ""; std::ofstream* logFile; int groupIndex = 0; bool firstWrite = true; public: JSONLogger(){logFile = nullptr;} /** * @brief JSONLogger * opens specified file for writing * @param fileName * */ JSONLogger(const char* fileName) : JSONLogger(){ logFileName = fileName; } ~JSONLogger(){ destroy(); } /** * @brief Create * opens specified file and writes headder and script in html * @param fileName */ void create(const char* fileName){ if (logFile){ logFile->close(); delete logFile; } firstWrite = true; logFile = new std::ofstream(fileName); (*logFile) << "{\n\"logs\":[\n"; } void destroy(){ if(logFile){ (*logFile) << "\n]\n}"; logFile->flush(); logFile->close(); delete logFile; } } template<typename VAR, typename ... REST> void writeVar(const char* name, const VAR& value, REST ... rest){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); writeVar(name, value); writeVar(rest...); } template<typename VAR> void writeVar(const char* name, const VAR& value){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); if (!firstWrite) { (*logFile) << ",\n"; } else { firstWrite = false; } (*logFile) << "\t{\n\t\t\"expr\" : \""<< name << "\",\n\t\t\"data\""; VariableExport<>::exportVariable(*logFile, value); (*logFile) << "\n}"; logFile->flush(); } template<typename VAR, typename ... REST> void writeVar(int line, std::string& cppFile, const char* name, const VAR& value, const REST& ... rest){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); if (!firstWrite) { (*logFile) << ",\n"; } else { firstWrite = false; } (*logFile) << "\t{" << "\n\t\t\"gInd\" : " << groupIndex << "," << "\n\t\t\"file\" : \"" << cppFile << "\"," << "\n\t\t\"line\" : " << line << "," << "\n\t\t\"expr\" : \""<< name << "\"," << "\n\t\t\"data\" : "; VariableExport<>::exportVariable(*logFile, value); (*logFile) << "\n\t}"; writeVar(line, cppFile, rest...); } template<typename VAR> void writeVar(int line, std::string& cppFile, const char* name, const VAR& value){ // create file if not logFile is nullptr if (!logFile) create(logFileName.c_str()); if (!firstWrite) { (*logFile) << ",\n"; } else { firstWrite = false; } (*logFile) << "\t{" << "\n\t\t\"gInd\" : " << groupIndex << "," << "\n\t\t\"file\" : \"" << cppFile << "\"," << "\n\t\t\"line\" : " << line << "," << "\n\t\t\"expr\" : \""<< name << "\"," << "\n\t\t\"data\" : "; VariableExport<>::exportVariable(*logFile, value); (*logFile) << "\n\t}"; groupIndex++; } template<typename VAR_NAME, typename VAR, typename ... REST> void writeVar(int line, const char* cppFile, VAR_NAME name, VAR value, REST ... rest){ std::string file; int i = 0; while(cppFile[i] != '\0'){ if (cppFile[i] == '\\'){ file += "\\\\"; } else { file += cppFile[i]; } i++; } writeVar(line, file, name, value, rest...); } template<typename VAR_NAME, typename VAR> void writeVar(int line, const char* cppFile, VAR_NAME name, VAR value){ std::string file; int i = 0; while(cppFile[i] != '\0'){ if (cppFile[i] == '\\'){ file += "\\\\"; } else { file += cppFile[i]; } i++; } writeVar(line, file, name, value); } }; #endif // JSONLOGGER_H