Commit 78199b66 authored by Tomáš Jakubec's avatar Tomáš Jakubec
Browse files

Merge branch 'refs/heads/master' into Multiphase_Flow_RKM

parents 5f785540 61f939d7
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -5,3 +5,6 @@ CONFIG -= qt


SOURCES += \
SOURCES += \
        main.cpp
        main.cpp

HEADERS += \
    ../src/Debug/JSONLogger.h
+4 −2
Original line number Original line Diff line number Diff line
@@ -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;
}
}


/*
/*
@@ -2420,9 +2422,9 @@ int main()
    //testPrivateTrait();
    //testPrivateTrait();
    //testJson();
    //testJson();
    //testTestTraits();
    //testTestTraits();
    testTraitsAlgorithms();
    //testTraitsAlgorithms();
    //testNumericTraitsPerformance();
    //testNumericTraitsPerformance();
    //testTraitsTuple();
    testTraitsTuple();
    //testFactorial();
    //testFactorial();
    return 0;
    return 0;
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -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 \
+26 −9
Original line number Original line Diff line number Diff line
@@ -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>
/*
/*
@@ -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;
        }

    };
    };
}
}


@@ -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")
@@ -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