Coverage Report

Created: 2026-09-03 06:30

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/common/values/value_variant.h
Line
Count
Source
1
// Copyright 2025 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_VALUES_VALUE_VARIANT_H_
16
#define THIRD_PARTY_CEL_CPP_COMMON_VALUES_VALUE_VARIANT_H_
17
18
#include <cstddef>
19
#include <cstdint>
20
#include <cstring>
21
#include <memory>
22
#include <new>
23
#include <type_traits>
24
#include <utility>
25
26
#include "absl/base/attributes.h"
27
#include "absl/base/nullability.h"
28
#include "absl/log/absl_check.h"
29
#include "absl/meta/type_traits.h"
30
#include "absl/utility/utility.h"
31
#include "common/arena.h"
32
#include "common/value_kind.h"
33
#include "common/values/bool_value.h"
34
#include "common/values/bytes_value.h"
35
#include "common/values/custom_list_value.h"
36
#include "common/values/custom_map_value.h"
37
#include "common/values/custom_struct_value.h"
38
#include "common/values/double_value.h"
39
#include "common/values/duration_value.h"
40
#include "common/values/error_value.h"
41
#include "common/values/int_value.h"
42
#include "common/values/legacy_list_value.h"
43
#include "common/values/legacy_map_value.h"
44
#include "common/values/legacy_struct_value.h"
45
#include "common/values/list_value.h"
46
#include "common/values/map_value.h"
47
#include "common/values/null_value.h"
48
#include "common/values/opaque_value.h"
49
#include "common/values/parsed_json_list_value.h"
50
#include "common/values/parsed_json_map_value.h"
51
#include "common/values/parsed_map_field_value.h"
52
#include "common/values/parsed_message_value.h"
53
#include "common/values/parsed_repeated_field_value.h"
54
#include "common/values/string_value.h"
55
#include "common/values/timestamp_value.h"
56
#include "common/values/type_value.h"
57
#include "common/values/uint_value.h"
58
#include "common/values/unknown_value.h"
59
#include "common/values/values.h"
60
61
namespace cel {
62
63
class Value;
64
65
namespace common_internal {
66
67
// Used by ValueVariant to indicate the active alternative.
68
enum class ValueIndex : uint8_t {
69
  kNull = 0,
70
  kBool,
71
  kInt,
72
  kUint,
73
  kDouble,
74
  kDuration,
75
  kTimestamp,
76
  kType,
77
  kLegacyList,
78
  kParsedJsonList,
79
  kParsedRepeatedField,
80
  kCustomList,
81
  kLegacyMap,
82
  kParsedJsonMap,
83
  kParsedMapField,
84
  kCustomMap,
85
  kLegacyStruct,
86
  kParsedMessage,
87
  kCustomStruct,
88
  kOpaque,
89
90
  // Keep non-trivial alternatives together to aid in compiling optimizations.
91
  kBytes,
92
  kString,
93
  kError,
94
  kUnknown,
95
};
96
97
// Used by ValueVariant to indicate pre-computed behaviors.
98
enum class ValueFlags : uint32_t {
99
  kNone = 0,
100
  kNonTrivial = 1,
101
};
102
103
ABSL_ATTRIBUTE_ALWAYS_INLINE inline constexpr ValueFlags operator&(
104
243M
    ValueFlags lhs, ValueFlags rhs) {
105
243M
  return static_cast<ValueFlags>(
106
243M
      static_cast<std::underlying_type_t<ValueFlags>>(lhs) &
107
243M
      static_cast<std::underlying_type_t<ValueFlags>>(rhs));
108
243M
}
109
110
// Traits specialized by each alternative.
111
//
112
// ValueIndex ValueAlternative<T>::kIndex
113
//
114
//   Indicates the alternative index corresponding to T.
115
//
116
// ValueKind ValueAlternative<T>::kKind
117
//
118
//  Indicatates the kind corresponding to T.
119
//
120
// bool ValueAlternative<T>::kAlwaysTrivial
121
//
122
//  True if T is trivially_copyable, false otherwise.
123
//
124
// ValueFlags ValueAlternative<T>::Flags(const T* absl_nonnull )
125
//
126
//  Returns the flags for the corresponding instance of T.
127
template <typename T>
128
struct ValueAlternative;
129
130
template <>
131
struct ValueAlternative<NullValue> {
132
  static constexpr ValueIndex kIndex = ValueIndex::kNull;
133
  static constexpr ValueKind kKind = NullValue::kKind;
134
  static constexpr bool kAlwaysTrivial = true;
135
136
2.13M
  static constexpr ValueFlags Flags(const NullValue* absl_nonnull) {
137
2.13M
    return ValueFlags::kNone;
138
2.13M
  }
139
};
140
141
template <>
142
struct ValueAlternative<BoolValue> {
143
  static constexpr ValueIndex kIndex = ValueIndex::kBool;
144
  static constexpr ValueKind kKind = BoolValue::kKind;
145
  static constexpr bool kAlwaysTrivial = true;
146
147
576k
  static constexpr ValueFlags Flags(const BoolValue* absl_nonnull) {
148
576k
    return ValueFlags::kNone;
149
576k
  }
150
};
151
152
template <>
153
struct ValueAlternative<IntValue> {
154
  static constexpr ValueIndex kIndex = ValueIndex::kInt;
155
  static constexpr ValueKind kKind = IntValue::kKind;
156
  static constexpr bool kAlwaysTrivial = true;
157
158
1.04M
  static constexpr ValueFlags Flags(const IntValue* absl_nonnull) {
159
1.04M
    return ValueFlags::kNone;
160
1.04M
  }
161
};
162
163
template <>
164
struct ValueAlternative<UintValue> {
165
  static constexpr ValueIndex kIndex = ValueIndex::kUint;
166
  static constexpr ValueKind kKind = UintValue::kKind;
167
  static constexpr bool kAlwaysTrivial = true;
168
169
306k
  static constexpr ValueFlags Flags(const UintValue* absl_nonnull) {
170
306k
    return ValueFlags::kNone;
171
306k
  }
172
};
173
174
template <>
175
struct ValueAlternative<DoubleValue> {
176
  static constexpr ValueIndex kIndex = ValueIndex::kDouble;
177
  static constexpr ValueKind kKind = DoubleValue::kKind;
178
  static constexpr bool kAlwaysTrivial = true;
179
180
139k
  static constexpr ValueFlags Flags(const DoubleValue* absl_nonnull) {
181
139k
    return ValueFlags::kNone;
182
139k
  }
183
};
184
185
template <>
186
struct ValueAlternative<DurationValue> {
187
  static constexpr ValueIndex kIndex = ValueIndex::kDuration;
188
  static constexpr ValueKind kKind = DurationValue::kKind;
189
  static constexpr bool kAlwaysTrivial = true;
190
191
48.2k
  static constexpr ValueFlags Flags(const DurationValue* absl_nonnull) {
192
48.2k
    return ValueFlags::kNone;
193
48.2k
  }
194
};
195
196
template <>
197
struct ValueAlternative<TimestampValue> {
198
  static constexpr ValueIndex kIndex = ValueIndex::kTimestamp;
199
  static constexpr ValueKind kKind = TimestampValue::kKind;
200
  static constexpr bool kAlwaysTrivial = true;
201
202
71.1k
  static constexpr ValueFlags Flags(const TimestampValue* absl_nonnull) {
203
71.1k
    return ValueFlags::kNone;
204
71.1k
  }
205
};
206
207
template <>
208
struct ValueAlternative<TypeValue> {
209
  static constexpr ValueIndex kIndex = ValueIndex::kType;
210
  static constexpr ValueKind kKind = TypeValue::kKind;
211
  static constexpr bool kAlwaysTrivial = true;
212
213
6.29k
  static constexpr ValueFlags Flags(const TypeValue* absl_nonnull) {
214
6.29k
    return ValueFlags::kNone;
215
6.29k
  }
216
};
217
218
template <>
219
struct ValueAlternative<LegacyListValue> {
220
  static constexpr ValueIndex kIndex = ValueIndex::kLegacyList;
221
  static constexpr ValueKind kKind = LegacyListValue::kKind;
222
  static constexpr bool kAlwaysTrivial = true;
223
224
0
  static constexpr ValueFlags Flags(const LegacyListValue* absl_nonnull) {
225
0
    return ValueFlags::kNone;
226
0
  }
227
};
228
229
template <>
230
struct ValueAlternative<ParsedJsonListValue> {
231
  static constexpr ValueIndex kIndex = ValueIndex::kParsedJsonList;
232
  static constexpr ValueKind kKind = ParsedJsonListValue::kKind;
233
  static constexpr bool kAlwaysTrivial = true;
234
235
155k
  static constexpr ValueFlags Flags(const ParsedJsonListValue* absl_nonnull) {
236
155k
    return ValueFlags::kNone;
237
155k
  }
238
};
239
240
template <>
241
struct ValueAlternative<ParsedRepeatedFieldValue> {
242
  static constexpr ValueIndex kIndex = ValueIndex::kParsedRepeatedField;
243
  static constexpr ValueKind kKind = ParsedRepeatedFieldValue::kKind;
244
  static constexpr bool kAlwaysTrivial = true;
245
246
  static constexpr ValueFlags Flags(
247
0
      const ParsedRepeatedFieldValue* absl_nonnull) {
248
0
    return ValueFlags::kNone;
249
0
  }
250
};
251
252
template <>
253
struct ValueAlternative<CustomListValue> {
254
  static constexpr ValueIndex kIndex = ValueIndex::kCustomList;
255
  static constexpr ValueKind kKind = CustomListValue::kKind;
256
  static constexpr bool kAlwaysTrivial = true;
257
258
1.87M
  static constexpr ValueFlags Flags(const CustomListValue* absl_nonnull) {
259
1.87M
    return ValueFlags::kNone;
260
1.87M
  }
261
};
262
263
template <>
264
struct ValueAlternative<LegacyMapValue> {
265
  static constexpr ValueIndex kIndex = ValueIndex::kLegacyMap;
266
  static constexpr ValueKind kKind = LegacyMapValue::kKind;
267
  static constexpr bool kAlwaysTrivial = true;
268
269
0
  static constexpr ValueFlags Flags(const LegacyMapValue* absl_nonnull) {
270
0
    return ValueFlags::kNone;
271
0
  }
272
};
273
274
template <>
275
struct ValueAlternative<ParsedJsonMapValue> {
276
  static constexpr ValueIndex kIndex = ValueIndex::kParsedJsonMap;
277
  static constexpr ValueKind kKind = ParsedJsonMapValue::kKind;
278
  static constexpr bool kAlwaysTrivial = true;
279
280
26.1k
  static constexpr ValueFlags Flags(const ParsedJsonMapValue* absl_nonnull) {
281
26.1k
    return ValueFlags::kNone;
282
26.1k
  }
283
};
284
285
template <>
286
struct ValueAlternative<ParsedMapFieldValue> {
287
  static constexpr ValueIndex kIndex = ValueIndex::kParsedMapField;
288
  static constexpr ValueKind kKind = ParsedMapFieldValue::kKind;
289
  static constexpr bool kAlwaysTrivial = true;
290
291
0
  static constexpr ValueFlags Flags(const ParsedMapFieldValue* absl_nonnull) {
292
0
    return ValueFlags::kNone;
293
0
  }
294
};
295
296
template <>
297
struct ValueAlternative<CustomMapValue> {
298
  static constexpr ValueIndex kIndex = ValueIndex::kCustomMap;
299
  static constexpr ValueKind kKind = CustomMapValue::kKind;
300
  static constexpr bool kAlwaysTrivial = true;
301
302
672k
  static constexpr ValueFlags Flags(const CustomMapValue* absl_nonnull) {
303
672k
    return ValueFlags::kNone;
304
672k
  }
305
};
306
307
template <>
308
struct ValueAlternative<LegacyStructValue> {
309
  static constexpr ValueIndex kIndex = ValueIndex::kLegacyStruct;
310
  static constexpr ValueKind kKind = LegacyStructValue::kKind;
311
  static constexpr bool kAlwaysTrivial = true;
312
313
244k
  static constexpr ValueFlags Flags(const LegacyStructValue* absl_nonnull) {
314
244k
    return ValueFlags::kNone;
315
244k
  }
316
};
317
318
template <>
319
struct ValueAlternative<ParsedMessageValue> {
320
  static constexpr ValueIndex kIndex = ValueIndex::kParsedMessage;
321
  static constexpr ValueKind kKind = ParsedMessageValue::kKind;
322
  static constexpr bool kAlwaysTrivial = true;
323
324
263k
  static constexpr ValueFlags Flags(const ParsedMessageValue* absl_nonnull) {
325
263k
    return ValueFlags::kNone;
326
263k
  }
327
};
328
329
template <>
330
struct ValueAlternative<CustomStructValue> {
331
  static constexpr ValueIndex kIndex = ValueIndex::kCustomStruct;
332
  static constexpr ValueKind kKind = CustomStructValue::kKind;
333
  static constexpr bool kAlwaysTrivial = true;
334
335
0
  static constexpr ValueFlags Flags(const CustomStructValue* absl_nonnull) {
336
0
    return ValueFlags::kNone;
337
0
  }
338
};
339
340
template <>
341
struct ValueAlternative<OpaqueValue> {
342
  static constexpr ValueIndex kIndex = ValueIndex::kOpaque;
343
  static constexpr ValueKind kKind = OpaqueValue::kKind;
344
  static constexpr bool kAlwaysTrivial = true;
345
346
0
  static constexpr ValueFlags Flags(const OpaqueValue* absl_nonnull) {
347
0
    return ValueFlags::kNone;
348
0
  }
349
};
350
351
template <>
352
struct ValueAlternative<BytesValue> {
353
  static constexpr ValueIndex kIndex = ValueIndex::kBytes;
354
  static constexpr ValueKind kKind = BytesValue::kKind;
355
  static constexpr bool kAlwaysTrivial = false;
356
357
39.3k
  static ValueFlags Flags(const BytesValue* absl_nonnull alternative) {
358
39.3k
    return ArenaTraits<BytesValue>::trivially_destructible(*alternative)
359
39.3k
               ? ValueFlags::kNone
360
39.3k
               : ValueFlags::kNonTrivial;
361
39.3k
  }
362
};
363
364
template <>
365
struct ValueAlternative<StringValue> {
366
  static constexpr ValueIndex kIndex = ValueIndex::kString;
367
  static constexpr ValueKind kKind = StringValue::kKind;
368
  static constexpr bool kAlwaysTrivial = false;
369
370
26.5k
  static ValueFlags Flags(const StringValue* absl_nonnull alternative) {
371
26.5k
    return ArenaTraits<StringValue>::trivially_destructible(*alternative)
372
26.5k
               ? ValueFlags::kNone
373
26.5k
               : ValueFlags::kNonTrivial;
374
26.5k
  }
375
};
376
377
template <>
378
struct ValueAlternative<ErrorValue> {
379
  static constexpr ValueIndex kIndex = ValueIndex::kError;
380
  static constexpr ValueKind kKind = ErrorValue::kKind;
381
  static constexpr bool kAlwaysTrivial = false;
382
383
4.07M
  static ValueFlags Flags(const ErrorValue* absl_nonnull alternative) {
384
4.07M
    return ArenaTraits<ErrorValue>::trivially_destructible(*alternative)
385
4.07M
               ? ValueFlags::kNone
386
4.07M
               : ValueFlags::kNonTrivial;
387
4.07M
  }
388
};
389
390
template <>
391
struct ValueAlternative<UnknownValue> {
392
  static constexpr ValueIndex kIndex = ValueIndex::kUnknown;
393
  static constexpr ValueKind kKind = UnknownValue::kKind;
394
  static constexpr bool kAlwaysTrivial = false;
395
396
0
  static constexpr ValueFlags Flags(const UnknownValue* absl_nonnull) {
397
0
    return ValueFlags::kNonTrivial;
398
0
  }
399
};
400
401
template <typename T, typename = void>
402
struct IsValueAlternative : std::false_type {};
403
404
template <typename T>
405
struct IsValueAlternative<T, std::void_t<decltype(ValueAlternative<T>{})>>
406
    : std::true_type {};
407
408
template <typename T>
409
inline constexpr bool IsValueAlternativeV = IsValueAlternative<T>::value;
410
411
// Alignment and size of the storage inside ValueVariant, not for ValueVariant
412
// itself.
413
inline constexpr size_t kValueVariantAlign = 8;
414
inline constexpr size_t kValueVariantSize = 24;
415
416
// Hand-rolled variant used by cel::Value which exhibits up to a 25% performance
417
// improvement compared to using std::variant.
418
//
419
// The implementation abuses the fact that most alternatives are trivially
420
// copyable and some are conditionally trivially copyable at runtime. For the
421
// fast path, we perform raw byte copying. For the slow path, we fallback to a
422
// non-inlined function. The compiler is typically smart enough to inline the
423
// fast path and emit efficient instructions for the raw byte copying (usually
424
// two instructions). It also uses switch for visiting, which most compilers can
425
// optimize better compared to a function pointer table (which libc++ currently
426
// uses and Clang currently does not optimize well).
427
class alignas(kValueVariantAlign) CEL_COMMON_INTERNAL_VALUE_VARIANT_TRIVIAL_ABI
428
    ValueVariant final {
429
 public:
430
11.6M
  ValueVariant() = default;
431
432
  ValueVariant(const ValueVariant& other) noexcept
433
27.4M
      : index_(other.index_), kind_(other.kind_), flags_(other.flags_) {
434
27.4M
    if ((flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone) {
435
20.4M
      std::memcpy(raw_, other.raw_, sizeof(raw_));
436
20.4M
    } else {
437
7.03M
      SlowCopyConstruct(other);
438
7.03M
    }
439
27.4M
  }
440
441
  ValueVariant(ValueVariant&& other) noexcept
442
66.1M
      : index_(other.index_), kind_(other.kind_), flags_(other.flags_) {
443
66.1M
    if ((flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone) {
444
50.5M
      std::memcpy(raw_, other.raw_, sizeof(raw_));
445
50.5M
    } else {
446
15.5M
      SlowMoveConstruct(other);
447
15.5M
    }
448
66.1M
  }
449
450
99.4M
  ~ValueVariant() {
451
99.4M
    if ((flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNonTrivial) {
452
30.4M
      SlowDestruct();
453
30.4M
    }
454
99.4M
  }
455
456
7.77M
  ValueVariant& operator=(const ValueVariant& other) noexcept {
457
7.77M
    if (this != &other) {
458
7.77M
      const bool trivial =
459
7.77M
          (flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
460
7.77M
      const bool other_trivial =
461
7.77M
          (other.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
462
7.77M
      if (trivial && other_trivial) {
463
6.02M
        FastCopyAssign(other);
464
6.02M
      } else {
465
1.74M
        SlowCopyAssign(other, trivial, other_trivial);
466
1.74M
      }
467
7.77M
    }
468
7.77M
    return *this;
469
7.77M
  }
470
471
14.2M
  ValueVariant& operator=(ValueVariant&& other) noexcept {
472
14.2M
    if (this != &other) {
473
14.2M
      const bool trivial =
474
14.2M
          (flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
475
14.2M
      const bool other_trivial =
476
14.2M
          (other.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
477
14.2M
      if (trivial && other_trivial) {
478
4.52M
        FastMoveAssign(other);
479
9.68M
      } else {
480
9.68M
        SlowMoveAssign(other, trivial, other_trivial);
481
9.68M
      }
482
14.2M
    }
483
14.2M
    return *this;
484
14.2M
  }
485
486
  template <typename T, typename... Args>
487
  explicit ValueVariant(absl::in_place_type_t<T>, Args&&... args)
488
5.71M
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
5.71M
    static_assert(alignof(T) <= kValueVariantAlign);
490
5.71M
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
5.71M
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
5.71M
                                            T(std::forward<Args>(args)...));
494
5.71M
  }
cel::common_internal::ValueVariant::ValueVariant<cel::BoolValue, cel::BoolValue>(std::__1::in_place_type_t<cel::BoolValue>, cel::BoolValue&&)
Line
Count
Source
488
405k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
405k
    static_assert(alignof(T) <= kValueVariantAlign);
490
405k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
405k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
405k
                                            T(std::forward<Args>(args)...));
494
405k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::UnknownValue, cel::UnknownValue>(std::__1::in_place_type_t<cel::UnknownValue>, cel::UnknownValue&&)
cel::common_internal::ValueVariant::ValueVariant<cel::ErrorValue, cel::ErrorValue>(std::__1::in_place_type_t<cel::ErrorValue>, cel::ErrorValue&&)
Line
Count
Source
488
652k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
652k
    static_assert(alignof(T) <= kValueVariantAlign);
490
652k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
652k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
652k
                                            T(std::forward<Args>(args)...));
494
652k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::IntValue, cel::IntValue>(std::__1::in_place_type_t<cel::IntValue>, cel::IntValue&&)
Line
Count
Source
488
1.03M
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
1.03M
    static_assert(alignof(T) <= kValueVariantAlign);
490
1.03M
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
1.03M
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
1.03M
                                            T(std::forward<Args>(args)...));
494
1.03M
  }
cel::common_internal::ValueVariant::ValueVariant<cel::UintValue, cel::UintValue>(std::__1::in_place_type_t<cel::UintValue>, cel::UintValue&&)
Line
Count
Source
488
306k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
306k
    static_assert(alignof(T) <= kValueVariantAlign);
490
306k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
306k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
306k
                                            T(std::forward<Args>(args)...));
494
306k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::StringValue, cel::StringValue>(std::__1::in_place_type_t<cel::StringValue>, cel::StringValue&&)
Line
Count
Source
488
20.8k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
20.8k
    static_assert(alignof(T) <= kValueVariantAlign);
490
20.8k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
20.8k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
20.8k
                                            T(std::forward<Args>(args)...));
494
20.8k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::TypeValue, cel::TypeValue>(std::__1::in_place_type_t<cel::TypeValue>, cel::TypeValue&&)
Line
Count
Source
488
6.29k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
6.29k
    static_assert(alignof(T) <= kValueVariantAlign);
490
6.29k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
6.29k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
6.29k
                                            T(std::forward<Args>(args)...));
494
6.29k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomListValue, cel::CustomListValue>(std::__1::in_place_type_t<cel::CustomListValue>, cel::CustomListValue&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::UnknownValue, cel::UnknownValue&>(std::__1::in_place_type_t<cel::UnknownValue>, cel::UnknownValue&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomMapValue, cel::CustomMapValue>(std::__1::in_place_type_t<cel::CustomMapValue>, cel::CustomMapValue&&)
cel::common_internal::ValueVariant::ValueVariant<cel::StringValue, cel::StringValue const&>(std::__1::in_place_type_t<cel::StringValue>, cel::StringValue const&)
Line
Count
Source
488
5.72k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
5.72k
    static_assert(alignof(T) <= kValueVariantAlign);
490
5.72k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
5.72k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
5.72k
                                            T(std::forward<Args>(args)...));
494
5.72k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::NullValue, cel::NullValue>(std::__1::in_place_type_t<cel::NullValue>, cel::NullValue&&)
Line
Count
Source
488
730
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
730
    static_assert(alignof(T) <= kValueVariantAlign);
490
730
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
730
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
730
                                            T(std::forward<Args>(args)...));
494
730
  }
cel::common_internal::ValueVariant::ValueVariant<cel::DoubleValue, cel::DoubleValue>(std::__1::in_place_type_t<cel::DoubleValue>, cel::DoubleValue&&)
Line
Count
Source
488
139k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
139k
    static_assert(alignof(T) <= kValueVariantAlign);
490
139k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
139k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
139k
                                            T(std::forward<Args>(args)...));
494
139k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::BytesValue, cel::BytesValue>(std::__1::in_place_type_t<cel::BytesValue>, cel::BytesValue&&)
Line
Count
Source
488
39.3k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
39.3k
    static_assert(alignof(T) <= kValueVariantAlign);
490
39.3k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
39.3k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
39.3k
                                            T(std::forward<Args>(args)...));
494
39.3k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::DurationValue, cel::DurationValue>(std::__1::in_place_type_t<cel::DurationValue>, cel::DurationValue&&)
Line
Count
Source
488
48.2k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
48.2k
    static_assert(alignof(T) <= kValueVariantAlign);
490
48.2k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
48.2k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
48.2k
                                            T(std::forward<Args>(args)...));
494
48.2k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::TimestampValue, cel::TimestampValue>(std::__1::in_place_type_t<cel::TimestampValue>, cel::TimestampValue&&)
Line
Count
Source
488
71.1k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
71.1k
    static_assert(alignof(T) <= kValueVariantAlign);
490
71.1k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
71.1k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
71.1k
                                            T(std::forward<Args>(args)...));
494
71.1k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::OpaqueValue, cel::OpaqueValue const&>(std::__1::in_place_type_t<cel::OpaqueValue>, cel::OpaqueValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomListValue, cel::CustomListValue const&>(std::__1::in_place_type_t<cel::CustomListValue>, cel::CustomListValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedRepeatedFieldValue, cel::ParsedRepeatedFieldValue const&>(std::__1::in_place_type_t<cel::ParsedRepeatedFieldValue>, cel::ParsedRepeatedFieldValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonListValue, cel::ParsedJsonListValue const&>(std::__1::in_place_type_t<cel::ParsedJsonListValue>, cel::ParsedJsonListValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyListValue, cel::common_internal::LegacyListValue const&>(std::__1::in_place_type_t<cel::common_internal::LegacyListValue>, cel::common_internal::LegacyListValue const&)
cel::common_internal::ValueVariant::ValueVariant<cel::CustomListValue, cel::CustomListValue const>(std::__1::in_place_type_t<cel::CustomListValue>, cel::CustomListValue const&&)
Line
Count
Source
488
1.87M
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
1.87M
    static_assert(alignof(T) <= kValueVariantAlign);
490
1.87M
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
1.87M
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
1.87M
                                            T(std::forward<Args>(args)...));
494
1.87M
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedRepeatedFieldValue, cel::ParsedRepeatedFieldValue const>(std::__1::in_place_type_t<cel::ParsedRepeatedFieldValue>, cel::ParsedRepeatedFieldValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonListValue, cel::ParsedJsonListValue const>(std::__1::in_place_type_t<cel::ParsedJsonListValue>, cel::ParsedJsonListValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyListValue, cel::common_internal::LegacyListValue const>(std::__1::in_place_type_t<cel::common_internal::LegacyListValue>, cel::common_internal::LegacyListValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomMapValue, cel::CustomMapValue const&>(std::__1::in_place_type_t<cel::CustomMapValue>, cel::CustomMapValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMapFieldValue, cel::ParsedMapFieldValue const&>(std::__1::in_place_type_t<cel::ParsedMapFieldValue>, cel::ParsedMapFieldValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonMapValue, cel::ParsedJsonMapValue const&>(std::__1::in_place_type_t<cel::ParsedJsonMapValue>, cel::ParsedJsonMapValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyMapValue, cel::common_internal::LegacyMapValue const&>(std::__1::in_place_type_t<cel::common_internal::LegacyMapValue>, cel::common_internal::LegacyMapValue const&)
cel::common_internal::ValueVariant::ValueVariant<cel::CustomMapValue, cel::CustomMapValue const>(std::__1::in_place_type_t<cel::CustomMapValue>, cel::CustomMapValue const&&)
Line
Count
Source
488
672k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
672k
    static_assert(alignof(T) <= kValueVariantAlign);
490
672k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
672k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
672k
                                            T(std::forward<Args>(args)...));
494
672k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMapFieldValue, cel::ParsedMapFieldValue const>(std::__1::in_place_type_t<cel::ParsedMapFieldValue>, cel::ParsedMapFieldValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonMapValue, cel::ParsedJsonMapValue const>(std::__1::in_place_type_t<cel::ParsedJsonMapValue>, cel::ParsedJsonMapValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyMapValue, cel::common_internal::LegacyMapValue const>(std::__1::in_place_type_t<cel::common_internal::LegacyMapValue>, cel::common_internal::LegacyMapValue const&&)
cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonListValue, cel::ParsedJsonListValue>(std::__1::in_place_type_t<cel::ParsedJsonListValue>, cel::ParsedJsonListValue&&)
Line
Count
Source
488
155k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
155k
    static_assert(alignof(T) <= kValueVariantAlign);
490
155k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
155k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
155k
                                            T(std::forward<Args>(args)...));
494
155k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonMapValue, cel::ParsedJsonMapValue>(std::__1::in_place_type_t<cel::ParsedJsonMapValue>, cel::ParsedJsonMapValue&&)
Line
Count
Source
488
26.1k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
26.1k
    static_assert(alignof(T) <= kValueVariantAlign);
490
26.1k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
26.1k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
26.1k
                                            T(std::forward<Args>(args)...));
494
26.1k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomStructValue, cel::CustomStructValue const&>(std::__1::in_place_type_t<cel::CustomStructValue>, cel::CustomStructValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue, cel::ParsedMessageValue const&>(std::__1::in_place_type_t<cel::ParsedMessageValue>, cel::ParsedMessageValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyStructValue, cel::common_internal::LegacyStructValue const&>(std::__1::in_place_type_t<cel::common_internal::LegacyStructValue>, cel::common_internal::LegacyStructValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomStructValue, cel::CustomStructValue const>(std::__1::in_place_type_t<cel::CustomStructValue>, cel::CustomStructValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue, cel::ParsedMessageValue const>(std::__1::in_place_type_t<cel::ParsedMessageValue>, cel::ParsedMessageValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyStructValue, cel::common_internal::LegacyStructValue const>(std::__1::in_place_type_t<cel::common_internal::LegacyStructValue>, cel::common_internal::LegacyStructValue const&&)
cel::common_internal::ValueVariant::ValueVariant<cel::CustomListValue, cel::CustomListValue&>(std::__1::in_place_type_t<cel::CustomListValue>, cel::CustomListValue&)
Line
Count
Source
488
1
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
1
    static_assert(alignof(T) <= kValueVariantAlign);
490
1
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
1
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
1
                                            T(std::forward<Args>(args)...));
494
1
  }
cel::common_internal::ValueVariant::ValueVariant<cel::CustomMapValue, cel::CustomMapValue&>(std::__1::in_place_type_t<cel::CustomMapValue>, cel::CustomMapValue&)
Line
Count
Source
488
1
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
1
    static_assert(alignof(T) <= kValueVariantAlign);
490
1
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
1
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
1
                                            T(std::forward<Args>(args)...));
494
1
  }
cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue, cel::ParsedMessageValue&>(std::__1::in_place_type_t<cel::ParsedMessageValue>, cel::ParsedMessageValue&)
Line
Count
Source
488
19.0k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
19.0k
    static_assert(alignof(T) <= kValueVariantAlign);
490
19.0k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
19.0k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
19.0k
                                            T(std::forward<Args>(args)...));
494
19.0k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyStructValue, cel::common_internal::LegacyStructValue>(std::__1::in_place_type_t<cel::common_internal::LegacyStructValue>, cel::common_internal::LegacyStructValue&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::NullValue, cel::NullValue const&>(std::__1::in_place_type_t<cel::NullValue>, cel::NullValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::BoolValue, cel::BoolValue const&>(std::__1::in_place_type_t<cel::BoolValue>, cel::BoolValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::IntValue, cel::IntValue const&>(std::__1::in_place_type_t<cel::IntValue>, cel::IntValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::UintValue, cel::UintValue const&>(std::__1::in_place_type_t<cel::UintValue>, cel::UintValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::DoubleValue, cel::DoubleValue const&>(std::__1::in_place_type_t<cel::DoubleValue>, cel::DoubleValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::DurationValue, cel::DurationValue const&>(std::__1::in_place_type_t<cel::DurationValue>, cel::DurationValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::TimestampValue, cel::TimestampValue const&>(std::__1::in_place_type_t<cel::TimestampValue>, cel::TimestampValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::TypeValue, cel::TypeValue const&>(std::__1::in_place_type_t<cel::TypeValue>, cel::TypeValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedRepeatedFieldValue, cel::ParsedRepeatedFieldValue>(std::__1::in_place_type_t<cel::ParsedRepeatedFieldValue>, cel::ParsedRepeatedFieldValue&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMapFieldValue, cel::ParsedMapFieldValue>(std::__1::in_place_type_t<cel::ParsedMapFieldValue>, cel::ParsedMapFieldValue&&)
cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue, cel::ParsedMessageValue>(std::__1::in_place_type_t<cel::ParsedMessageValue>, cel::ParsedMessageValue&&)
Line
Count
Source
488
244k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
244k
    static_assert(alignof(T) <= kValueVariantAlign);
490
244k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
244k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
244k
                                            T(std::forward<Args>(args)...));
494
244k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomStructValue, cel::CustomStructValue>(std::__1::in_place_type_t<cel::CustomStructValue>, cel::CustomStructValue&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::OpaqueValue, cel::OpaqueValue>(std::__1::in_place_type_t<cel::OpaqueValue>, cel::OpaqueValue&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::UnknownValue, cel::UnknownValue const&>(std::__1::in_place_type_t<cel::UnknownValue>, cel::UnknownValue const&)
495
496
  template <typename T, typename = std::enable_if_t<
497
                            IsValueAlternativeV<absl::remove_cvref_t<T>>>>
498
  explicit ValueVariant(T&& value)
499
2.54M
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
2.54M
                     std::forward<T>(value)) {}
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomListValue const&, void>(cel::CustomListValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedRepeatedFieldValue const&, void>(cel::ParsedRepeatedFieldValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonListValue const&, void>(cel::ParsedJsonListValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyListValue const&, void>(cel::common_internal::LegacyListValue const&)
cel::common_internal::ValueVariant::ValueVariant<cel::CustomListValue const, void>(cel::CustomListValue const&&)
Line
Count
Source
499
1.87M
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
1.87M
                     std::forward<T>(value)) {}
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedRepeatedFieldValue const, void>(cel::ParsedRepeatedFieldValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonListValue const, void>(cel::ParsedJsonListValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyListValue const, void>(cel::common_internal::LegacyListValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomMapValue const&, void>(cel::CustomMapValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMapFieldValue const&, void>(cel::ParsedMapFieldValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonMapValue const&, void>(cel::ParsedJsonMapValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyMapValue const&, void>(cel::common_internal::LegacyMapValue const&)
cel::common_internal::ValueVariant::ValueVariant<cel::CustomMapValue const, void>(cel::CustomMapValue const&&)
Line
Count
Source
499
672k
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
672k
                     std::forward<T>(value)) {}
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMapFieldValue const, void>(cel::ParsedMapFieldValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonMapValue const, void>(cel::ParsedJsonMapValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyMapValue const, void>(cel::common_internal::LegacyMapValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomStructValue const&, void>(cel::CustomStructValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue const&, void>(cel::ParsedMessageValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyStructValue const&, void>(cel::common_internal::LegacyStructValue const&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::CustomStructValue const, void>(cel::CustomStructValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue const, void>(cel::ParsedMessageValue const&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyStructValue const, void>(cel::common_internal::LegacyStructValue const&&)
501
502
51.3M
  ValueKind kind() const { return kind_; }
503
504
  template <typename T>
505
5.99M
  void Assign(T&& value) {
506
5.99M
    using U = absl::remove_cvref_t<T>;
507
508
5.99M
    static_assert(alignof(U) <= kValueVariantAlign);
509
5.99M
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
5.99M
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
2.56M
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
159k
        SlowDestruct();
514
159k
      }
515
2.56M
      index_ = ValueAlternative<U>::kIndex;
516
2.56M
      kind_ = ValueAlternative<U>::kKind;
517
2.56M
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
2.56M
                                              U(std::forward<T>(value)));
519
3.42M
    } else {
520
      // U is not always trivial. See if the current active alternative is U. If
521
      // it is, we can just do a simple assignment without having to destruct
522
      // first. Otherwise fallback to destruct and construct.
523
3.42M
      if (index_ == ValueAlternative<U>::kIndex) {
524
0
        *At<U>() = std::forward<T>(value);
525
0
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
3.42M
      } else {
527
3.42M
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
1.27k
          SlowDestruct();
529
1.27k
        }
530
3.42M
        index_ = ValueAlternative<U>::kIndex;
531
3.42M
        kind_ = ValueAlternative<U>::kKind;
532
3.42M
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
3.42M
                                                U(std::forward<T>(value)));
534
3.42M
      }
535
3.42M
    }
536
5.99M
  }
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::OpaqueValue const&>(cel::OpaqueValue const&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::OpaqueValue>(cel::OpaqueValue&&)
void cel::common_internal::ValueVariant::Assign<cel::ErrorValue>(cel::ErrorValue&&)
Line
Count
Source
505
3.42M
  void Assign(T&& value) {
506
3.42M
    using U = absl::remove_cvref_t<T>;
507
508
3.42M
    static_assert(alignof(U) <= kValueVariantAlign);
509
3.42M
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
        SlowDestruct();
514
      }
515
      index_ = ValueAlternative<U>::kIndex;
516
      kind_ = ValueAlternative<U>::kKind;
517
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
                                              U(std::forward<T>(value)));
519
3.42M
    } else {
520
      // U is not always trivial. See if the current active alternative is U. If
521
      // it is, we can just do a simple assignment without having to destruct
522
      // first. Otherwise fallback to destruct and construct.
523
3.42M
      if (index_ == ValueAlternative<U>::kIndex) {
524
0
        *At<U>() = std::forward<T>(value);
525
0
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
3.42M
      } else {
527
3.42M
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
1.27k
          SlowDestruct();
529
1.27k
        }
530
3.42M
        index_ = ValueAlternative<U>::kIndex;
531
3.42M
        kind_ = ValueAlternative<U>::kKind;
532
3.42M
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
3.42M
                                                U(std::forward<T>(value)));
534
3.42M
      }
535
3.42M
    }
536
3.42M
  }
void cel::common_internal::ValueVariant::Assign<cel::NullValue>(cel::NullValue&&)
Line
Count
Source
505
2.13M
  void Assign(T&& value) {
506
2.13M
    using U = absl::remove_cvref_t<T>;
507
508
2.13M
    static_assert(alignof(U) <= kValueVariantAlign);
509
2.13M
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
2.13M
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
2.13M
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
158k
        SlowDestruct();
514
158k
      }
515
2.13M
      index_ = ValueAlternative<U>::kIndex;
516
2.13M
      kind_ = ValueAlternative<U>::kKind;
517
2.13M
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
2.13M
                                              U(std::forward<T>(value)));
519
    } else {
520
      // U is not always trivial. See if the current active alternative is U. If
521
      // it is, we can just do a simple assignment without having to destruct
522
      // first. Otherwise fallback to destruct and construct.
523
      if (index_ == ValueAlternative<U>::kIndex) {
524
        *At<U>() = std::forward<T>(value);
525
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
      } else {
527
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
          SlowDestruct();
529
        }
530
        index_ = ValueAlternative<U>::kIndex;
531
        kind_ = ValueAlternative<U>::kKind;
532
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
                                                U(std::forward<T>(value)));
534
      }
535
    }
536
2.13M
  }
void cel::common_internal::ValueVariant::Assign<cel::BoolValue>(cel::BoolValue&&)
Line
Count
Source
505
170k
  void Assign(T&& value) {
506
170k
    using U = absl::remove_cvref_t<T>;
507
508
170k
    static_assert(alignof(U) <= kValueVariantAlign);
509
170k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
170k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
170k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
369
        SlowDestruct();
514
369
      }
515
170k
      index_ = ValueAlternative<U>::kIndex;
516
170k
      kind_ = ValueAlternative<U>::kKind;
517
170k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
170k
                                              U(std::forward<T>(value)));
519
    } else {
520
      // U is not always trivial. See if the current active alternative is U. If
521
      // it is, we can just do a simple assignment without having to destruct
522
      // first. Otherwise fallback to destruct and construct.
523
      if (index_ == ValueAlternative<U>::kIndex) {
524
        *At<U>() = std::forward<T>(value);
525
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
      } else {
527
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
          SlowDestruct();
529
        }
530
        index_ = ValueAlternative<U>::kIndex;
531
        kind_ = ValueAlternative<U>::kKind;
532
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
                                                U(std::forward<T>(value)));
534
      }
535
    }
536
170k
  }
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::UnknownValue>(cel::UnknownValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::CustomListValue>(cel::CustomListValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::CustomMapValue>(cel::CustomMapValue&&)
void cel::common_internal::ValueVariant::Assign<cel::IntValue>(cel::IntValue&&)
Line
Count
Source
505
17.5k
  void Assign(T&& value) {
506
17.5k
    using U = absl::remove_cvref_t<T>;
507
508
17.5k
    static_assert(alignof(U) <= kValueVariantAlign);
509
17.5k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
17.5k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
17.5k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
17.5k
      index_ = ValueAlternative<U>::kIndex;
516
17.5k
      kind_ = ValueAlternative<U>::kKind;
517
17.5k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
17.5k
                                              U(std::forward<T>(value)));
519
    } else {
520
      // U is not always trivial. See if the current active alternative is U. If
521
      // it is, we can just do a simple assignment without having to destruct
522
      // first. Otherwise fallback to destruct and construct.
523
      if (index_ == ValueAlternative<U>::kIndex) {
524
        *At<U>() = std::forward<T>(value);
525
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
      } else {
527
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
          SlowDestruct();
529
        }
530
        index_ = ValueAlternative<U>::kIndex;
531
        kind_ = ValueAlternative<U>::kKind;
532
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
                                                U(std::forward<T>(value)));
534
      }
535
    }
536
17.5k
  }
void cel::common_internal::ValueVariant::Assign<cel::common_internal::LegacyStructValue>(cel::common_internal::LegacyStructValue&&)
Line
Count
Source
505
244k
  void Assign(T&& value) {
506
244k
    using U = absl::remove_cvref_t<T>;
507
508
244k
    static_assert(alignof(U) <= kValueVariantAlign);
509
244k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
244k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
244k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
244k
      index_ = ValueAlternative<U>::kIndex;
516
244k
      kind_ = ValueAlternative<U>::kKind;
517
244k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
244k
                                              U(std::forward<T>(value)));
519
    } else {
520
      // U is not always trivial. See if the current active alternative is U. If
521
      // it is, we can just do a simple assignment without having to destruct
522
      // first. Otherwise fallback to destruct and construct.
523
      if (index_ == ValueAlternative<U>::kIndex) {
524
        *At<U>() = std::forward<T>(value);
525
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
      } else {
527
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
          SlowDestruct();
529
        }
530
        index_ = ValueAlternative<U>::kIndex;
531
        kind_ = ValueAlternative<U>::kKind;
532
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
                                                U(std::forward<T>(value)));
534
      }
535
    }
536
244k
  }
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::UintValue>(cel::UintValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::DoubleValue>(cel::DoubleValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::DurationValue>(cel::DurationValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::TimestampValue>(cel::TimestampValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::StringValue>(cel::StringValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::StringValue const&>(cel::StringValue const&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::BytesValue>(cel::BytesValue&&)
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::TypeValue>(cel::TypeValue&&)
537
538
  template <typename T>
539
64.2M
  bool Is() const {
540
64.2M
    return index_ == ValueAlternative<T>::kIndex;
541
64.2M
  }
bool cel::common_internal::ValueVariant::Is<cel::BoolValue>() const
Line
Count
Source
539
555k
  bool Is() const {
540
555k
    return index_ == ValueAlternative<T>::kIndex;
541
555k
  }
bool cel::common_internal::ValueVariant::Is<cel::BytesValue>() const
Line
Count
Source
539
34.1k
  bool Is() const {
540
34.1k
    return index_ == ValueAlternative<T>::kIndex;
541
34.1k
  }
bool cel::common_internal::ValueVariant::Is<cel::DoubleValue>() const
Line
Count
Source
539
535k
  bool Is() const {
540
535k
    return index_ == ValueAlternative<T>::kIndex;
541
535k
  }
bool cel::common_internal::ValueVariant::Is<cel::DurationValue>() const
Line
Count
Source
539
16.1k
  bool Is() const {
540
16.1k
    return index_ == ValueAlternative<T>::kIndex;
541
16.1k
  }
bool cel::common_internal::ValueVariant::Is<cel::ErrorValue>() const
Line
Count
Source
539
34.5M
  bool Is() const {
540
34.5M
    return index_ == ValueAlternative<T>::kIndex;
541
34.5M
  }
bool cel::common_internal::ValueVariant::Is<cel::IntValue>() const
Line
Count
Source
539
1.75M
  bool Is() const {
540
1.75M
    return index_ == ValueAlternative<T>::kIndex;
541
1.75M
  }
bool cel::common_internal::ValueVariant::Is<cel::common_internal::LegacyListValue>() const
Line
Count
Source
539
2.54M
  bool Is() const {
540
2.54M
    return index_ == ValueAlternative<T>::kIndex;
541
2.54M
  }
bool cel::common_internal::ValueVariant::Is<cel::CustomListValue>() const
Line
Count
Source
539
2.54M
  bool Is() const {
540
2.54M
    return index_ == ValueAlternative<T>::kIndex;
541
2.54M
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedRepeatedFieldValue>() const
Line
Count
Source
539
25.6k
  bool Is() const {
540
25.6k
    return index_ == ValueAlternative<T>::kIndex;
541
25.6k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedJsonListValue>() const
Line
Count
Source
539
25.6k
  bool Is() const {
540
25.6k
    return index_ == ValueAlternative<T>::kIndex;
541
25.6k
  }
bool cel::common_internal::ValueVariant::Is<cel::common_internal::LegacyMapValue>() const
Line
Count
Source
539
686k
  bool Is() const {
540
686k
    return index_ == ValueAlternative<T>::kIndex;
541
686k
  }
bool cel::common_internal::ValueVariant::Is<cel::CustomMapValue>() const
Line
Count
Source
539
686k
  bool Is() const {
540
686k
    return index_ == ValueAlternative<T>::kIndex;
541
686k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedMapFieldValue>() const
Line
Count
Source
539
322k
  bool Is() const {
540
322k
    return index_ == ValueAlternative<T>::kIndex;
541
322k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedJsonMapValue>() const
Line
Count
Source
539
322k
  bool Is() const {
540
322k
    return index_ == ValueAlternative<T>::kIndex;
541
322k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedMessageValue>() const
Line
Count
Source
539
852k
  bool Is() const {
540
852k
    return index_ == ValueAlternative<T>::kIndex;
541
852k
  }
bool cel::common_internal::ValueVariant::Is<cel::NullValue>() const
Line
Count
Source
539
1.85k
  bool Is() const {
540
1.85k
    return index_ == ValueAlternative<T>::kIndex;
541
1.85k
  }
Unexecuted instantiation: bool cel::common_internal::ValueVariant::Is<cel::OpaqueValue>() const
bool cel::common_internal::ValueVariant::Is<cel::CustomStructValue>() const
Line
Count
Source
539
128k
  bool Is() const {
540
128k
    return index_ == ValueAlternative<T>::kIndex;
541
128k
  }
bool cel::common_internal::ValueVariant::Is<cel::StringValue>() const
Line
Count
Source
539
369k
  bool Is() const {
540
369k
    return index_ == ValueAlternative<T>::kIndex;
541
369k
  }
bool cel::common_internal::ValueVariant::Is<cel::common_internal::LegacyStructValue>() const
Line
Count
Source
539
783k
  bool Is() const {
540
783k
    return index_ == ValueAlternative<T>::kIndex;
541
783k
  }
bool cel::common_internal::ValueVariant::Is<cel::TimestampValue>() const
Line
Count
Source
539
33.8k
  bool Is() const {
540
33.8k
    return index_ == ValueAlternative<T>::kIndex;
541
33.8k
  }
bool cel::common_internal::ValueVariant::Is<cel::TypeValue>() const
Line
Count
Source
539
309
  bool Is() const {
540
309
    return index_ == ValueAlternative<T>::kIndex;
541
309
  }
bool cel::common_internal::ValueVariant::Is<cel::UintValue>() const
Line
Count
Source
539
865k
  bool Is() const {
540
865k
    return index_ == ValueAlternative<T>::kIndex;
541
865k
  }
bool cel::common_internal::ValueVariant::Is<cel::UnknownValue>() const
Line
Count
Source
539
16.6M
  bool Is() const {
540
16.6M
    return index_ == ValueAlternative<T>::kIndex;
541
16.6M
  }
542
543
  template <typename T>
544
      T& Get() & ABSL_ATTRIBUTE_LIFETIME_BOUND {
545
    ABSL_DCHECK(Is<T>());
546
547
    return *At<T>();
548
  }
549
550
  template <typename T>
551
22.3M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
22.3M
    ABSL_DCHECK(Is<T>());
553
554
22.3M
    return *At<T>();
555
22.3M
  }
cel::BoolValue const& cel::common_internal::ValueVariant::Get<cel::BoolValue>() const &
Line
Count
Source
551
1.74M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
1.74M
    ABSL_DCHECK(Is<T>());
553
554
1.74M
    return *At<T>();
555
1.74M
  }
cel::NullValue const& cel::common_internal::ValueVariant::Get<cel::NullValue>() const &
Line
Count
Source
551
1.98k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
1.98k
    ABSL_DCHECK(Is<T>());
553
554
1.98k
    return *At<T>();
555
1.98k
  }
cel::IntValue const& cel::common_internal::ValueVariant::Get<cel::IntValue>() const &
Line
Count
Source
551
17.5M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
17.5M
    ABSL_DCHECK(Is<T>());
553
554
17.5M
    return *At<T>();
555
17.5M
  }
cel::UintValue const& cel::common_internal::ValueVariant::Get<cel::UintValue>() const &
Line
Count
Source
551
616k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
616k
    ABSL_DCHECK(Is<T>());
553
554
616k
    return *At<T>();
555
616k
  }
cel::DoubleValue const& cel::common_internal::ValueVariant::Get<cel::DoubleValue>() const &
Line
Count
Source
551
656k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
656k
    ABSL_DCHECK(Is<T>());
553
554
656k
    return *At<T>();
555
656k
  }
cel::DurationValue const& cel::common_internal::ValueVariant::Get<cel::DurationValue>() const &
Line
Count
Source
551
35.4k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
35.4k
    ABSL_DCHECK(Is<T>());
553
554
35.4k
    return *At<T>();
555
35.4k
  }
cel::TimestampValue const& cel::common_internal::ValueVariant::Get<cel::TimestampValue>() const &
Line
Count
Source
551
34.7k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
34.7k
    ABSL_DCHECK(Is<T>());
553
554
34.7k
    return *At<T>();
555
34.7k
  }
cel::TypeValue const& cel::common_internal::ValueVariant::Get<cel::TypeValue>() const &
Line
Count
Source
551
15.9k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
15.9k
    ABSL_DCHECK(Is<T>());
553
554
15.9k
    return *At<T>();
555
15.9k
  }
Unexecuted instantiation: cel::common_internal::LegacyListValue const& cel::common_internal::ValueVariant::Get<cel::common_internal::LegacyListValue>() const &
cel::ParsedJsonListValue const& cel::common_internal::ValueVariant::Get<cel::ParsedJsonListValue>() const &
Line
Count
Source
551
2.17k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
2.17k
    ABSL_DCHECK(Is<T>());
553
554
2.17k
    return *At<T>();
555
2.17k
  }
Unexecuted instantiation: cel::ParsedRepeatedFieldValue const& cel::common_internal::ValueVariant::Get<cel::ParsedRepeatedFieldValue>() const &
cel::CustomListValue const& cel::common_internal::ValueVariant::Get<cel::CustomListValue>() const &
Line
Count
Source
551
183k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
183k
    ABSL_DCHECK(Is<T>());
553
554
183k
    return *At<T>();
555
183k
  }
Unexecuted instantiation: cel::common_internal::LegacyMapValue const& cel::common_internal::ValueVariant::Get<cel::common_internal::LegacyMapValue>() const &
cel::ParsedJsonMapValue const& cel::common_internal::ValueVariant::Get<cel::ParsedJsonMapValue>() const &
Line
Count
Source
551
2.39k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
2.39k
    ABSL_DCHECK(Is<T>());
553
554
2.39k
    return *At<T>();
555
2.39k
  }
Unexecuted instantiation: cel::ParsedMapFieldValue const& cel::common_internal::ValueVariant::Get<cel::ParsedMapFieldValue>() const &
cel::CustomMapValue const& cel::common_internal::ValueVariant::Get<cel::CustomMapValue>() const &
Line
Count
Source
551
177k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
177k
    ABSL_DCHECK(Is<T>());
553
554
177k
    return *At<T>();
555
177k
  }
cel::common_internal::LegacyStructValue const& cel::common_internal::ValueVariant::Get<cel::common_internal::LegacyStructValue>() const &
Line
Count
Source
551
57.3k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
57.3k
    ABSL_DCHECK(Is<T>());
553
554
57.3k
    return *At<T>();
555
57.3k
  }
Unexecuted instantiation: cel::ParsedMessageValue const& cel::common_internal::ValueVariant::Get<cel::ParsedMessageValue>() const &
Unexecuted instantiation: cel::CustomStructValue const& cel::common_internal::ValueVariant::Get<cel::CustomStructValue>() const &
Unexecuted instantiation: cel::OpaqueValue const& cel::common_internal::ValueVariant::Get<cel::OpaqueValue>() const &
cel::BytesValue const& cel::common_internal::ValueVariant::Get<cel::BytesValue>() const &
Line
Count
Source
551
50.0k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
50.0k
    ABSL_DCHECK(Is<T>());
553
554
50.0k
    return *At<T>();
555
50.0k
  }
cel::StringValue const& cel::common_internal::ValueVariant::Get<cel::StringValue>() const &
Line
Count
Source
551
1.21M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
1.21M
    ABSL_DCHECK(Is<T>());
553
554
1.21M
    return *At<T>();
555
1.21M
  }
cel::ErrorValue const& cel::common_internal::ValueVariant::Get<cel::ErrorValue>() const &
Line
Count
Source
551
9.59k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
9.59k
    ABSL_DCHECK(Is<T>());
553
554
9.59k
    return *At<T>();
555
9.59k
  }
Unexecuted instantiation: cel::UnknownValue const& cel::common_internal::ValueVariant::Get<cel::UnknownValue>() const &
556
557
  template <typename T>
558
0
      T&& Get() && ABSL_ATTRIBUTE_LIFETIME_BOUND {
559
0
    ABSL_DCHECK(Is<T>());
560
561
0
    return std::move(*At<T>());
562
0
  }
Unexecuted instantiation: cel::BytesValue&& cel::common_internal::ValueVariant::Get<cel::BytesValue>() &&
Unexecuted instantiation: cel::ErrorValue&& cel::common_internal::ValueVariant::Get<cel::ErrorValue>() &&
Unexecuted instantiation: cel::ParsedMessageValue&& cel::common_internal::ValueVariant::Get<cel::ParsedMessageValue>() &&
Unexecuted instantiation: cel::OpaqueValue&& cel::common_internal::ValueVariant::Get<cel::OpaqueValue>() &&
Unexecuted instantiation: cel::ParsedJsonListValue&& cel::common_internal::ValueVariant::Get<cel::ParsedJsonListValue>() &&
Unexecuted instantiation: cel::ParsedJsonMapValue&& cel::common_internal::ValueVariant::Get<cel::ParsedJsonMapValue>() &&
Unexecuted instantiation: cel::CustomListValue&& cel::common_internal::ValueVariant::Get<cel::CustomListValue>() &&
Unexecuted instantiation: cel::CustomMapValue&& cel::common_internal::ValueVariant::Get<cel::CustomMapValue>() &&
Unexecuted instantiation: cel::ParsedMapFieldValue&& cel::common_internal::ValueVariant::Get<cel::ParsedMapFieldValue>() &&
Unexecuted instantiation: cel::ParsedRepeatedFieldValue&& cel::common_internal::ValueVariant::Get<cel::ParsedRepeatedFieldValue>() &&
Unexecuted instantiation: cel::CustomStructValue&& cel::common_internal::ValueVariant::Get<cel::CustomStructValue>() &&
Unexecuted instantiation: cel::StringValue&& cel::common_internal::ValueVariant::Get<cel::StringValue>() &&
Unexecuted instantiation: cel::TypeValue&& cel::common_internal::ValueVariant::Get<cel::TypeValue>() &&
Unexecuted instantiation: cel::UnknownValue&& cel::common_internal::ValueVariant::Get<cel::UnknownValue>() &&
563
564
  template <typename T>
565
  const T&& Get() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND {
566
    ABSL_DCHECK(Is<T>());
567
568
    return std::move(*At<T>());
569
  }
570
571
  template <typename T>
572
0
  T* absl_nullable As() ABSL_ATTRIBUTE_LIFETIME_BOUND {
573
0
    if (Is<T>()) {
574
0
      return At<T>();
575
0
    }
576
0
    return nullptr;
577
0
  }
Unexecuted instantiation: cel::BytesValue* cel::common_internal::ValueVariant::As<cel::BytesValue>()
Unexecuted instantiation: cel::ErrorValue* cel::common_internal::ValueVariant::As<cel::ErrorValue>()
Unexecuted instantiation: cel::common_internal::LegacyListValue* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyListValue>()
Unexecuted instantiation: cel::CustomListValue* cel::common_internal::ValueVariant::As<cel::CustomListValue>()
Unexecuted instantiation: cel::ParsedRepeatedFieldValue* cel::common_internal::ValueVariant::As<cel::ParsedRepeatedFieldValue>()
Unexecuted instantiation: cel::ParsedJsonListValue* cel::common_internal::ValueVariant::As<cel::ParsedJsonListValue>()
Unexecuted instantiation: cel::common_internal::LegacyMapValue* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyMapValue>()
Unexecuted instantiation: cel::CustomMapValue* cel::common_internal::ValueVariant::As<cel::CustomMapValue>()
Unexecuted instantiation: cel::ParsedMapFieldValue* cel::common_internal::ValueVariant::As<cel::ParsedMapFieldValue>()
Unexecuted instantiation: cel::ParsedJsonMapValue* cel::common_internal::ValueVariant::As<cel::ParsedJsonMapValue>()
Unexecuted instantiation: cel::ParsedMessageValue* cel::common_internal::ValueVariant::As<cel::ParsedMessageValue>()
Unexecuted instantiation: cel::OpaqueValue* cel::common_internal::ValueVariant::As<cel::OpaqueValue>()
Unexecuted instantiation: cel::CustomStructValue* cel::common_internal::ValueVariant::As<cel::CustomStructValue>()
Unexecuted instantiation: cel::StringValue* cel::common_internal::ValueVariant::As<cel::StringValue>()
Unexecuted instantiation: cel::common_internal::LegacyStructValue* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyStructValue>()
Unexecuted instantiation: cel::TypeValue* cel::common_internal::ValueVariant::As<cel::TypeValue>()
Unexecuted instantiation: cel::UnknownValue* cel::common_internal::ValueVariant::As<cel::UnknownValue>()
578
579
  template <typename T>
580
27.4M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
27.4M
    if (Is<T>()) {
582
2.44M
      return At<T>();
583
2.44M
    }
584
25.0M
    return nullptr;
585
27.4M
  }
Unexecuted instantiation: cel::OpaqueValue const* cel::common_internal::ValueVariant::As<cel::OpaqueValue>() const
cel::BoolValue const* cel::common_internal::ValueVariant::As<cel::BoolValue>() const
Line
Count
Source
580
145k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
145k
    if (Is<T>()) {
582
138k
      return At<T>();
583
138k
    }
584
7.71k
    return nullptr;
585
145k
  }
cel::BytesValue const* cel::common_internal::ValueVariant::As<cel::BytesValue>() const
Line
Count
Source
580
2.21k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
2.21k
    if (Is<T>()) {
582
1.70k
      return At<T>();
583
1.70k
    }
584
512
    return nullptr;
585
2.21k
  }
cel::DoubleValue const* cel::common_internal::ValueVariant::As<cel::DoubleValue>() const
Line
Count
Source
580
91.7k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
91.7k
    if (Is<T>()) {
582
79.9k
      return At<T>();
583
79.9k
    }
584
11.7k
    return nullptr;
585
91.7k
  }
cel::DurationValue const* cel::common_internal::ValueVariant::As<cel::DurationValue>() const
Line
Count
Source
580
257
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
257
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
257
    return nullptr;
585
257
  }
cel::ErrorValue const* cel::common_internal::ValueVariant::As<cel::ErrorValue>() const
Line
Count
Source
580
11.4M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
11.4M
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
11.4M
    return nullptr;
585
11.4M
  }
cel::IntValue const* cel::common_internal::ValueVariant::As<cel::IntValue>() const
Line
Count
Source
580
52.2k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
52.2k
    if (Is<T>()) {
582
9.70k
      return At<T>();
583
9.70k
    }
584
42.5k
    return nullptr;
585
52.2k
  }
cel::common_internal::LegacyListValue const* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyListValue>() const
Line
Count
Source
580
1.36M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
1.36M
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
1.36M
    return nullptr;
585
1.36M
  }
cel::CustomListValue const* cel::common_internal::ValueVariant::As<cel::CustomListValue>() const
Line
Count
Source
580
1.36M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
1.36M
    if (Is<T>()) {
582
1.35M
      return At<T>();
583
1.35M
    }
584
17.7k
    return nullptr;
585
1.36M
  }
cel::ParsedRepeatedFieldValue const* cel::common_internal::ValueVariant::As<cel::ParsedRepeatedFieldValue>() const
Line
Count
Source
580
18.6k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
18.6k
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
18.6k
    return nullptr;
585
18.6k
  }
cel::ParsedJsonListValue const* cel::common_internal::ValueVariant::As<cel::ParsedJsonListValue>() const
Line
Count
Source
580
18.6k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
18.6k
    if (Is<T>()) {
582
16.7k
      return At<T>();
583
16.7k
    }
584
1.91k
    return nullptr;
585
18.6k
  }
cel::common_internal::LegacyMapValue const* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyMapValue>() const
Line
Count
Source
580
380k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
380k
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
380k
    return nullptr;
585
380k
  }
cel::CustomMapValue const* cel::common_internal::ValueVariant::As<cel::CustomMapValue>() const
Line
Count
Source
580
380k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
380k
    if (Is<T>()) {
582
354k
      return At<T>();
583
354k
    }
584
25.8k
    return nullptr;
585
380k
  }
cel::ParsedMapFieldValue const* cel::common_internal::ValueVariant::As<cel::ParsedMapFieldValue>() const
Line
Count
Source
580
26.8k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
26.8k
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
26.8k
    return nullptr;
585
26.8k
  }
cel::ParsedJsonMapValue const* cel::common_internal::ValueVariant::As<cel::ParsedJsonMapValue>() const
Line
Count
Source
580
27.0k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
27.0k
    if (Is<T>()) {
582
24.2k
      return At<T>();
583
24.2k
    }
584
2.79k
    return nullptr;
585
27.0k
  }
cel::ParsedMessageValue const* cel::common_internal::ValueVariant::As<cel::ParsedMessageValue>() const
Line
Count
Source
580
263k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
263k
    if (Is<T>()) {
582
263k
      return At<T>();
583
263k
    }
584
146
    return nullptr;
585
263k
  }
Unexecuted instantiation: cel::NullValue const* cel::common_internal::ValueVariant::As<cel::NullValue>() const
cel::CustomStructValue const* cel::common_internal::ValueVariant::As<cel::CustomStructValue>() const
Line
Count
Source
580
73
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
73
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
73
    return nullptr;
585
73
  }
cel::StringValue const* cel::common_internal::ValueVariant::As<cel::StringValue>() const
Line
Count
Source
580
72.5k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
72.5k
    if (Is<T>()) {
582
8.54k
      return At<T>();
583
8.54k
    }
584
64.0k
    return nullptr;
585
72.5k
  }
cel::common_internal::LegacyStructValue const* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyStructValue>() const
Line
Count
Source
580
195k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
195k
    if (Is<T>()) {
582
195k
      return At<T>();
583
195k
    }
584
73
    return nullptr;
585
195k
  }
Unexecuted instantiation: cel::TimestampValue const* cel::common_internal::ValueVariant::As<cel::TimestampValue>() const
cel::TypeValue const* cel::common_internal::ValueVariant::As<cel::TypeValue>() const
Line
Count
Source
580
309
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
309
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
309
    return nullptr;
585
309
  }
cel::UintValue const* cel::common_internal::ValueVariant::As<cel::UintValue>() const
Line
Count
Source
580
53.4k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
53.4k
    if (Is<T>()) {
582
2.64k
      return At<T>();
583
2.64k
    }
584
50.7k
    return nullptr;
585
53.4k
  }
cel::UnknownValue const* cel::common_internal::ValueVariant::As<cel::UnknownValue>() const
Line
Count
Source
580
11.4M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
11.4M
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
11.4M
    return nullptr;
585
11.4M
  }
586
587
  template <typename Visitor>
588
  ABSL_ATTRIBUTE_ALWAYS_INLINE decltype(auto) Visit(Visitor&& visitor) & {
589
    return std::as_const(*this).Visit(std::forward<Visitor>(visitor));
590
  }
591
592
  template <typename Visitor>
593
16.8M
  decltype(auto) Visit(Visitor&& visitor) const& {
594
16.8M
    switch (index_) {
595
1.98k
      case ValueIndex::kNull:
596
1.98k
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
509k
      case ValueIndex::kBool:
598
509k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
15.0M
      case ValueIndex::kInt:
600
15.0M
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
195k
      case ValueIndex::kUint:
602
195k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
305k
      case ValueIndex::kDouble:
604
305k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
18.0k
      case ValueIndex::kDuration:
606
18.0k
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
829
      case ValueIndex::kTimestamp:
608
829
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
3.79k
      case ValueIndex::kType:
610
3.79k
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
2.17k
      case ValueIndex::kParsedJsonList:
614
2.17k
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
183k
      case ValueIndex::kCustomList:
618
183k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
2.39k
      case ValueIndex::kParsedJsonMap:
622
2.39k
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
177k
      case ValueIndex::kCustomMap:
626
177k
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
38.3k
      case ValueIndex::kLegacyStruct:
628
38.3k
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
13.1k
      case ValueIndex::kBytes:
636
13.1k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
426k
      case ValueIndex::kString:
638
426k
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
16.8M
    }
644
16.8M
  }
Unexecuted instantiation: decltype(auto) cel::common_internal::ValueVariant::Visit<cel::NativeTypeTraits<cel::Value, void>::Id(cel::Value const&)::{lambda(auto:1 const&)#1}>(cel::NativeTypeTraits<cel::Value, void>::Id(cel::Value const&)::{lambda(auto:1 const&)#1}&&) const &
decltype(auto) cel::common_internal::ValueVariant::Visit<cel::ArenaTraits<cel::Value>::trivially_destructible(cel::Value const&)::{lambda(auto:1 const&)#1}>(cel::ArenaTraits<cel::Value>::trivially_destructible(cel::Value const&)::{lambda(auto:1 const&)#1}&&) const &
Line
Count
Source
593
11.7M
  decltype(auto) Visit(Visitor&& visitor) const& {
594
11.7M
    switch (index_) {
595
1.28k
      case ValueIndex::kNull:
596
1.28k
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
405k
      case ValueIndex::kBool:
598
405k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
10.3M
      case ValueIndex::kInt:
600
10.3M
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
87.7k
      case ValueIndex::kUint:
602
87.7k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
251k
      case ValueIndex::kDouble:
604
251k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
10.0k
      case ValueIndex::kDuration:
606
10.0k
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
829
      case ValueIndex::kTimestamp:
608
829
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
3.16k
      case ValueIndex::kType:
610
3.16k
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
1.27k
      case ValueIndex::kParsedJsonList:
614
1.27k
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
19.1k
      case ValueIndex::kCustomList:
618
19.1k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
1.20k
      case ValueIndex::kParsedJsonMap:
622
1.20k
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
138k
      case ValueIndex::kCustomMap:
626
138k
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
19.1k
      case ValueIndex::kLegacyStruct:
628
19.1k
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
9.41k
      case ValueIndex::kBytes:
636
9.41k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
379k
      case ValueIndex::kString:
638
379k
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
11.7M
    }
644
11.7M
  }
value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::GetTypeName() const::$_0>(cel::Value::GetTypeName() const::$_0&&) const &
Line
Count
Source
593
5.60k
  decltype(auto) Visit(Visitor&& visitor) const& {
594
5.60k
    switch (index_) {
595
0
      case ValueIndex::kNull:
596
0
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
432
      case ValueIndex::kBool:
598
432
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
1
      case ValueIndex::kInt:
600
1
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
96
      case ValueIndex::kUint:
602
96
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
29
      case ValueIndex::kDouble:
604
29
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
0
      case ValueIndex::kDuration:
606
0
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
289
      case ValueIndex::kType:
610
289
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
0
      case ValueIndex::kParsedJsonList:
614
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
4.75k
      case ValueIndex::kCustomList:
618
4.75k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
0
      case ValueIndex::kParsedJsonMap:
622
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
0
      case ValueIndex::kCustomMap:
626
0
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
0
      case ValueIndex::kLegacyStruct:
628
0
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
0
      case ValueIndex::kBytes:
636
0
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
0
      case ValueIndex::kString:
638
0
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
5.60k
    }
644
5.60k
  }
value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::DebugString() const::$_0>(cel::Value::DebugString() const::$_0&&) const &
Line
Count
Source
593
275k
  decltype(auto) Visit(Visitor&& visitor) const& {
594
275k
    switch (index_) {
595
0
      case ValueIndex::kNull:
596
0
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
860
      case ValueIndex::kBool:
598
860
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
182k
      case ValueIndex::kInt:
600
182k
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
18.5k
      case ValueIndex::kUint:
602
18.5k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
39.2k
      case ValueIndex::kDouble:
604
39.2k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
0
      case ValueIndex::kDuration:
606
0
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
0
      case ValueIndex::kType:
610
0
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
0
      case ValueIndex::kParsedJsonList:
614
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
0
      case ValueIndex::kCustomList:
618
0
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
0
      case ValueIndex::kParsedJsonMap:
622
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
0
      case ValueIndex::kCustomMap:
626
0
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
0
      case ValueIndex::kLegacyStruct:
628
0
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
0
      case ValueIndex::kBytes:
636
0
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
34.5k
      case ValueIndex::kString:
638
34.5k
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
275k
    }
644
275k
  }
Unexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::SerializeTo(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::io::ZeroCopyOutputStream*) const::$_0>(cel::Value::SerializeTo(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::io::ZeroCopyOutputStream*) const::$_0&&) const &
value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::ConvertToJson(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0>(cel::Value::ConvertToJson(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0&&) const &
Line
Count
Source
593
4.59M
  decltype(auto) Visit(Visitor&& visitor) const& {
594
4.59M
    switch (index_) {
595
68
      case ValueIndex::kNull:
596
68
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
97.8k
      case ValueIndex::kBool:
598
97.8k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
4.39M
      case ValueIndex::kInt:
600
4.39M
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
41.4k
      case ValueIndex::kUint:
602
41.4k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
10.9k
      case ValueIndex::kDouble:
604
10.9k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
7.77k
      case ValueIndex::kDuration:
606
7.77k
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
32
      case ValueIndex::kType:
610
32
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
0
      case ValueIndex::kParsedJsonList:
614
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
1.12k
      case ValueIndex::kCustomList:
618
1.12k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
0
      case ValueIndex::kParsedJsonMap:
622
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
36.9k
      case ValueIndex::kCustomMap:
626
36.9k
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
35
      case ValueIndex::kLegacyStruct:
628
35
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
1.53k
      case ValueIndex::kBytes:
636
1.53k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
4.22k
      case ValueIndex::kString:
638
4.22k
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
4.59M
    }
644
4.59M
  }
value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<absl::lts_20260526::Overload<cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_1, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_2, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_3, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_4, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_5> >(absl::lts_20260526::Overload<cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_1, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_2, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_3, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_4, cel::Value::ConvertToJsonArray(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_5>&&) const &
Line
Count
Source
593
154k
  decltype(auto) Visit(Visitor&& visitor) const& {
594
154k
    switch (index_) {
595
0
      case ValueIndex::kNull:
596
0
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
1
      case ValueIndex::kBool:
598
1
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
4
      case ValueIndex::kInt:
600
4
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
1
      case ValueIndex::kUint:
602
1
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
2
      case ValueIndex::kDouble:
604
2
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
0
      case ValueIndex::kDuration:
606
0
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
0
      case ValueIndex::kType:
610
0
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
0
      case ValueIndex::kParsedJsonList:
614
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
154k
      case ValueIndex::kCustomList:
618
154k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
0
      case ValueIndex::kParsedJsonMap:
622
0
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
0
      case ValueIndex::kCustomMap:
626
0
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
0
      case ValueIndex::kLegacyStruct:
628
0
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
0
      case ValueIndex::kBytes:
636
0
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
1
      case ValueIndex::kString:
638
1
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
154k
    }
644
154k
  }
Unexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<absl::lts_20260526::Overload<cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_1, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_2, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_3, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_4, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_5, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_6, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_7, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_8> >(absl::lts_20260526::Overload<cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_0, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_1, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_2, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_3, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_4, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_5, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_6, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_7, cel::Value::ConvertToJsonObject(google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Message*) const::$_8>&&) const &
value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0>(cel::Value::Equal(cel::Value const&, google::protobuf::DescriptorPool const*, google::protobuf::MessageFactory*, google::protobuf::Arena*, cel::Value*) const::$_0&&) const &
Line
Count
Source
593
138k
  decltype(auto) Visit(Visitor&& visitor) const& {
594
138k
    switch (index_) {
595
636
      case ValueIndex::kNull:
596
636
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
4.64k
      case ValueIndex::kBool:
598
4.64k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
44.5k
      case ValueIndex::kInt:
600
44.5k
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
47.9k
      case ValueIndex::kUint:
602
47.9k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
3.54k
      case ValueIndex::kDouble:
604
3.54k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
257
      case ValueIndex::kDuration:
606
257
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
309
      case ValueIndex::kType:
610
309
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
0
      case ValueIndex::kLegacyList:
612
0
        return std::forward<Visitor>(visitor)(Get<LegacyListValue>());
613
900
      case ValueIndex::kParsedJsonList:
614
900
        return std::forward<Visitor>(visitor)(Get<ParsedJsonListValue>());
615
0
      case ValueIndex::kParsedRepeatedField:
616
0
        return std::forward<Visitor>(visitor)(Get<ParsedRepeatedFieldValue>());
617
3.61k
      case ValueIndex::kCustomList:
618
3.61k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
0
      case ValueIndex::kLegacyMap:
620
0
        return std::forward<Visitor>(visitor)(Get<LegacyMapValue>());
621
1.19k
      case ValueIndex::kParsedJsonMap:
622
1.19k
        return std::forward<Visitor>(visitor)(Get<ParsedJsonMapValue>());
623
0
      case ValueIndex::kParsedMapField:
624
0
        return std::forward<Visitor>(visitor)(Get<ParsedMapFieldValue>());
625
2.31k
      case ValueIndex::kCustomMap:
626
2.31k
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
19.1k
      case ValueIndex::kLegacyStruct:
628
19.1k
        return std::forward<Visitor>(visitor)(Get<LegacyStructValue>());
629
0
      case ValueIndex::kParsedMessage:
630
0
        return std::forward<Visitor>(visitor)(Get<ParsedMessageValue>());
631
0
      case ValueIndex::kCustomStruct:
632
0
        return std::forward<Visitor>(visitor)(Get<CustomStructValue>());
633
0
      case ValueIndex::kOpaque:
634
0
        return std::forward<Visitor>(visitor)(Get<OpaqueValue>());
635
2.21k
      case ValueIndex::kBytes:
636
2.21k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
7.69k
      case ValueIndex::kString:
638
7.69k
        return std::forward<Visitor>(visitor)(Get<StringValue>());
639
0
      case ValueIndex::kError:
640
0
        return std::forward<Visitor>(visitor)(Get<ErrorValue>());
641
0
      case ValueIndex::kUnknown:
642
0
        return std::forward<Visitor>(visitor)(Get<UnknownValue>());
643
138k
    }
644
138k
  }
Unexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::IsZeroValue() const::$_0>(cel::Value::IsZeroValue() const::$_0&&) const &
Unexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::Clone(google::protobuf::Arena*) const::$_0>(cel::Value::Clone(google::protobuf::Arena*) const::$_0&&) const &
Unexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, cel::Value const&)::$_0>(cel::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, cel::Value const&)::$_0&&) const &
645
646
  template <typename Visitor>
647
  decltype(auto) Visit(Visitor&& visitor) && {
648
    switch (index_) {
649
      case ValueIndex::kNull:
650
        return std::forward<Visitor>(visitor)(
651
            std::move(*this).Get<NullValue>());
652
      case ValueIndex::kBool:
653
        return std::forward<Visitor>(visitor)(
654
            std::move(*this).Get<BoolValue>());
655
      case ValueIndex::kInt:
656
        return std::forward<Visitor>(visitor)(std::move(*this).Get<IntValue>());
657
      case ValueIndex::kUint:
658
        return std::forward<Visitor>(visitor)(
659
            std::move(*this).Get<UintValue>());
660
      case ValueIndex::kDouble:
661
        return std::forward<Visitor>(visitor)(
662
            std::move(*this).Get<DoubleValue>());
663
      case ValueIndex::kDuration:
664
        return std::forward<Visitor>(visitor)(
665
            std::move(*this).Get<DurationValue>());
666
      case ValueIndex::kTimestamp:
667
        return std::forward<Visitor>(visitor)(
668
            std::move(*this).Get<TimestampValue>());
669
      case ValueIndex::kType:
670
        return std::forward<Visitor>(visitor)(
671
            std::move(*this).Get<TypeValue>());
672
      case ValueIndex::kLegacyList:
673
        return std::forward<Visitor>(visitor)(
674
            std::move(*this).Get<LegacyListValue>());
675
      case ValueIndex::kParsedJsonList:
676
        return std::forward<Visitor>(visitor)(
677
            std::move(*this).Get<ParsedJsonListValue>());
678
      case ValueIndex::kParsedRepeatedField:
679
        return std::forward<Visitor>(visitor)(
680
            std::move(*this).Get<ParsedRepeatedFieldValue>());
681
      case ValueIndex::kCustomList:
682
        return std::forward<Visitor>(visitor)(
683
            std::move(*this).Get<CustomListValue>());
684
      case ValueIndex::kLegacyMap:
685
        return std::forward<Visitor>(visitor)(
686
            std::move(*this).Get<LegacyMapValue>());
687
      case ValueIndex::kParsedJsonMap:
688
        return std::forward<Visitor>(visitor)(
689
            std::move(*this).Get<ParsedJsonMapValue>());
690
      case ValueIndex::kParsedMapField:
691
        return std::forward<Visitor>(visitor)(
692
            std::move(*this).Get<ParsedMapFieldValue>());
693
      case ValueIndex::kCustomMap:
694
        return std::forward<Visitor>(visitor)(
695
            std::move(*this).Get<CustomMapValue>());
696
      case ValueIndex::kLegacyStruct:
697
        return std::forward<Visitor>(visitor)(
698
            std::move(*this).Get<LegacyStructValue>());
699
      case ValueIndex::kParsedMessage:
700
        return std::forward<Visitor>(visitor)(
701
            std::move(*this).Get<ParsedMessageValue>());
702
      case ValueIndex::kCustomStruct:
703
        return std::forward<Visitor>(visitor)(
704
            std::move(*this).Get<CustomStructValue>());
705
      case ValueIndex::kOpaque:
706
        return std::forward<Visitor>(visitor)(
707
            std::move(*this).Get<OpaqueValue>());
708
      case ValueIndex::kBytes:
709
        return std::forward<Visitor>(visitor)(
710
            std::move(*this).Get<BytesValue>());
711
      case ValueIndex::kString:
712
        return std::forward<Visitor>(visitor)(
713
            std::move(*this).Get<StringValue>());
714
      case ValueIndex::kError:
715
        return std::forward<Visitor>(visitor)(
716
            std::move(*this).Get<ErrorValue>());
717
      case ValueIndex::kUnknown:
718
        return std::forward<Visitor>(visitor)(
719
            std::move(*this).Get<UnknownValue>());
720
    }
721
  }
722
723
  template <typename Visitor>
724
  ABSL_ATTRIBUTE_ALWAYS_INLINE decltype(auto) Visit(Visitor&& visitor) const&& {
725
    return Visit(std::forward<Visitor>(visitor));
726
  }
727
728
166k
  friend void swap(ValueVariant& lhs, ValueVariant& rhs) noexcept {
729
166k
    if (&lhs != &rhs) {
730
166k
      const bool lhs_trivial =
731
166k
          (lhs.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
732
166k
      const bool rhs_trivial =
733
166k
          (rhs.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
734
166k
      if (lhs_trivial && rhs_trivial) {
735
// We validated the instances can be copied byte-wise at runtime, but compilers
736
// warn since this is not safe in the general case.
737
#if defined(__GNUC__) && !defined(__clang__)
738
#pragma GCC diagnostic push
739
#pragma GCC diagnostic ignored "-Wclass-memaccess"
740
#elif defined(__clang__) && __clang_major__ >= 20
741
#pragma clang diagnostic push
742
10.0k
#pragma clang diagnostic ignored "-Wnontrivial-memcall"
743
10.0k
#endif
744
10.0k
        alignas(ValueVariant) std::byte tmp[sizeof(ValueVariant)];
745
        // NOLINTNEXTLINE(bugprone-undefined-memory-manipulation)
746
10.0k
        std::memcpy(tmp, std::addressof(lhs), sizeof(ValueVariant));
747
        // NOLINTNEXTLINE(bugprone-undefined-memory-manipulation)
748
10.0k
        std::memcpy(std::addressof(lhs), std::addressof(rhs),
749
10.0k
                    sizeof(ValueVariant));
750
        // NOLINTNEXTLINE(bugprone-undefined-memory-manipulation)
751
10.0k
        std::memcpy(std::addressof(rhs), tmp, sizeof(ValueVariant));
752
#if defined(__GNUC__) && !defined(__clang__)
753
#pragma GCC diagnostic pop
754
#elif defined(__clang__) && __clang_major__ >= 20
755
#pragma clang diagnostic pop
756
10.0k
#endif
757
156k
      } else {
758
156k
        SlowSwap(lhs, rhs, lhs_trivial, rhs_trivial);
759
156k
      }
760
166k
    }
761
166k
  }
762
763
 private:
764
  friend struct cel::ArenaTraits<ValueVariant>;
765
766
  template <typename T>
767
  ABSL_ATTRIBUTE_ALWAYS_INLINE T* absl_nonnull At()
768
63.3M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
63.3M
    static_assert(alignof(T) <= kValueVariantAlign);
770
63.3M
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
63.3M
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
63.3M
  }
cel::ErrorValue* cel::common_internal::ValueVariant::At<cel::ErrorValue>()
Line
Count
Source
768
61.7M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
61.7M
    static_assert(alignof(T) <= kValueVariantAlign);
770
61.7M
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
61.7M
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
61.7M
  }
Unexecuted instantiation: cel::UnknownValue* cel::common_internal::ValueVariant::At<cel::UnknownValue>()
cel::StringValue* cel::common_internal::ValueVariant::At<cel::StringValue>()
Line
Count
Source
768
1.49M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
1.49M
    static_assert(alignof(T) <= kValueVariantAlign);
770
1.49M
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
1.49M
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
1.49M
  }
cel::BytesValue* cel::common_internal::ValueVariant::At<cel::BytesValue>()
Line
Count
Source
768
130k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
130k
    static_assert(alignof(T) <= kValueVariantAlign);
770
130k
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
130k
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
130k
  }
Unexecuted instantiation: cel::common_internal::LegacyListValue* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyListValue>()
Unexecuted instantiation: cel::CustomListValue* cel::common_internal::ValueVariant::At<cel::CustomListValue>()
Unexecuted instantiation: cel::ParsedRepeatedFieldValue* cel::common_internal::ValueVariant::At<cel::ParsedRepeatedFieldValue>()
Unexecuted instantiation: cel::ParsedJsonListValue* cel::common_internal::ValueVariant::At<cel::ParsedJsonListValue>()
Unexecuted instantiation: cel::common_internal::LegacyMapValue* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyMapValue>()
Unexecuted instantiation: cel::CustomMapValue* cel::common_internal::ValueVariant::At<cel::CustomMapValue>()
Unexecuted instantiation: cel::ParsedMapFieldValue* cel::common_internal::ValueVariant::At<cel::ParsedMapFieldValue>()
Unexecuted instantiation: cel::ParsedJsonMapValue* cel::common_internal::ValueVariant::At<cel::ParsedJsonMapValue>()
Unexecuted instantiation: cel::ParsedMessageValue* cel::common_internal::ValueVariant::At<cel::ParsedMessageValue>()
Unexecuted instantiation: cel::OpaqueValue* cel::common_internal::ValueVariant::At<cel::OpaqueValue>()
Unexecuted instantiation: cel::CustomStructValue* cel::common_internal::ValueVariant::At<cel::CustomStructValue>()
Unexecuted instantiation: cel::common_internal::LegacyStructValue* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyStructValue>()
Unexecuted instantiation: cel::TypeValue* cel::common_internal::ValueVariant::At<cel::TypeValue>()
774
775
  template <typename T>
776
  ABSL_ATTRIBUTE_ALWAYS_INLINE const T* absl_nonnull At() const
777
33.6M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
33.6M
    static_assert(alignof(T) <= kValueVariantAlign);
779
33.6M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
33.6M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
33.6M
  }
Unexecuted instantiation: cel::OpaqueValue const* cel::common_internal::ValueVariant::At<cel::OpaqueValue>() const
cel::BoolValue const* cel::common_internal::ValueVariant::At<cel::BoolValue>() const
Line
Count
Source
777
1.87M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
1.87M
    static_assert(alignof(T) <= kValueVariantAlign);
779
1.87M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
1.87M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
1.87M
  }
cel::NullValue const* cel::common_internal::ValueVariant::At<cel::NullValue>() const
Line
Count
Source
777
1.98k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
1.98k
    static_assert(alignof(T) <= kValueVariantAlign);
779
1.98k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
1.98k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
1.98k
  }
cel::IntValue const* cel::common_internal::ValueVariant::At<cel::IntValue>() const
Line
Count
Source
777
17.5M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
17.5M
    static_assert(alignof(T) <= kValueVariantAlign);
779
17.5M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
17.5M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
17.5M
  }
cel::UintValue const* cel::common_internal::ValueVariant::At<cel::UintValue>() const
Line
Count
Source
777
619k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
619k
    static_assert(alignof(T) <= kValueVariantAlign);
779
619k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
619k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
619k
  }
cel::DoubleValue const* cel::common_internal::ValueVariant::At<cel::DoubleValue>() const
Line
Count
Source
777
736k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
736k
    static_assert(alignof(T) <= kValueVariantAlign);
779
736k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
736k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
736k
  }
cel::DurationValue const* cel::common_internal::ValueVariant::At<cel::DurationValue>() const
Line
Count
Source
777
35.4k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
35.4k
    static_assert(alignof(T) <= kValueVariantAlign);
779
35.4k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
35.4k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
35.4k
  }
cel::TimestampValue const* cel::common_internal::ValueVariant::At<cel::TimestampValue>() const
Line
Count
Source
777
34.7k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
34.7k
    static_assert(alignof(T) <= kValueVariantAlign);
779
34.7k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
34.7k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
34.7k
  }
cel::TypeValue const* cel::common_internal::ValueVariant::At<cel::TypeValue>() const
Line
Count
Source
777
15.9k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
15.9k
    static_assert(alignof(T) <= kValueVariantAlign);
779
15.9k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
15.9k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
15.9k
  }
Unexecuted instantiation: cel::common_internal::LegacyListValue const* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyListValue>() const
cel::ParsedJsonListValue const* cel::common_internal::ValueVariant::At<cel::ParsedJsonListValue>() const
Line
Count
Source
777
18.9k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
18.9k
    static_assert(alignof(T) <= kValueVariantAlign);
779
18.9k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
18.9k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
18.9k
  }
Unexecuted instantiation: cel::ParsedRepeatedFieldValue const* cel::common_internal::ValueVariant::At<cel::ParsedRepeatedFieldValue>() const
cel::CustomListValue const* cel::common_internal::ValueVariant::At<cel::CustomListValue>() const
Line
Count
Source
777
1.53M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
1.53M
    static_assert(alignof(T) <= kValueVariantAlign);
779
1.53M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
1.53M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
1.53M
  }
Unexecuted instantiation: cel::common_internal::LegacyMapValue const* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyMapValue>() const
cel::ParsedJsonMapValue const* cel::common_internal::ValueVariant::At<cel::ParsedJsonMapValue>() const
Line
Count
Source
777
26.6k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
26.6k
    static_assert(alignof(T) <= kValueVariantAlign);
779
26.6k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
26.6k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
26.6k
  }
Unexecuted instantiation: cel::ParsedMapFieldValue const* cel::common_internal::ValueVariant::At<cel::ParsedMapFieldValue>() const
cel::CustomMapValue const* cel::common_internal::ValueVariant::At<cel::CustomMapValue>() const
Line
Count
Source
777
532k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
532k
    static_assert(alignof(T) <= kValueVariantAlign);
779
532k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
532k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
532k
  }
cel::common_internal::LegacyStructValue const* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyStructValue>() const
Line
Count
Source
777
253k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
253k
    static_assert(alignof(T) <= kValueVariantAlign);
779
253k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
253k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
253k
  }
cel::ParsedMessageValue const* cel::common_internal::ValueVariant::At<cel::ParsedMessageValue>() const
Line
Count
Source
777
263k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
263k
    static_assert(alignof(T) <= kValueVariantAlign);
779
263k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
263k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
263k
  }
Unexecuted instantiation: cel::CustomStructValue const* cel::common_internal::ValueVariant::At<cel::CustomStructValue>() const
cel::BytesValue const* cel::common_internal::ValueVariant::At<cel::BytesValue>() const
Line
Count
Source
777
81.9k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
81.9k
    static_assert(alignof(T) <= kValueVariantAlign);
779
81.9k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
81.9k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
81.9k
  }
cel::StringValue const* cel::common_internal::ValueVariant::At<cel::StringValue>() const
Line
Count
Source
777
1.69M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
1.69M
    static_assert(alignof(T) <= kValueVariantAlign);
779
1.69M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
1.69M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
1.69M
  }
cel::ErrorValue const* cel::common_internal::ValueVariant::At<cel::ErrorValue>() const
Line
Count
Source
777
8.28M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
8.28M
    static_assert(alignof(T) <= kValueVariantAlign);
779
8.28M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
8.28M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
8.28M
  }
Unexecuted instantiation: cel::UnknownValue const* cel::common_internal::ValueVariant::At<cel::UnknownValue>() const
783
784
  ABSL_ATTRIBUTE_ALWAYS_INLINE void FastCopyAssign(
785
10.7M
      const ValueVariant& other) noexcept {
786
10.7M
    index_ = other.index_;
787
10.7M
    kind_ = other.kind_;
788
10.7M
    flags_ = other.flags_;
789
10.7M
    std::memcpy(raw_, other.raw_, sizeof(raw_));
790
10.7M
  }
791
792
  ABSL_ATTRIBUTE_ALWAYS_INLINE void FastMoveAssign(
793
4.68M
      ValueVariant& other) noexcept {
794
4.68M
    FastCopyAssign(other);
795
4.68M
  }
796
797
  void SlowCopyConstruct(const ValueVariant& other) noexcept;
798
799
  void SlowMoveConstruct(ValueVariant& other) noexcept;
800
801
  void SlowDestruct() noexcept;
802
803
  void SlowCopyAssign(const ValueVariant& other, bool trivial,
804
                      bool other_trivial) noexcept;
805
806
  void SlowMoveAssign(ValueVariant& other, bool ntrivial,
807
                      bool other_trivial) noexcept;
808
809
  static void SlowSwap(ValueVariant& lhs, ValueVariant& rhs, bool lhs_trivial,
810
                       bool rhs_trivial) noexcept;
811
812
  ValueIndex index_ = ValueIndex::kNull;
813
  ValueKind kind_ = ValueKind::kNull;
814
  ValueFlags flags_ = ValueFlags::kNone;
815
  alignas(kValueVariantAlign) std::byte raw_[kValueVariantSize];
816
};
817
818
}  // namespace common_internal
819
820
template <>
821
struct ArenaTraits<common_internal::ValueVariant> {
822
  static bool trivially_destructible(
823
0
      const common_internal::ValueVariant& value) {
824
0
    return (value.flags_ & common_internal::ValueFlags::kNonTrivial) ==
825
0
           common_internal::ValueFlags::kNone;
826
0
  }
827
};
828
829
}  // namespace cel
830
831
#endif  // THIRD_PARTY_CEL_CPP_COMMON_VALUES_VALUE_VARIANT_H_