1 #ifndef RIME_NO_LOGGING_H_ 2 #define RIME_NO_LOGGING_H_ 3 4 namespace rime { 5 6 class VoidLogger { 7 public: VoidLogger()8 VoidLogger() {} 9 10 // hack: an unnamed VoidLogger() cannot be used as an l-value stream()11 VoidLogger& stream() { return *this; } 12 13 template <class T> 14 VoidLogger& operator<< (const T& x) { return *this; } 15 }; 16 17 // to avoid compiler warnings 18 class Voidify { 19 public: Voidify()20 Voidify() {} 21 void operator& (VoidLogger&) {} 22 }; 23 24 } // namespace rime 25 26 #define RIME_NO_LOG true ? (void) 0 : rime::Voidify() & rime::VoidLogger().stream() 27 28 #define LOG(severity) RIME_NO_LOG 29 #define VLOG(verboselevel) RIME_NO_LOG 30 #define LOG_IF(severity, condition) RIME_NO_LOG 31 #define LOG_EVERY_N(severity, n) RIME_NO_LOG 32 #define LOG_IF_EVERY_N(severity, condition, n) RIME_NO_LOG 33 #define LOG_ASSERT(condition) RIME_NO_LOG 34 35 #define RIME_NO_CHECK (void) 0 36 37 #define CHECK(condition) RIME_NO_CHECK 38 #define CHECK_EQ(val1, val2) RIME_NO_CHECK 39 #define CHECK_NE(val1, val2) RIME_NO_CHECK 40 #define CHECK_LE(val1, val2) RIME_NO_CHECK 41 #define CHECK_LT(val1, val2) RIME_NO_CHECK 42 #define CHECK_GE(val1, val2) RIME_NO_CHECK 43 #define CHECK_GT(val1, val2) RIME_NO_CHECK 44 #define CHECK_NOTNULL(val) RIME_NO_CHECK 45 #define CHECK_STREQ(str1, str2) RIME_NO_CHECK 46 #define CHECK_STRCASEEQ(str1, str2) RIME_NO_CHECK 47 #define CHECK_STRNE(str1, str2) RIME_NO_CHECK 48 #define CHECK_STRCASENE(str1, str2) RIME_NO_CHECK 49 50 #define DLOG(severity) LOG(severity) 51 #define DVLOG(verboselevel) VLOG(verboselevel) 52 #define DLOG_IF(severity, condition) LOG_IF(severity, condition) 53 #define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n) 54 #define DLOG_IF_EVERY_N(severity, condition, n) \ 55 LOG_IF_EVERY_N(severity, condition, n) 56 #define DLOG_ASSERT(condition) LOG_ASSERT(condition) 57 58 #define DCHECK(condition) CHECK(condition) 59 #define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2) 60 #define DCHECK_NE(val1, val2) CHECK_NE(val1, val2) 61 #define DCHECK_LE(val1, val2) CHECK_LE(val1, val2) 62 #define DCHECK_LT(val1, val2) CHECK_LT(val1, val2) 63 #define DCHECK_GE(val1, val2) CHECK_GE(val1, val2) 64 #define DCHECK_GT(val1, val2) CHECK_GT(val1, val2) 65 #define DCHECK_NOTNULL(val) CHECK_NOTNULL(val) 66 #define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2) 67 #define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2) 68 #define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2) 69 #define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2) 70 71 #endif // RIME_NO_LOGGING_H_ 72