xref: /aosp_15_r20/external/abseil-cpp/absl/log/internal/check_impl.h (revision 9356374a3709195abf420251b3e825997ff56c0f)
1 // Copyright 2022 The Abseil Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef ABSL_LOG_INTERNAL_CHECK_IMPL_H_
16 #define ABSL_LOG_INTERNAL_CHECK_IMPL_H_
17 
18 #include "absl/base/optimization.h"
19 #include "absl/log/internal/check_op.h"
20 #include "absl/log/internal/conditions.h"
21 #include "absl/log/internal/log_message.h"
22 #include "absl/log/internal/strip.h"
23 
24 // CHECK
25 #define ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)       \
26   ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
27                                     ABSL_PREDICT_FALSE(!(condition))) \
28   ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
29 
30 #define ABSL_LOG_INTERNAL_QCHECK_IMPL(condition, condition_text)       \
31   ABSL_LOG_INTERNAL_CONDITION_QFATAL(STATELESS,                        \
32                                      ABSL_PREDICT_FALSE(!(condition))) \
33   ABSL_LOG_INTERNAL_QCHECK(condition_text).InternalStream()
34 
35 #define ABSL_LOG_INTERNAL_PCHECK_IMPL(condition, condition_text) \
36   ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text).WithPerror()
37 
38 #ifndef NDEBUG
39 #define ABSL_LOG_INTERNAL_DCHECK_IMPL(condition, condition_text) \
40   ABSL_LOG_INTERNAL_CHECK_IMPL(condition, condition_text)
41 #else
42 #define ABSL_LOG_INTERNAL_DCHECK_IMPL(condition, condition_text) \
43   ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
44 #endif
45 
46 // CHECK_EQ
47 #define ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text) \
48   ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
49 #define ABSL_LOG_INTERNAL_CHECK_NE_IMPL(val1, val1_text, val2, val2_text) \
50   ABSL_LOG_INTERNAL_CHECK_OP(Check_NE, !=, val1, val1_text, val2, val2_text)
51 #define ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text) \
52   ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
53 #define ABSL_LOG_INTERNAL_CHECK_LT_IMPL(val1, val1_text, val2, val2_text) \
54   ABSL_LOG_INTERNAL_CHECK_OP(Check_LT, <, val1, val1_text, val2, val2_text)
55 #define ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text) \
56   ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
57 #define ABSL_LOG_INTERNAL_CHECK_GT_IMPL(val1, val1_text, val2, val2_text) \
58   ABSL_LOG_INTERNAL_CHECK_OP(Check_GT, >, val1, val1_text, val2, val2_text)
59 #define ABSL_LOG_INTERNAL_QCHECK_EQ_IMPL(val1, val1_text, val2, val2_text) \
60   ABSL_LOG_INTERNAL_QCHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
61 #define ABSL_LOG_INTERNAL_QCHECK_NE_IMPL(val1, val1_text, val2, val2_text) \
62   ABSL_LOG_INTERNAL_QCHECK_OP(Check_NE, !=, val1, val1_text, val2, val2_text)
63 #define ABSL_LOG_INTERNAL_QCHECK_LE_IMPL(val1, val1_text, val2, val2_text) \
64   ABSL_LOG_INTERNAL_QCHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
65 #define ABSL_LOG_INTERNAL_QCHECK_LT_IMPL(val1, val1_text, val2, val2_text) \
66   ABSL_LOG_INTERNAL_QCHECK_OP(Check_LT, <, val1, val1_text, val2, val2_text)
67 #define ABSL_LOG_INTERNAL_QCHECK_GE_IMPL(val1, val1_text, val2, val2_text) \
68   ABSL_LOG_INTERNAL_QCHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
69 #define ABSL_LOG_INTERNAL_QCHECK_GT_IMPL(val1, val1_text, val2, val2_text) \
70   ABSL_LOG_INTERNAL_QCHECK_OP(Check_GT, >, val1, val1_text, val2, val2_text)
71 #ifndef NDEBUG
72 #define ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL(val1, val1_text, val2, val2_text) \
73   ABSL_LOG_INTERNAL_CHECK_EQ_IMPL(val1, val1_text, val2, val2_text)
74 #define ABSL_LOG_INTERNAL_DCHECK_NE_IMPL(val1, val1_text, val2, val2_text) \
75   ABSL_LOG_INTERNAL_CHECK_NE_IMPL(val1, val1_text, val2, val2_text)
76 #define ABSL_LOG_INTERNAL_DCHECK_LE_IMPL(val1, val1_text, val2, val2_text) \
77   ABSL_LOG_INTERNAL_CHECK_LE_IMPL(val1, val1_text, val2, val2_text)
78 #define ABSL_LOG_INTERNAL_DCHECK_LT_IMPL(val1, val1_text, val2, val2_text) \
79   ABSL_LOG_INTERNAL_CHECK_LT_IMPL(val1, val1_text, val2, val2_text)
80 #define ABSL_LOG_INTERNAL_DCHECK_GE_IMPL(val1, val1_text, val2, val2_text) \
81   ABSL_LOG_INTERNAL_CHECK_GE_IMPL(val1, val1_text, val2, val2_text)
82 #define ABSL_LOG_INTERNAL_DCHECK_GT_IMPL(val1, val1_text, val2, val2_text) \
83   ABSL_LOG_INTERNAL_CHECK_GT_IMPL(val1, val1_text, val2, val2_text)
84 #else  // ndef NDEBUG
85 #define ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL(val1, val1_text, val2, val2_text) \
86   ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
87 #define ABSL_LOG_INTERNAL_DCHECK_NE_IMPL(val1, val1_text, val2, val2_text) \
88   ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
89 #define ABSL_LOG_INTERNAL_DCHECK_LE_IMPL(val1, val1_text, val2, val2_text) \
90   ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
91 #define ABSL_LOG_INTERNAL_DCHECK_LT_IMPL(val1, val1_text, val2, val2_text) \
92   ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
93 #define ABSL_LOG_INTERNAL_DCHECK_GE_IMPL(val1, val1_text, val2, val2_text) \
94   ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
95 #define ABSL_LOG_INTERNAL_DCHECK_GT_IMPL(val1, val1_text, val2, val2_text) \
96   ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
97 #endif  // def NDEBUG
98 
99 // CHECK_OK
100 #define ABSL_LOG_INTERNAL_CHECK_OK_IMPL(status, status_text) \
101   ABSL_LOG_INTERNAL_CHECK_OK(status, status_text)
102 #define ABSL_LOG_INTERNAL_QCHECK_OK_IMPL(status, status_text) \
103   ABSL_LOG_INTERNAL_QCHECK_OK(status, status_text)
104 #ifndef NDEBUG
105 #define ABSL_LOG_INTERNAL_DCHECK_OK_IMPL(status, status_text) \
106   ABSL_LOG_INTERNAL_CHECK_OK(status, status_text)
107 #else
108 #define ABSL_LOG_INTERNAL_DCHECK_OK_IMPL(status, status_text) \
109   ABSL_LOG_INTERNAL_DCHECK_NOP(status, nullptr)
110 #endif
111 
112 // CHECK_STREQ
113 #define ABSL_LOG_INTERNAL_CHECK_STREQ_IMPL(s1, s1_text, s2, s2_text) \
114   ABSL_LOG_INTERNAL_CHECK_STROP(strcmp, ==, true, s1, s1_text, s2, s2_text)
115 #define ABSL_LOG_INTERNAL_CHECK_STRNE_IMPL(s1, s1_text, s2, s2_text) \
116   ABSL_LOG_INTERNAL_CHECK_STROP(strcmp, !=, false, s1, s1_text, s2, s2_text)
117 #define ABSL_LOG_INTERNAL_CHECK_STRCASEEQ_IMPL(s1, s1_text, s2, s2_text) \
118   ABSL_LOG_INTERNAL_CHECK_STROP(strcasecmp, ==, true, s1, s1_text, s2, s2_text)
119 #define ABSL_LOG_INTERNAL_CHECK_STRCASENE_IMPL(s1, s1_text, s2, s2_text) \
120   ABSL_LOG_INTERNAL_CHECK_STROP(strcasecmp, !=, false, s1, s1_text, s2, s2_text)
121 #define ABSL_LOG_INTERNAL_QCHECK_STREQ_IMPL(s1, s1_text, s2, s2_text) \
122   ABSL_LOG_INTERNAL_QCHECK_STROP(strcmp, ==, true, s1, s1_text, s2, s2_text)
123 #define ABSL_LOG_INTERNAL_QCHECK_STRNE_IMPL(s1, s1_text, s2, s2_text) \
124   ABSL_LOG_INTERNAL_QCHECK_STROP(strcmp, !=, false, s1, s1_text, s2, s2_text)
125 #define ABSL_LOG_INTERNAL_QCHECK_STRCASEEQ_IMPL(s1, s1_text, s2, s2_text) \
126   ABSL_LOG_INTERNAL_QCHECK_STROP(strcasecmp, ==, true, s1, s1_text, s2, s2_text)
127 #define ABSL_LOG_INTERNAL_QCHECK_STRCASENE_IMPL(s1, s1_text, s2, s2_text) \
128   ABSL_LOG_INTERNAL_QCHECK_STROP(strcasecmp, !=, false, s1, s1_text, s2,  \
129                                  s2_text)
130 #ifndef NDEBUG
131 #define ABSL_LOG_INTERNAL_DCHECK_STREQ_IMPL(s1, s1_text, s2, s2_text) \
132   ABSL_LOG_INTERNAL_CHECK_STREQ_IMPL(s1, s1_text, s2, s2_text)
133 #define ABSL_LOG_INTERNAL_DCHECK_STRCASEEQ_IMPL(s1, s1_text, s2, s2_text) \
134   ABSL_LOG_INTERNAL_CHECK_STRCASEEQ_IMPL(s1, s1_text, s2, s2_text)
135 #define ABSL_LOG_INTERNAL_DCHECK_STRNE_IMPL(s1, s1_text, s2, s2_text) \
136   ABSL_LOG_INTERNAL_CHECK_STRNE_IMPL(s1, s1_text, s2, s2_text)
137 #define ABSL_LOG_INTERNAL_DCHECK_STRCASENE_IMPL(s1, s1_text, s2, s2_text) \
138   ABSL_LOG_INTERNAL_CHECK_STRCASENE_IMPL(s1, s1_text, s2, s2_text)
139 #else  // ndef NDEBUG
140 #define ABSL_LOG_INTERNAL_DCHECK_STREQ_IMPL(s1, s1_text, s2, s2_text) \
141   ABSL_LOG_INTERNAL_DCHECK_NOP(s1, s2)
142 #define ABSL_LOG_INTERNAL_DCHECK_STRCASEEQ_IMPL(s1, s1_text, s2, s2_text) \
143   ABSL_LOG_INTERNAL_DCHECK_NOP(s1, s2)
144 #define ABSL_LOG_INTERNAL_DCHECK_STRNE_IMPL(s1, s1_text, s2, s2_text) \
145   ABSL_LOG_INTERNAL_DCHECK_NOP(s1, s2)
146 #define ABSL_LOG_INTERNAL_DCHECK_STRCASENE_IMPL(s1, s1_text, s2, s2_text) \
147   ABSL_LOG_INTERNAL_DCHECK_NOP(s1, s2)
148 #endif  // def NDEBUG
149 
150 #endif  // ABSL_LOG_INTERNAL_CHECK_IMPL_H_
151