1818#include < type_traits>
1919
2020#include " absl/base/attributes.h"
21- #include " absl/base/casts.h"
22- #include " absl/log/absl_check.h"
21+ #include " absl/base/macros.h"
2322#include " absl/strings/string_view.h"
2423
2524namespace cel {
@@ -103,21 +102,30 @@ enum class TypeKind : std::underlying_type_t<Kind> {
103102 static_cast <int >(Kind::kNotForUseWithExhaustiveSwitchStatements ),
104103};
105104
106- inline Kind TypeKindToKind (TypeKind kind) { return absl::bit_cast<Kind>(kind); }
105+ constexpr Kind TypeKindToKind (TypeKind kind) {
106+ return static_cast <Kind>(static_cast <std::underlying_type_t <TypeKind>>(kind));
107+ }
107108
108- ABSL_ATTRIBUTE_PURE_FUNCTION bool KindIsTypeKind (Kind kind);
109+ constexpr bool KindIsTypeKind (Kind kind ABSL_ATTRIBUTE_UNUSED) {
110+ // Currently all Kind are valid TypeKind.
111+ return true ;
112+ }
109113
110- inline bool operator ==(Kind lhs, TypeKind rhs) {
114+ constexpr bool operator ==(Kind lhs, TypeKind rhs) {
111115 return lhs == TypeKindToKind (rhs);
112116}
113117
114- inline bool operator ==(TypeKind lhs, Kind rhs) {
118+ constexpr bool operator ==(TypeKind lhs, Kind rhs) {
115119 return TypeKindToKind (lhs) == rhs;
116120}
117121
118- inline bool operator !=(Kind lhs, TypeKind rhs) { return !operator ==(lhs, rhs); }
122+ constexpr bool operator !=(Kind lhs, TypeKind rhs) {
123+ return !operator ==(lhs, rhs);
124+ }
119125
120- inline bool operator !=(TypeKind lhs, Kind rhs) { return !operator ==(lhs, rhs); }
126+ constexpr bool operator !=(TypeKind lhs, Kind rhs) {
127+ return !operator ==(lhs, rhs);
128+ }
121129
122130// `ValueKind` is a subset of `Kind`, representing all valid `Kind` for `Value`.
123131// All `ValueKind` are valid `Kind`, but it is not guaranteed that all `Kind`
@@ -155,41 +163,44 @@ enum class ValueKind : std::underlying_type_t<Kind> {
155163 static_cast <int >(Kind::kNotForUseWithExhaustiveSwitchStatements ),
156164};
157165
158- inline Kind ValueKindToKind (ValueKind kind) {
159- return absl::bit_cast<Kind>(kind);
166+ constexpr Kind ValueKindToKind (ValueKind kind) {
167+ return static_cast <Kind>(
168+ static_cast <std::underlying_type_t <ValueKind>>(kind));
160169}
161170
162- ABSL_ATTRIBUTE_PURE_FUNCTION bool KindIsValueKind (Kind kind);
171+ constexpr bool KindIsValueKind (Kind kind) {
172+ return kind != Kind::kWrapper && kind != Kind::kDyn && kind != Kind::kAny ;
173+ }
163174
164- inline bool operator ==(Kind lhs, ValueKind rhs) {
175+ constexpr bool operator ==(Kind lhs, ValueKind rhs) {
165176 return lhs == ValueKindToKind (rhs);
166177}
167178
168- inline bool operator ==(ValueKind lhs, Kind rhs) {
179+ constexpr bool operator ==(ValueKind lhs, Kind rhs) {
169180 return ValueKindToKind (lhs) == rhs;
170181}
171182
172- inline bool operator ==(TypeKind lhs, ValueKind rhs) {
183+ constexpr bool operator ==(TypeKind lhs, ValueKind rhs) {
173184 return TypeKindToKind (lhs) == ValueKindToKind (rhs);
174185}
175186
176- inline bool operator ==(ValueKind lhs, TypeKind rhs) {
187+ constexpr bool operator ==(ValueKind lhs, TypeKind rhs) {
177188 return ValueKindToKind (lhs) == TypeKindToKind (rhs);
178189}
179190
180- inline bool operator !=(Kind lhs, ValueKind rhs) {
191+ constexpr bool operator !=(Kind lhs, ValueKind rhs) {
181192 return !operator ==(lhs, rhs);
182193}
183194
184- inline bool operator !=(ValueKind lhs, Kind rhs) {
195+ constexpr bool operator !=(ValueKind lhs, Kind rhs) {
185196 return !operator ==(lhs, rhs);
186197}
187198
188- inline bool operator !=(TypeKind lhs, ValueKind rhs) {
199+ constexpr bool operator !=(TypeKind lhs, ValueKind rhs) {
189200 return !operator ==(lhs, rhs);
190201}
191202
192- inline bool operator !=(ValueKind lhs, TypeKind rhs) {
203+ constexpr bool operator !=(ValueKind lhs, TypeKind rhs) {
193204 return !operator ==(lhs, rhs);
194205}
195206
@@ -203,14 +214,15 @@ inline absl::string_view ValueKindToString(ValueKind kind) {
203214 return KindToString (ValueKindToKind (kind));
204215}
205216
206- inline TypeKind KindToTypeKind (Kind kind) {
207- ABSL_DCHECK (KindIsTypeKind (kind)) << KindToString (kind );
208- return absl::bit_cast<TypeKind> (kind);
217+ constexpr TypeKind KindToTypeKind (Kind kind) {
218+ ABSL_ASSERT (KindIsTypeKind (kind));
219+ return static_cast <TypeKind>( static_cast <std:: underlying_type_t <Kind>> (kind) );
209220}
210221
211- inline ValueKind KindToValueKind (Kind kind) {
212- ABSL_DCHECK (KindIsValueKind (kind)) << KindToString (kind);
213- return absl::bit_cast<ValueKind>(kind);
222+ constexpr ValueKind KindToValueKind (Kind kind) {
223+ ABSL_ASSERT (KindIsValueKind (kind));
224+ return static_cast <ValueKind>(
225+ static_cast <std::underlying_type_t <Kind>>(kind));
214226}
215227
216228} // namespace cel
0 commit comments