/proc/self/cwd/common/internal/byte_string.h
Line | Count | Source |
1 | | // Copyright 2024 Google LLC |
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 THIRD_PARTY_CEL_CPP_COMMON_INTERNAL_BYTE_STRING_H_ |
16 | | #define THIRD_PARTY_CEL_CPP_COMMON_INTERNAL_BYTE_STRING_H_ |
17 | | |
18 | | #include <cstddef> |
19 | | #include <cstdint> |
20 | | #include <cstring> |
21 | | #include <optional> |
22 | | #include <ostream> |
23 | | #include <string> |
24 | | #include <utility> |
25 | | |
26 | | #include "absl/base/attributes.h" |
27 | | #include "absl/base/nullability.h" |
28 | | #include "absl/functional/overload.h" |
29 | | #include "absl/log/absl_check.h" |
30 | | #include "absl/strings/cord.h" |
31 | | #include "absl/strings/match.h" |
32 | | #include "absl/strings/string_view.h" |
33 | | #include "absl/types/optional.h" |
34 | | #include "google/protobuf/arena.h" |
35 | | |
36 | | namespace cel { |
37 | | |
38 | | class BytesValueInputStream; |
39 | | class BytesValueOutputStream; |
40 | | class StringValue; |
41 | | |
42 | | namespace common_internal { |
43 | | |
44 | | class [[nodiscard]] ByteString; |
45 | | |
46 | | struct ByteStringTestFriend; |
47 | | |
48 | | enum class ByteStringKind : unsigned int { |
49 | | kSmall = 0, |
50 | | kMedium, |
51 | | kLarge, |
52 | | }; |
53 | | |
54 | 0 | inline std::ostream& operator<<(std::ostream& out, ByteStringKind kind) { |
55 | 0 | switch (kind) { |
56 | 0 | case ByteStringKind::kSmall: |
57 | 0 | return out << "SMALL"; |
58 | 0 | case ByteStringKind::kMedium: |
59 | 0 | return out << "MEDIUM"; |
60 | 0 | case ByteStringKind::kLarge: |
61 | 0 | return out << "LARGE"; |
62 | 0 | } |
63 | 0 | } |
64 | | |
65 | | // Representation of small strings in ByteString, which are stored in place. |
66 | | struct SmallByteStringRep final { |
67 | | #ifdef _MSC_VER |
68 | | #pragma pack(push, 1) |
69 | | #endif |
70 | | struct ABSL_ATTRIBUTE_PACKED { |
71 | | std::uint8_t kind : 2; |
72 | | std::uint8_t size : 6; |
73 | | }; |
74 | | #ifdef _MSC_VER |
75 | | #pragma pack(pop) |
76 | | #endif |
77 | | char data[23]; |
78 | | }; |
79 | | |
80 | | inline constexpr size_t kSmallByteStringCapacity = |
81 | | sizeof(SmallByteStringRep::data); |
82 | | |
83 | | inline constexpr size_t kMediumByteStringSizeBits = sizeof(size_t) * 8 - 2; |
84 | | inline constexpr size_t kMediumByteStringMaxSize = |
85 | | (size_t{1} << kMediumByteStringSizeBits) - 1; |
86 | | |
87 | | inline constexpr size_t kLargeByteStringMaxSize = |
88 | | (size_t{1} << kMediumByteStringSizeBits) - 1; |
89 | | |
90 | | inline constexpr size_t kByteStringViewSizeBits = sizeof(size_t) * 8 - 1; |
91 | | inline constexpr size_t kByteStringViewMaxSize = |
92 | | (size_t{1} << kByteStringViewSizeBits) - 1; |
93 | | |
94 | | // Representation of medium strings in ByteString. These are either owned by an |
95 | | // arena or managed by a reference count. This is encoded in `owner` following |
96 | | // the same semantics as `cel::Owner`. |
97 | | struct MediumByteStringRep final { |
98 | | #ifdef _MSC_VER |
99 | | #pragma pack(push, 1) |
100 | | #endif |
101 | | struct ABSL_ATTRIBUTE_PACKED { |
102 | | size_t kind : 2; |
103 | | size_t size : kMediumByteStringSizeBits; |
104 | | }; |
105 | | #ifdef _MSC_VER |
106 | | #pragma pack(pop) |
107 | | #endif |
108 | | const char* absl_nullability_unknown data; |
109 | | google::protobuf::Arena* absl_nullable arena; |
110 | | }; |
111 | | |
112 | | // Representation of large strings in ByteString. These are stored as |
113 | | // a pointer to `absl::Cord`. |
114 | | struct LargeByteStringRep final { |
115 | | #ifdef _MSC_VER |
116 | | #pragma pack(push, 1) |
117 | | #endif |
118 | | struct ABSL_ATTRIBUTE_PACKED { |
119 | | size_t kind : 2; |
120 | | size_t offset : kMediumByteStringSizeBits / 2; |
121 | | size_t size : kMediumByteStringSizeBits / 2; |
122 | | }; |
123 | | #ifdef _MSC_VER |
124 | | #pragma pack(pop) |
125 | | #endif |
126 | | const absl::Cord* absl_nullability_unknown data; |
127 | | google::protobuf::Arena* absl_nullable arena; |
128 | | }; |
129 | | |
130 | | // Representation of ByteString. |
131 | | union ByteStringRep final { |
132 | | #ifdef _MSC_VER |
133 | | #pragma pack(push, 1) |
134 | | #endif |
135 | | struct ABSL_ATTRIBUTE_PACKED { |
136 | | ByteStringKind kind : 2; |
137 | | } header; |
138 | | #ifdef _MSC_VER |
139 | | #pragma pack(pop) |
140 | | #endif |
141 | | SmallByteStringRep small; |
142 | | MediumByteStringRep medium; |
143 | | LargeByteStringRep large; |
144 | | }; |
145 | | |
146 | | // Returns a `absl::string_view` from `ByteString`, using `arena` to make memory |
147 | | // allocations if necessary. `stable` indicates whether `cel::Value` is in a |
148 | | // location where it will not be moved, so that inline string/bytes storage can |
149 | | // be referenced. |
150 | | absl::string_view LegacyByteString(const ByteString& string, bool stable, |
151 | | google::protobuf::Arena* absl_nonnull arena); |
152 | | |
153 | | // `ByteString` is a vocabulary type capable of representing copy-on-write |
154 | | // strings efficiently for arenas and reference counting. The contents of the |
155 | | // byte string are owned by an arena or managed by a reference count. All byte |
156 | | // strings have an associated allocator specified at construction, once the byte |
157 | | // string is constructed the allocator will not and cannot change. Copying and |
158 | | // moving between different allocators is supported and dealt with |
159 | | // transparently by copying. |
160 | | class [[nodiscard]] ByteString final { |
161 | | public: |
162 | | static ByteString From(const char* absl_nullable value, |
163 | | google::protobuf::Arena* absl_nonnull arena |
164 | 0 | ABSL_ATTRIBUTE_LIFETIME_BOUND) { |
165 | 0 | return From(absl::NullSafeStringView(value), arena); |
166 | 0 | } |
167 | | static ByteString From(absl::string_view value, |
168 | | google::protobuf::Arena* absl_nonnull arena |
169 | | ABSL_ATTRIBUTE_LIFETIME_BOUND); |
170 | | static ByteString From(absl::Cord value, google::protobuf::Arena* absl_nonnull arena |
171 | | ABSL_ATTRIBUTE_LIFETIME_BOUND); |
172 | | static ByteString From(std::string&& value, |
173 | | google::protobuf::Arena* absl_nonnull arena |
174 | | ABSL_ATTRIBUTE_LIFETIME_BOUND); |
175 | | |
176 | | static ByteString Wrap(absl::string_view value, |
177 | | google::protobuf::Arena* absl_nullable arena |
178 | 478k | ABSL_ATTRIBUTE_LIFETIME_BOUND) { |
179 | 478k | ByteString result(UninitializedTag{}); |
180 | 478k | result.SetMedium(arena, value); |
181 | 478k | return result; |
182 | 478k | } |
183 | | static ByteString Wrap( |
184 | | const absl::Cord* absl_nonnull value ABSL_ATTRIBUTE_LIFETIME_BOUND, |
185 | 0 | google::protobuf::Arena* absl_nullable arena ABSL_ATTRIBUTE_LIFETIME_BOUND) { |
186 | 0 | return Wrap(value, 0, value->size(), arena); |
187 | 0 | } |
188 | | static ByteString Wrap( |
189 | | const absl::Cord* absl_nonnull value ABSL_ATTRIBUTE_LIFETIME_BOUND, |
190 | | size_t offset, size_t size, |
191 | 0 | google::protobuf::Arena* absl_nullable arena ABSL_ATTRIBUTE_LIFETIME_BOUND) { |
192 | 0 | ByteString result(UninitializedTag{}); |
193 | 0 | result.SetLarge(arena, value, offset, size); |
194 | 0 | return result; |
195 | 0 | } |
196 | | static ByteString Wrap(std::nullptr_t, google::protobuf::Arena*) = delete; |
197 | | static ByteString Wrap(std::nullptr_t, size_t, size_t, |
198 | | google::protobuf::Arena*) = delete; |
199 | | static ByteString Wrap(std::string&& value, google::protobuf::Arena*) = delete; |
200 | | |
201 | 453k | static ByteString WrapUnsafe(absl::string_view value) { |
202 | 453k | return Wrap(value, static_cast<google::protobuf::Arena*>(nullptr)); |
203 | 453k | } |
204 | 0 | static ByteString WrapUnsafe(const absl::Cord* absl_nonnull value) { |
205 | 0 | return WrapUnsafe(value, 0, value->size()); |
206 | 0 | } |
207 | | static ByteString WrapUnsafe(const absl::Cord* absl_nonnull value, |
208 | 0 | size_t offset, size_t size) { |
209 | 0 | return Wrap(value, offset, size, static_cast<google::protobuf::Arena*>(nullptr)); |
210 | 0 | } |
211 | | static ByteString WrapUnsafe(std::nullptr_t) = delete; |
212 | | static ByteString WrapUnsafe(std::nullptr_t, size_t, size_t) = delete; |
213 | | |
214 | | static ByteString Concat(const ByteString& lhs, const ByteString& rhs, |
215 | | google::protobuf::Arena* absl_nonnull arena); |
216 | | |
217 | 21.3k | ByteString() noexcept { SetSmallEmpty(); } |
218 | | |
219 | | ByteString(const ByteString&) = default; |
220 | | ByteString(ByteString&&) = default; |
221 | | ByteString& operator=(const ByteString&) = default; |
222 | | ByteString& operator=(ByteString&&) = default; |
223 | | |
224 | 9.33k | bool empty() const { |
225 | 9.33k | switch (GetKind()) { |
226 | 9.03k | case ByteStringKind::kSmall: |
227 | 9.03k | return rep_.small.size == 0; |
228 | 301 | case ByteStringKind::kMedium: |
229 | 301 | return rep_.medium.size == 0; |
230 | 0 | case ByteStringKind::kLarge: |
231 | 0 | return rep_.large.size == 0; |
232 | 9.33k | } |
233 | 9.33k | } |
234 | | |
235 | 6.71k | size_t size() const { |
236 | 6.71k | switch (GetKind()) { |
237 | 6.61k | case ByteStringKind::kSmall: |
238 | 6.61k | return rep_.small.size; |
239 | 97 | case ByteStringKind::kMedium: |
240 | 97 | return rep_.medium.size; |
241 | 0 | case ByteStringKind::kLarge: |
242 | 0 | return rep_.large.size; |
243 | 6.71k | } |
244 | 6.71k | } |
245 | | |
246 | 0 | size_t max_size() const { return kByteStringViewMaxSize; } |
247 | | |
248 | | absl::optional<absl::string_view> TryFlat() const |
249 | | ABSL_ATTRIBUTE_LIFETIME_BOUND; |
250 | | |
251 | | bool Equals(absl::string_view rhs) const; |
252 | | bool Equals(const absl::Cord& rhs) const; |
253 | | bool Equals(const ByteString& rhs) const; |
254 | | |
255 | | int Compare(absl::string_view rhs) const; |
256 | | int Compare(const absl::Cord& rhs) const; |
257 | | int Compare(const ByteString& rhs) const; |
258 | | |
259 | | bool StartsWith(absl::string_view rhs) const; |
260 | | bool StartsWith(const absl::Cord& rhs) const; |
261 | | bool StartsWith(const ByteString& rhs) const; |
262 | | |
263 | | bool EndsWith(absl::string_view rhs) const; |
264 | | bool EndsWith(const absl::Cord& rhs) const; |
265 | | bool EndsWith(const ByteString& rhs) const; |
266 | | |
267 | | // Finds the first occurrence of `needle` in this object, starting at byte |
268 | | // position `pos`. Returns `absl::nullopt` if `needle` is not found. |
269 | | // Note: Positions are byte-based, not code point based as in |
270 | | // `cel::StringValue`. |
271 | | absl::optional<size_t> Find(absl::string_view needle, size_t pos = 0) const; |
272 | | absl::optional<size_t> Find(const absl::Cord& needle, size_t pos = 0) const; |
273 | | absl::optional<size_t> Find(const ByteString& needle, size_t pos = 0) const; |
274 | | |
275 | | // Returns a new `ByteString` that is a substring of this object, starting at |
276 | | // byte position `pos` and with a length of `npos` bytes. |
277 | | // Note: Positions are byte-based, not code point based as in |
278 | | // `cel::StringValue`. |
279 | | ByteString Substring(size_t pos, size_t npos) const; |
280 | 0 | ByteString Substring(size_t pos) const { |
281 | 0 | ABSL_DCHECK_LE(pos, size()); |
282 | 0 | return Substring(pos, size()); |
283 | 0 | } |
284 | | |
285 | | void RemovePrefix(size_t n); |
286 | | |
287 | | void RemoveSuffix(size_t n); |
288 | | |
289 | | std::string ToString() const; |
290 | | |
291 | | void CopyToString(std::string* absl_nonnull out) const; |
292 | | |
293 | | void AppendToString(std::string* absl_nonnull out) const; |
294 | | |
295 | | absl::Cord ToCord() const; |
296 | | |
297 | | void CopyToCord(absl::Cord* absl_nonnull out) const; |
298 | | |
299 | | void AppendToCord(absl::Cord* absl_nonnull out) const; |
300 | | |
301 | | absl::string_view ToStringView( |
302 | | std::string* absl_nonnull scratch |
303 | | ABSL_ATTRIBUTE_LIFETIME_BOUND) const ABSL_ATTRIBUTE_LIFETIME_BOUND; |
304 | | |
305 | | // Returns the arena which owns the underling data for this byte string. |
306 | | // Returns null when the data is not owned by an arena. |
307 | 0 | google::protobuf::Arena* absl_nullable GetArena() const { |
308 | 0 | switch (GetKind()) { |
309 | 0 | case ByteStringKind::kSmall: |
310 | 0 | return nullptr; |
311 | 0 | case ByteStringKind::kMedium: |
312 | 0 | return GetMediumArena(); |
313 | 0 | case ByteStringKind::kLarge: |
314 | 0 | return GetLargeArena(); |
315 | 0 | } |
316 | 0 | } |
317 | | |
318 | | ByteString Clone(google::protobuf::Arena* absl_nonnull arena) const; |
319 | | |
320 | | template <typename Visitor> |
321 | 235k | decltype(auto) Visit(Visitor&& visitor) const { |
322 | 235k | if (auto string_view = AsStringView(); string_view) { |
323 | 235k | return std::forward<Visitor>(visitor)(*string_view); |
324 | 235k | } |
325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); |
326 | 235k | } decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Equals(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Equals(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Equals(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Equals(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 120k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 120k | if (auto string_view = AsStringView(); string_view) { | 323 | 120k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 120k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 120k | } |
Unexecuted instantiation: decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Equals(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Equals(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Equals(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Equals(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constdecltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Equals(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Equals(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Equals(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Equals(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 33.9k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 33.9k | if (auto string_view = AsStringView(); string_view) { | 323 | 33.9k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 33.9k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 33.9k | } |
decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Compare(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Compare(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Compare(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Compare(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 4.79k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 4.79k | if (auto string_view = AsStringView(); string_view) { | 323 | 4.79k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 4.79k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 4.79k | } |
Unexecuted instantiation: decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Compare(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Compare(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Compare(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Compare(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constdecltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Compare(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Compare(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Compare(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Compare(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 4.79k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 4.79k | if (auto string_view = AsStringView(); string_view) { | 323 | 4.79k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 4.79k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 4.79k | } |
decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::StartsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::StartsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::StartsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::StartsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 1.18k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 1.18k | if (auto string_view = AsStringView(); string_view) { | 323 | 1.18k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 1.18k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 1.18k | } |
Unexecuted instantiation: decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::StartsWith(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::StartsWith(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::StartsWith(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::StartsWith(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constdecltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::StartsWith(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::StartsWith(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::StartsWith(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::StartsWith(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 1.18k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 1.18k | if (auto string_view = AsStringView(); string_view) { | 323 | 1.18k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 1.18k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 1.18k | } |
decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::EndsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::EndsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::EndsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::EndsWith(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 1.45k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 1.45k | if (auto string_view = AsStringView(); string_view) { | 323 | 1.45k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 1.45k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 1.45k | } |
Unexecuted instantiation: decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::EndsWith(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::EndsWith(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::EndsWith(absl::lts_20260526::Cord const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::EndsWith(absl::lts_20260526::Cord const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constdecltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::EndsWith(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::EndsWith(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::EndsWith(cel::common_internal::ByteString const&) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::EndsWith(cel::common_internal::ByteString const&) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 1.45k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 1.45k | if (auto string_view = AsStringView(); string_view) { | 323 | 1.45k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 1.45k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 1.45k | } |
Unexecuted instantiation: decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Find(cel::common_internal::ByteString const&, unsigned long) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Find(cel::common_internal::ByteString const&, unsigned long) const::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Find(cel::common_internal::ByteString const&, unsigned long) const::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::ByteString::Find(cel::common_internal::ByteString const&, unsigned long) const::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constUnexecuted instantiation: regex_match_step.cc:decltype(auto) cel::common_internal::ByteString::Visit<google::api::expr::runtime::(anonymous namespace)::MatchesVisitor>(google::api::expr::runtime::(anonymous namespace)::MatchesVisitor&&) const type_conversion_functions.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::(anonymous namespace)::RegisterStringConversionFunctions(cel::FunctionRegistry&, cel::RuntimeOptions const&)::$_0::operator()(cel::BytesValue const&, cel::Function::InvokeContext const&) const::{lambda(auto:1 const&)#1}>(cel::(anonymous namespace)::RegisterStringConversionFunctions(cel::FunctionRegistry&, cel::RuntimeOptions const&)::$_0::operator()(cel::BytesValue const&, cel::Function::InvokeContext const&) const::{lambda(auto:1 const&)#1}&&) constLine | Count | Source | 321 | 2.38k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.38k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.38k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.38k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.38k | } |
Unexecuted instantiation: bytes_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::(anonymous namespace)::BytesDebugString<cel::BytesValue>(cel::BytesValue const&)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::(anonymous namespace)::BytesDebugString<cel::BytesValue>(cel::BytesValue const&)::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::(anonymous namespace)::BytesDebugString<cel::BytesValue>(cel::BytesValue const&)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::(anonymous namespace)::BytesDebugString<cel::BytesValue>(cel::BytesValue const&)::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constbytes_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::BytesValue::ConvertToJson(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0>(cel::BytesValue::ConvertToJson(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0&&) const Line | Count | Source | 321 | 2.50k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.50k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.50k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.50k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.50k | } |
bytes_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::BytesValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0>(cel::BytesValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0&&) const Line | Count | Source | 321 | 1.05k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 1.05k | if (auto string_view = AsStringView(); string_view) { | 323 | 1.05k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 1.05k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 1.05k | } |
bytes_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::BytesValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<std::__1::basic_string_view<char, std::__1::char_traits<char> > >(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&) const::{lambda(auto:1 const&)#1}>(cel::BytesValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<std::__1::basic_string_view<char, std::__1::char_traits<char> > >(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&) const::{lambda(auto:1 const&)#1}&&) constLine | Count | Source | 321 | 1.05k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 1.05k | if (auto string_view = AsStringView(); string_view) { | 323 | 1.05k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 1.05k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 1.05k | } |
Unexecuted instantiation: bytes_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::BytesValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<absl::lts_20260526::Cord>(absl::lts_20260526::Cord const&) const::{lambda(auto:1 const&)#1}>(cel::BytesValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<absl::lts_20260526::Cord>(absl::lts_20260526::Cord const&) const::{lambda(auto:1 const&)#1}&&) conststring_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::StringValue::Size() const::$_0>(cel::StringValue::Size() const::$_0&&) const Line | Count | Source | 321 | 610 | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 610 | if (auto string_view = AsStringView(); string_view) { | 323 | 610 | return std::forward<Visitor>(visitor)(*string_view); | 324 | 610 | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 610 | } |
string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Contains(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_0, cel::StringValue::Contains(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Contains(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_0, cel::StringValue::Contains(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_1>&&) const Line | Count | Source | 321 | 2.07k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.07k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.07k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.07k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.07k | } |
Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Contains(absl::lts_20260526::Cord const&) const::$_0, cel::StringValue::Contains(absl::lts_20260526::Cord const&) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Contains(absl::lts_20260526::Cord const&) const::$_0, cel::StringValue::Contains(absl::lts_20260526::Cord const&) const::$_1>&&) const string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Contains(cel::StringValue const&) const::$_0, cel::StringValue::Contains(cel::StringValue const&) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Contains(cel::StringValue const&) const::$_0, cel::StringValue::Contains(cel::StringValue const&) const::$_1>&&) const Line | Count | Source | 321 | 2.07k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.07k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.07k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.07k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.07k | } |
Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_0, cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_0, cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::IndexOf(absl::lts_20260526::Cord const&) const::$_0, cel::StringValue::IndexOf(absl::lts_20260526::Cord const&) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::IndexOf(absl::lts_20260526::Cord const&) const::$_0, cel::StringValue::IndexOf(absl::lts_20260526::Cord const&) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::IndexOf(cel::StringValue const&) const::$_0, cel::StringValue::IndexOf(cel::StringValue const&) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::IndexOf(cel::StringValue const&) const::$_0, cel::StringValue::IndexOf(cel::StringValue const&) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_0, cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_0, cel::StringValue::IndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::IndexOf(absl::lts_20260526::Cord const&, long) const::$_0, cel::StringValue::IndexOf(absl::lts_20260526::Cord const&, long) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::IndexOf(absl::lts_20260526::Cord const&, long) const::$_0, cel::StringValue::IndexOf(absl::lts_20260526::Cord const&, long) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::IndexOf(cel::StringValue const&, long) const::$_0, cel::StringValue::IndexOf(cel::StringValue const&, long) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::IndexOf(cel::StringValue const&, long) const::$_0, cel::StringValue::IndexOf(cel::StringValue const&, long) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_0, cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_0, cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&) const::$_0, cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&) const::$_0, cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(cel::StringValue const&) const::$_0, cel::StringValue::LastIndexOf(cel::StringValue const&) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(cel::StringValue const&) const::$_0, cel::StringValue::LastIndexOf(cel::StringValue const&) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_0, cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_0, cel::StringValue::LastIndexOf(std::__1::basic_string_view<char, std::__1::char_traits<char> >, long) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&, long) const::$_0, cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&, long) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&, long) const::$_0, cel::StringValue::LastIndexOf(absl::lts_20260526::Cord const&, long) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(cel::StringValue const&, long) const::$_0, cel::StringValue::LastIndexOf(cel::StringValue const&, long) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::LastIndexOf(cel::StringValue const&, long) const::$_0, cel::StringValue::LastIndexOf(cel::StringValue const&, long) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Quote(google::protobuf::Arena*) const::$_0, cel::StringValue::Quote(google::protobuf::Arena*) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Quote(google::protobuf::Arena*) const::$_0, cel::StringValue::Quote(google::protobuf::Arena*) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Reverse(google::protobuf::Arena*) const::$_0, cel::StringValue::Reverse(google::protobuf::Arena*) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Reverse(google::protobuf::Arena*) const::$_0, cel::StringValue::Reverse(google::protobuf::Arena*) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Split(cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_0, cel::StringValue::Split(cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Split(cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_0, cel::StringValue::Split(cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::Replace(cel::StringValue const&, cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_0, cel::StringValue::Replace(cel::StringValue const&, cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::Replace(cel::StringValue const&, cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_0, cel::StringValue::Replace(cel::StringValue const&, cel::StringValue const&, long, google::protobuf::Arena*, cel::Value*) const::$_1>&&) const Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::CharAt(long, google::protobuf::Arena*) const::$_0, cel::StringValue::CharAt(long, google::protobuf::Arena*) const::$_1> >(absl::lts_20260526::Overload<cel::StringValue::CharAt(long, google::protobuf::Arena*) const::$_0, cel::StringValue::CharAt(long, google::protobuf::Arena*) const::$_1>&&) const string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::(anonymous namespace)::StringDebugString<cel::StringValue>(cel::StringValue const&)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::(anonymous namespace)::StringDebugString<cel::StringValue>(cel::StringValue const&)::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::(anonymous namespace)::StringDebugString<cel::StringValue>(cel::StringValue const&)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::(anonymous namespace)::StringDebugString<cel::StringValue>(cel::StringValue const&)::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constLine | Count | Source | 321 | 47.0k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 47.0k | if (auto string_view = AsStringView(); string_view) { | 323 | 47.0k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 47.0k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 47.0k | } |
string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::StringValue::ConvertToJson(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0>(cel::StringValue::ConvertToJson(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0&&) const Line | Count | Source | 321 | 2.53k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.53k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.53k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.53k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.53k | } |
string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::StringValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0>(cel::StringValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0&&) const Line | Count | Source | 321 | 2.37k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.37k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.37k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.37k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.37k | } |
string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::StringValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<std::__1::basic_string_view<char, std::__1::char_traits<char> > >(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&) const::{lambda(auto:1 const&)#1}>(cel::StringValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<std::__1::basic_string_view<char, std::__1::char_traits<char> > >(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&) const::{lambda(auto:1 const&)#1}&&) constLine | Count | Source | 321 | 2.37k | decltype(auto) Visit(Visitor&& visitor) const { | 322 | 2.37k | if (auto string_view = AsStringView(); string_view) { | 323 | 2.37k | return std::forward<Visitor>(visitor)(*string_view); | 324 | 2.37k | } | 325 | 0 | return std::forward<Visitor>(visitor)(GetLarge()); | 326 | 2.37k | } |
Unexecuted instantiation: string_value.cc:decltype(auto) cel::common_internal::ByteString::Visit<cel::StringValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<absl::lts_20260526::Cord>(absl::lts_20260526::Cord const&) const::{lambda(auto:1 const&)#1}>(cel::StringValue::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0::operator()<absl::lts_20260526::Cord>(absl::lts_20260526::Cord const&) const::{lambda(auto:1 const&)#1}&&) constUnexecuted instantiation: struct_value_builder.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(absl::lts_20260526::Cord const&)#1}> >(absl::lts_20260526::Overload<cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#1}, cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(absl::lts_20260526::Cord const&)#1}>&&) constUnexecuted instantiation: struct_value_builder.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#2}, cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(absl::lts_20260526::Cord const&)#2}> >(absl::lts_20260526::Overload<cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(std::__1::basic_string_view<char, std::__1::char_traits<char> >)#2}, cel::common_internal::(anonymous namespace)::MessageValueBuilderImpl::SetSingularField(google::protobuf::FieldDescriptor const*, cel::Value)::{lambda(absl::lts_20260526::Cord const&)#2}>&&) constUnexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::StringValue::StringValue(cel::BytesValue const&)::$_0, cel::StringValue::$_0(cel::BytesValue const&)::$_1> >(absl::lts_20260526::Overload<cel::StringValue::StringValue(cel::BytesValue const&)::$_0, cel::StringValue::$_0(cel::BytesValue const&)::$_1>&&) const Unexecuted instantiation: byte_string.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Find(std::__1::basic_string_view<char, std::__1::char_traits<char> >, unsigned long) const::$_0, cel::common_internal::ByteString::Find(std::__1::basic_string_view<char, std::__1::char_traits<char> >, unsigned long) const::$_1> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Find(std::__1::basic_string_view<char, std::__1::char_traits<char> >, unsigned long) const::$_0, cel::common_internal::ByteString::Find(std::__1::basic_string_view<char, std::__1::char_traits<char> >, unsigned long) const::$_1>&&) const Unexecuted instantiation: byte_string.cc:decltype(auto) cel::common_internal::ByteString::Visit<absl::lts_20260526::Overload<cel::common_internal::ByteString::Find(absl::lts_20260526::Cord const&, unsigned long) const::$_0, cel::common_internal::ByteString::Find(absl::lts_20260526::Cord const&, unsigned long) const::$_1> >(absl::lts_20260526::Overload<cel::common_internal::ByteString::Find(absl::lts_20260526::Cord const&, unsigned long) const::$_0, cel::common_internal::ByteString::Find(absl::lts_20260526::Cord const&, unsigned long) const::$_1>&&) const |
327 | | |
328 | 0 | friend void swap(ByteString& lhs, ByteString& rhs) noexcept { |
329 | 0 | using std::swap; |
330 | 0 | swap(lhs.rep_, rhs.rep_); |
331 | 0 | } |
332 | | |
333 | | template <typename H> |
334 | 313k | friend H AbslHashValue(H state, const ByteString& byte_string) { |
335 | 313k | if (auto string_view = byte_string.AsStringView(); string_view) { |
336 | 313k | return H::combine(std::move(state), *string_view); |
337 | 313k | } |
338 | 0 | return H::combine(std::move(state), byte_string.GetLarge()); |
339 | 313k | } |
340 | | |
341 | | private: |
342 | | friend class ByteStringView; |
343 | | friend struct ByteStringTestFriend; |
344 | | friend class cel::BytesValueInputStream; |
345 | | friend class cel::BytesValueOutputStream; |
346 | | friend class cel::StringValue; |
347 | | friend absl::string_view LegacyByteString(const ByteString& string, |
348 | | bool stable, |
349 | | google::protobuf::Arena* absl_nonnull arena); |
350 | | |
351 | | struct UninitializedTag { |
352 | | explicit UninitializedTag() = default; |
353 | | }; |
354 | | |
355 | 495k | explicit ByteString(UninitializedTag) {} |
356 | | |
357 | 808k | constexpr ByteStringKind GetKind() const { return rep_.header.kind; } |
358 | | |
359 | 625k | absl::string_view GetSmall() const { |
360 | 625k | ABSL_DCHECK_EQ(GetKind(), ByteStringKind::kSmall); |
361 | 625k | return GetSmall(rep_.small); |
362 | 625k | } |
363 | | |
364 | 625k | static absl::string_view GetSmall(const SmallByteStringRep& rep) { |
365 | 625k | return absl::string_view(rep.data, rep.size); |
366 | 625k | } |
367 | | |
368 | 160k | absl::string_view GetMedium() const { |
369 | 160k | ABSL_DCHECK_EQ(GetKind(), ByteStringKind::kMedium); |
370 | 160k | return GetMedium(rep_.medium); |
371 | 160k | } |
372 | | |
373 | 160k | static absl::string_view GetMedium(const MediumByteStringRep& rep) { |
374 | 160k | return absl::string_view(rep.data, rep.size); |
375 | 160k | } |
376 | | |
377 | 70 | google::protobuf::Arena* absl_nullable GetMediumArena() const { |
378 | 70 | ABSL_DCHECK_EQ(GetKind(), ByteStringKind::kMedium); |
379 | 70 | return GetMediumArena(rep_.medium); |
380 | 70 | } |
381 | | |
382 | | static google::protobuf::Arena* absl_nullable GetMediumArena( |
383 | 70 | const MediumByteStringRep& rep) { |
384 | 70 | return rep.arena; |
385 | 70 | } |
386 | | |
387 | | static absl::Cord GetLarge( |
388 | 0 | const LargeByteStringRep& rep ABSL_ATTRIBUTE_LIFETIME_BOUND) { |
389 | 0 | return rep.data->Subcord(rep.offset, rep.size); |
390 | 0 | } |
391 | | |
392 | 0 | absl::Cord GetLarge() const ABSL_ATTRIBUTE_LIFETIME_BOUND { |
393 | 0 | ABSL_DCHECK_EQ(GetKind(), ByteStringKind::kLarge); |
394 | 0 | return GetLarge(rep_.large); |
395 | 0 | } |
396 | | |
397 | 0 | google::protobuf::Arena* absl_nullable GetLargeArena() const { |
398 | 0 | ABSL_DCHECK_EQ(GetKind(), ByteStringKind::kLarge); |
399 | 0 | return GetLargeArena(rep_.large); |
400 | 0 | } |
401 | | |
402 | | static google::protobuf::Arena* absl_nullable GetLargeArena( |
403 | 0 | const LargeByteStringRep& rep ABSL_ATTRIBUTE_LIFETIME_BOUND) { |
404 | 0 | return rep.arena; |
405 | 0 | } |
406 | | |
407 | 21.3k | void SetSmallEmpty() { |
408 | 21.3k | rep_.header.kind = ByteStringKind::kSmall; |
409 | 21.3k | rep_.small.size = 0; |
410 | 21.3k | } |
411 | | |
412 | 12.5k | void SetSmall(absl::string_view string) { |
413 | 12.5k | ABSL_DCHECK_LE(string.size(), kSmallByteStringCapacity); |
414 | 12.5k | rep_.header.kind = ByteStringKind::kSmall; |
415 | 12.5k | rep_.small.size = string.size(); |
416 | 12.5k | if (!string.empty()) { |
417 | 10.8k | std::memcpy(rep_.small.data, string.data(), rep_.small.size); |
418 | 10.8k | } |
419 | 12.5k | } |
420 | | |
421 | 0 | void SetSmall(const absl::Cord& cord) { |
422 | 0 | ABSL_DCHECK_LE(cord.size(), kSmallByteStringCapacity); |
423 | 0 | rep_.header.kind = ByteStringKind::kSmall; |
424 | 0 | rep_.small.size = cord.size(); |
425 | 0 | CopyCordToArray(cord, rep_.small.data); |
426 | 0 | } |
427 | | |
428 | 479k | void SetMedium(google::protobuf::Arena* absl_nullable arena, absl::string_view string) { |
429 | 479k | rep_.header.kind = ByteStringKind::kMedium; |
430 | 479k | rep_.medium.size = string.size(); |
431 | 479k | rep_.medium.data = string.data(); |
432 | 479k | rep_.medium.arena = arena; |
433 | 479k | } |
434 | | |
435 | | void SetMedium(google::protobuf::Arena* absl_nullable arena, |
436 | 0 | const std::string* absl_nonnull string) { |
437 | 0 | SetMedium(arena, absl::string_view(*string)); |
438 | 0 | } |
439 | | |
440 | | void SetLarge(google::protobuf::Arena* absl_nullable arena, |
441 | | const absl::Cord* absl_nonnull cord, size_t offset = 0, |
442 | | size_t size = static_cast<size_t>(-1)) { |
443 | | ABSL_DCHECK_LE(offset, cord->size()); |
444 | | ABSL_DCHECK_LE(offset, kLargeByteStringMaxSize); |
445 | | rep_.header.kind = ByteStringKind::kLarge; |
446 | | rep_.large.offset = offset; |
447 | | if (size == static_cast<size_t>(-1)) { |
448 | | size = cord->size() - offset; |
449 | | } |
450 | | ABSL_DCHECK_LE(size, cord->size() - offset); |
451 | | ABSL_DCHECK_LE(size, kLargeByteStringMaxSize); |
452 | | rep_.large.size = size; |
453 | | rep_.large.data = cord; |
454 | | rep_.large.arena = arena; |
455 | | } |
456 | | |
457 | 0 | static void CopyCordToArray(const absl::Cord& cord, char* data) { |
458 | 0 | for (absl::string_view chunk : cord.Chunks()) { |
459 | 0 | std::memcpy(data, chunk.data(), chunk.size()); |
460 | 0 | data += chunk.size(); |
461 | 0 | } |
462 | 0 | } |
463 | | |
464 | | static void CopyCordToArray(const absl::Cord& cord, size_t offset, |
465 | | size_t size, char* data); |
466 | | |
467 | | static void AppendCordToString(const absl::Cord& cord, size_t offset, |
468 | | size_t size, std::string& data); |
469 | | |
470 | | void CopyToArray(char* absl_nonnull out) const; |
471 | | |
472 | 548k | std::optional<absl::string_view> AsStringView() const { |
473 | 548k | switch (GetKind()) { |
474 | 451k | case ByteStringKind::kSmall: |
475 | 451k | return GetSmall(); |
476 | 97.3k | case ByteStringKind::kMedium: |
477 | 97.3k | return GetMedium(); |
478 | 0 | case ByteStringKind::kLarge: |
479 | 0 | return std::nullopt; |
480 | 548k | } |
481 | 548k | } |
482 | | |
483 | | ByteStringRep rep_; |
484 | | }; |
485 | | |
486 | 120k | inline bool ByteString::Equals(absl::string_view rhs) const { |
487 | 120k | return Visit(absl::Overload( |
488 | 120k | [&rhs](absl::string_view lhs) -> bool { return lhs == rhs; }, |
489 | 120k | [&rhs](const absl::Cord& lhs) -> bool { return lhs == rhs; })); |
490 | 120k | } |
491 | | |
492 | 0 | inline bool ByteString::Equals(const absl::Cord& rhs) const { |
493 | 0 | return Visit(absl::Overload( |
494 | 0 | [&rhs](absl::string_view lhs) -> bool { return lhs == rhs; }, |
495 | 0 | [&rhs](const absl::Cord& lhs) -> bool { return lhs == rhs; })); |
496 | 0 | } |
497 | | |
498 | 33.9k | inline bool ByteString::Equals(const ByteString& rhs) const { |
499 | 33.9k | return rhs.Visit(absl::Overload( |
500 | 33.9k | [this](absl::string_view rhs) -> bool { return Equals(rhs); }, |
501 | 33.9k | [this](const absl::Cord& rhs) -> bool { return Equals(rhs); })); |
502 | 33.9k | } |
503 | | |
504 | 4.79k | inline int ByteString::Compare(absl::string_view rhs) const { |
505 | 4.79k | return Visit(absl::Overload( |
506 | 4.79k | [&rhs](absl::string_view lhs) -> int { return lhs.compare(rhs); }, |
507 | 4.79k | [&rhs](const absl::Cord& lhs) -> int { return lhs.Compare(rhs); })); |
508 | 4.79k | } |
509 | | |
510 | 0 | inline int ByteString::Compare(const absl::Cord& rhs) const { |
511 | 0 | return Visit(absl::Overload( |
512 | 0 | [&rhs](absl::string_view lhs) -> int { return -rhs.Compare(lhs); }, |
513 | 0 | [&rhs](const absl::Cord& lhs) -> int { return lhs.Compare(rhs); })); |
514 | 0 | } |
515 | | |
516 | 4.79k | inline int ByteString::Compare(const ByteString& rhs) const { |
517 | 4.79k | return rhs.Visit(absl::Overload( |
518 | 4.79k | [this](absl::string_view rhs) -> int { return Compare(rhs); }, |
519 | 4.79k | [this](const absl::Cord& rhs) -> int { return Compare(rhs); })); |
520 | 4.79k | } |
521 | | |
522 | 1.18k | inline bool ByteString::StartsWith(absl::string_view rhs) const { |
523 | 1.18k | return Visit(absl::Overload( |
524 | 1.18k | [&rhs](absl::string_view lhs) -> bool { |
525 | 1.18k | return absl::StartsWith(lhs, rhs); |
526 | 1.18k | }, |
527 | 1.18k | [&rhs](const absl::Cord& lhs) -> bool { return lhs.StartsWith(rhs); })); |
528 | 1.18k | } |
529 | | |
530 | 0 | inline bool ByteString::StartsWith(const absl::Cord& rhs) const { |
531 | 0 | return Visit(absl::Overload( |
532 | 0 | [&rhs](absl::string_view lhs) -> bool { |
533 | 0 | return lhs.size() >= rhs.size() && lhs.substr(0, rhs.size()) == rhs; |
534 | 0 | }, |
535 | 0 | [&rhs](const absl::Cord& lhs) -> bool { return lhs.StartsWith(rhs); })); |
536 | 0 | } |
537 | | |
538 | 1.18k | inline bool ByteString::StartsWith(const ByteString& rhs) const { |
539 | 1.18k | return rhs.Visit(absl::Overload( |
540 | 1.18k | [this](absl::string_view rhs) -> bool { return StartsWith(rhs); }, |
541 | 1.18k | [this](const absl::Cord& rhs) -> bool { return StartsWith(rhs); })); |
542 | 1.18k | } |
543 | | |
544 | 1.45k | inline bool ByteString::EndsWith(absl::string_view rhs) const { |
545 | 1.45k | return Visit(absl::Overload( |
546 | 1.45k | [&rhs](absl::string_view lhs) -> bool { |
547 | 1.45k | return absl::EndsWith(lhs, rhs); |
548 | 1.45k | }, |
549 | 1.45k | [&rhs](const absl::Cord& lhs) -> bool { return lhs.EndsWith(rhs); })); |
550 | 1.45k | } |
551 | | |
552 | 0 | inline bool ByteString::EndsWith(const absl::Cord& rhs) const { |
553 | 0 | return Visit(absl::Overload( |
554 | 0 | [&rhs](absl::string_view lhs) -> bool { |
555 | 0 | return lhs.size() >= rhs.size() && |
556 | 0 | lhs.substr(lhs.size() - rhs.size()) == rhs; |
557 | 0 | }, |
558 | 0 | [&rhs](const absl::Cord& lhs) -> bool { return lhs.EndsWith(rhs); })); |
559 | 0 | } |
560 | | |
561 | 1.45k | inline bool ByteString::EndsWith(const ByteString& rhs) const { |
562 | 1.45k | return rhs.Visit(absl::Overload( |
563 | 1.45k | [this](absl::string_view rhs) -> bool { return EndsWith(rhs); }, |
564 | 1.45k | [this](const absl::Cord& rhs) -> bool { return EndsWith(rhs); })); |
565 | 1.45k | } |
566 | | |
567 | | inline absl::optional<size_t> ByteString::Find(const ByteString& needle, |
568 | 0 | size_t pos) const { |
569 | 0 | return needle.Visit(absl::Overload( |
570 | 0 | [this, pos](absl::string_view rhs) -> absl::optional<size_t> { |
571 | 0 | return Find(rhs, pos); |
572 | 0 | }, |
573 | 0 | [this, pos](const absl::Cord& rhs) -> absl::optional<size_t> { |
574 | 0 | return Find(rhs, pos); |
575 | 0 | })); |
576 | 0 | } |
577 | | |
578 | 32.8k | inline bool operator==(const ByteString& lhs, const ByteString& rhs) { |
579 | 32.8k | return lhs.Equals(rhs); |
580 | 32.8k | } |
581 | | |
582 | 0 | inline bool operator==(const ByteString& lhs, absl::string_view rhs) { |
583 | 0 | return lhs.Equals(rhs); |
584 | 0 | } |
585 | | |
586 | 0 | inline bool operator==(absl::string_view lhs, const ByteString& rhs) { |
587 | 0 | return rhs.Equals(lhs); |
588 | 0 | } |
589 | | |
590 | 0 | inline bool operator==(const ByteString& lhs, const absl::Cord& rhs) { |
591 | 0 | return lhs.Equals(rhs); |
592 | 0 | } |
593 | | |
594 | 0 | inline bool operator==(const absl::Cord& lhs, const ByteString& rhs) { |
595 | 0 | return rhs.Equals(lhs); |
596 | 0 | } |
597 | | |
598 | 0 | inline bool operator!=(const ByteString& lhs, const ByteString& rhs) { |
599 | 0 | return !operator==(lhs, rhs); |
600 | 0 | } |
601 | | |
602 | 0 | inline bool operator!=(const ByteString& lhs, absl::string_view rhs) { |
603 | 0 | return !operator==(lhs, rhs); |
604 | 0 | } |
605 | | |
606 | 0 | inline bool operator!=(absl::string_view lhs, const ByteString& rhs) { |
607 | 0 | return !operator==(lhs, rhs); |
608 | 0 | } |
609 | | |
610 | 0 | inline bool operator!=(const ByteString& lhs, const absl::Cord& rhs) { |
611 | 0 | return !operator==(lhs, rhs); |
612 | 0 | } |
613 | | |
614 | 0 | inline bool operator!=(const absl::Cord& lhs, const ByteString& rhs) { |
615 | 0 | return !operator==(lhs, rhs); |
616 | 0 | } |
617 | | |
618 | 0 | inline bool operator<(const ByteString& lhs, const ByteString& rhs) { |
619 | 0 | return lhs.Compare(rhs) < 0; |
620 | 0 | } |
621 | | |
622 | 0 | inline bool operator<(const ByteString& lhs, absl::string_view rhs) { |
623 | 0 | return lhs.Compare(rhs) < 0; |
624 | 0 | } |
625 | | |
626 | 0 | inline bool operator<(absl::string_view lhs, const ByteString& rhs) { |
627 | 0 | return -rhs.Compare(lhs) < 0; |
628 | 0 | } |
629 | | |
630 | 0 | inline bool operator<(const ByteString& lhs, const absl::Cord& rhs) { |
631 | 0 | return lhs.Compare(rhs) < 0; |
632 | 0 | } |
633 | | |
634 | 0 | inline bool operator<(const absl::Cord& lhs, const ByteString& rhs) { |
635 | 0 | return -rhs.Compare(lhs) < 0; |
636 | 0 | } |
637 | | |
638 | 0 | inline bool operator<=(const ByteString& lhs, const ByteString& rhs) { |
639 | 0 | return lhs.Compare(rhs) <= 0; |
640 | 0 | } |
641 | | |
642 | 0 | inline bool operator<=(const ByteString& lhs, absl::string_view rhs) { |
643 | 0 | return lhs.Compare(rhs) <= 0; |
644 | 0 | } |
645 | | |
646 | 0 | inline bool operator<=(absl::string_view lhs, const ByteString& rhs) { |
647 | 0 | return -rhs.Compare(lhs) <= 0; |
648 | 0 | } |
649 | | |
650 | 0 | inline bool operator<=(const ByteString& lhs, const absl::Cord& rhs) { |
651 | 0 | return lhs.Compare(rhs) <= 0; |
652 | 0 | } |
653 | | |
654 | 0 | inline bool operator<=(const absl::Cord& lhs, const ByteString& rhs) { |
655 | 0 | return -rhs.Compare(lhs) <= 0; |
656 | 0 | } |
657 | | |
658 | 0 | inline bool operator>(const ByteString& lhs, const ByteString& rhs) { |
659 | 0 | return lhs.Compare(rhs) > 0; |
660 | 0 | } |
661 | | |
662 | 0 | inline bool operator>(const ByteString& lhs, absl::string_view rhs) { |
663 | 0 | return lhs.Compare(rhs) > 0; |
664 | 0 | } |
665 | | |
666 | 0 | inline bool operator>(absl::string_view lhs, const ByteString& rhs) { |
667 | 0 | return -rhs.Compare(lhs) > 0; |
668 | 0 | } |
669 | | |
670 | 0 | inline bool operator>(const ByteString& lhs, const absl::Cord& rhs) { |
671 | 0 | return lhs.Compare(rhs) > 0; |
672 | 0 | } |
673 | | |
674 | 0 | inline bool operator>(const absl::Cord& lhs, const ByteString& rhs) { |
675 | 0 | return -rhs.Compare(lhs) > 0; |
676 | 0 | } |
677 | | |
678 | 0 | inline bool operator>=(const ByteString& lhs, const ByteString& rhs) { |
679 | 0 | return lhs.Compare(rhs) >= 0; |
680 | 0 | } |
681 | | |
682 | 0 | inline bool operator>=(const ByteString& lhs, absl::string_view rhs) { |
683 | 0 | return lhs.Compare(rhs) >= 0; |
684 | 0 | } |
685 | | |
686 | 0 | inline bool operator>=(absl::string_view lhs, const ByteString& rhs) { |
687 | 0 | return -rhs.Compare(lhs) >= 0; |
688 | 0 | } |
689 | | |
690 | 0 | inline bool operator>=(const ByteString& lhs, const absl::Cord& rhs) { |
691 | 0 | return lhs.Compare(rhs) >= 0; |
692 | 0 | } |
693 | | |
694 | 0 | inline bool operator>=(const absl::Cord& lhs, const ByteString& rhs) { |
695 | 0 | return -rhs.Compare(lhs) >= 0; |
696 | 0 | } |
697 | | |
698 | | } // namespace common_internal |
699 | | |
700 | | } // namespace cel |
701 | | |
702 | | #endif // THIRD_PARTY_CEL_CPP_COMMON_INTERNAL_BYTE_STRING_H_ |