#pragma once #if defined(__GNUC__) || defined(__clang__) #define FUNC_NAME_ __PRETTY_FUNCTION__ #elif defined(_MSC_VER) #define FUNC_NAME_ __FUNCSIG__ #else #define FUNC_NAME_ "" #endif #define LOG_POS std::string(__func__) + std::string(" ") + __FILE__ + std::string(":") + std::to_string(__LINE__) + " " + std::string(FUNC_NAME_) #define LOG_POS_SIMPLE std::string(__func__) + std::string(" ") + __FILE__ + std::string(":") + std::to_string(__LINE__) #define VAR_STR(P) ("[" + std::string(#P) + ":" + Psc::to_string(P) + std::string("], ")) #define VAR_STR_1(P1) VAR_STR(P1) #define VAR_STR_2(P1, P2) VAR_STR_1(P1) + VAR_STR(P2) #define VAR_STR_3(P1, P2, P3) VAR_STR_2(P1, P2) + VAR_STR(P3) #define VAR_STR_4(P1, P2, P3, P4) VAR_STR_3(P1, P2, P3) + VAR_STR(P4) #define VAR_STR_5(P1, P2, P3, P4, P5) VAR_STR_4(P1, P2, P3, P4) + VAR_STR(P5) #define VAR_STR_6(P1, P2, P3, P4, P5, P6) VAR_STR_5(P1, P2, P3, P4, P5) + VAR_STR(P6) #define VAR_STR_7(P1, P2, P3, P4, P5, P6, P7) VAR_STR_6(P1, P2, P3, P4, P5, P6) + VAR_STR(P7) #define VAR_STR_8(P1, P2, P3, P4, P5, P6, P7, P8) VAR_STR_7(P1, P2, P3, P4, P5, P6, P7) + VAR_STR(P8) #define VAR_STR_9(P1, P2, P3, P4, P5, P6, P7, P8, P9) VAR_STR_8(P1, P2, P3, P4, P5, P6, P7, P8) + VAR_STR(P9) #define VAR_STR_10(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) VAR_STR_9(P1, P2, P3, P4, P5, P6, P7, P8, P9) + VAR_STR(P10)