diff --git a/3rdpart/assert.h b/3rdpart/assert.h index 1be5eebe..9b7254ff 100644 --- a/3rdpart/assert.h +++ b/3rdpart/assert.h @@ -21,12 +21,12 @@ #ifdef __cplusplus extern "C" { #endif - extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line); + extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line, const char *str); #ifdef __cplusplus } #endif - #define assert(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__) + #define assert(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, NULL) #else #define assert(e) ((void)0) #endif//NDEBUG diff --git a/src/Common/config.cpp b/src/Common/config.cpp index 825b1702..84e14087 100644 --- a/src/Common/config.cpp +++ b/src/Common/config.cpp @@ -307,22 +307,10 @@ const string kMediaTimeoutMS = "media_timeout_ms"; const string kBeatIntervalMS = "beat_interval_ms"; const string kMaxAnalysisMS = "max_analysis_ms"; const string kBenchmarkMode = "benchmark_mode"; - } } // namespace mediakit -extern "C" { -void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line) { - if (failed) { - _StrPrinter printer; - printer << "Assertion failed: (" << exp << "), function " << func << ", file " << file << ", line " << line - << "."; - throw std::runtime_error(printer); - } -} -} - #ifdef ENABLE_MEM_DEBUG static atomic mem_usage(0); diff --git a/src/Common/macros.cpp b/src/Common/macros.cpp index 76a83899..55146719 100644 --- a/src/Common/macros.cpp +++ b/src/Common/macros.cpp @@ -9,11 +9,32 @@ */ #include "macros.h" +#include "Util/util.h" + +using namespace toolkit; #if defined(ENABLE_VERSION) #include "Version.h" #endif +extern "C" { +void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line, const char *str) { + if (failed) { + _StrPrinter printer; + printer << "Assertion failed: (" << exp ; + if(str && *str){ + printer << ", " << str; + } + printer << "), function " << func << ", file " << file << ", line " << line << "."; + throw std::runtime_error(printer); + } +} +} + +namespace mediakit { + +void printArgs(std::ostream &out) {} + //请遵循MIT协议,勿修改服务器声明 #if !defined(ENABLE_VERSION) const char SERVER_NAME[] = "ZLMediaKit-6.0(build in " __DATE__ " " __TIME__ ")"; @@ -21,3 +42,4 @@ const char SERVER_NAME[] = "ZLMediaKit-6.0(build in " __DATE__ " " __TIME__ ")" const char SERVER_NAME[] = "ZLMediaKit(git hash:" COMMIT_HASH ",branch:" BRANCH_NAME ",build time:" __DATE__ " " __TIME__ ")"; #endif +}//namespace mediakit \ No newline at end of file diff --git a/src/Common/macros.h b/src/Common/macros.h index 472d4f7b..19d1b48c 100644 --- a/src/Common/macros.h +++ b/src/Common/macros.h @@ -11,6 +11,8 @@ #ifndef ZLMEDIAKIT_MACROS_H #define ZLMEDIAKIT_MACROS_H +#include +#include #if defined(__MACH__) #include #include @@ -38,7 +40,7 @@ #endif #ifndef CHECK -#define CHECK(exp) Assert_Throw(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__) +#define CHECK(exp,...) mediakit::Assert_ThrowCpp(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__) #endif//CHECK #ifndef MAX @@ -62,14 +64,39 @@ #define FMP4_SCHEMA "fmp4" #define DEFAULT_VHOST "__defaultVhost__" -extern const char SERVER_NAME[]; - #ifdef __cplusplus extern "C" { #endif -extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line); +extern void Assert_Throw(int failed, const char *exp, const char *func, const char *file, int line, const char *str); #ifdef __cplusplus } #endif +namespace mediakit { + +extern const char SERVER_NAME[]; + +void printArgs(std::ostream &out); + +template +void printArgs(std::ostream &out, First &&first) { + out << std::forward(first); +} + +template +void printArgs(std::ostream &out, First &&first, ARGS &&...args) { + out << std::forward(first); + printArgs(out, std::forward(args)...); +} + +template +void Assert_ThrowCpp(int failed, const char *exp, const char *func, const char *file, int line, ARGS &&...args) { + if (failed) { + std::stringstream ss; + printArgs(ss, std::forward(args)...); + Assert_Throw(failed, exp, func, file, line, ss.str().data()); + } +} + +}//namespace mediakit #endif //ZLMEDIAKIT_MACROS_H