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