Coverage Report

Created: 2026-07-16 06:29

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
166M
    ValueFlags lhs, ValueFlags rhs) {
105
166M
  return static_cast<ValueFlags>(
106
166M
      static_cast<std::underlying_type_t<ValueFlags>>(lhs) &
107
166M
      static_cast<std::underlying_type_t<ValueFlags>>(rhs));
108
166M
}
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
1.27M
  static constexpr ValueFlags Flags(const NullValue* absl_nonnull) {
137
1.27M
    return ValueFlags::kNone;
138
1.27M
  }
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
850k
  static constexpr ValueFlags Flags(const BoolValue* absl_nonnull) {
148
850k
    return ValueFlags::kNone;
149
850k
  }
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
918k
  static constexpr ValueFlags Flags(const IntValue* absl_nonnull) {
159
918k
    return ValueFlags::kNone;
160
918k
  }
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
47.5k
  static constexpr ValueFlags Flags(const UintValue* absl_nonnull) {
170
47.5k
    return ValueFlags::kNone;
171
47.5k
  }
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
188k
  static constexpr ValueFlags Flags(const DoubleValue* absl_nonnull) {
181
188k
    return ValueFlags::kNone;
182
188k
  }
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
18.3k
  static constexpr ValueFlags Flags(const DurationValue* absl_nonnull) {
192
18.3k
    return ValueFlags::kNone;
193
18.3k
  }
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
7.58k
  static constexpr ValueFlags Flags(const TimestampValue* absl_nonnull) {
203
7.58k
    return ValueFlags::kNone;
204
7.58k
  }
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
11.3k
  static constexpr ValueFlags Flags(const TypeValue* absl_nonnull) {
214
11.3k
    return ValueFlags::kNone;
215
11.3k
  }
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
2.22k
  static constexpr ValueFlags Flags(const LegacyListValue* absl_nonnull) {
225
2.22k
    return ValueFlags::kNone;
226
2.22k
  }
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
0
  static constexpr ValueFlags Flags(const ParsedJsonListValue* absl_nonnull) {
236
0
    return ValueFlags::kNone;
237
0
  }
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
589k
  static constexpr ValueFlags Flags(const CustomListValue* absl_nonnull) {
259
589k
    return ValueFlags::kNone;
260
589k
  }
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
298k
  static constexpr ValueFlags Flags(const LegacyMapValue* absl_nonnull) {
270
298k
    return ValueFlags::kNone;
271
298k
  }
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
0
  static constexpr ValueFlags Flags(const ParsedJsonMapValue* absl_nonnull) {
281
0
    return ValueFlags::kNone;
282
0
  }
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
152k
  static constexpr ValueFlags Flags(const CustomMapValue* absl_nonnull) {
303
152k
    return ValueFlags::kNone;
304
152k
  }
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
171k
  static constexpr ValueFlags Flags(const LegacyStructValue* absl_nonnull) {
314
171k
    return ValueFlags::kNone;
315
171k
  }
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
0
  static constexpr ValueFlags Flags(const ParsedMessageValue* absl_nonnull) {
325
0
    return ValueFlags::kNone;
326
0
  }
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
177k
  static ValueFlags Flags(const BytesValue* absl_nonnull alternative) {
358
177k
    return ArenaTraits<BytesValue>::trivially_destructible(*alternative)
359
177k
               ? ValueFlags::kNone
360
177k
               : ValueFlags::kNonTrivial;
361
177k
  }
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
203k
  static ValueFlags Flags(const StringValue* absl_nonnull alternative) {
371
203k
    return ArenaTraits<StringValue>::trivially_destructible(*alternative)
372
203k
               ? ValueFlags::kNone
373
203k
               : ValueFlags::kNonTrivial;
374
203k
  }
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.92M
  static ValueFlags Flags(const ErrorValue* absl_nonnull alternative) {
384
4.92M
    return ArenaTraits<ErrorValue>::trivially_destructible(*alternative)
385
4.92M
               ? ValueFlags::kNone
386
4.92M
               : ValueFlags::kNonTrivial;
387
4.92M
  }
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
7.00M
  ValueVariant() = default;
431
432
  ValueVariant(const ValueVariant& other) noexcept
433
22.0M
      : index_(other.index_), kind_(other.kind_), flags_(other.flags_) {
434
22.0M
    if ((flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone) {
435
13.8M
      std::memcpy(raw_, other.raw_, sizeof(raw_));
436
13.8M
    } else {
437
8.24M
      SlowCopyConstruct(other);
438
8.24M
    }
439
22.0M
  }
440
441
  ValueVariant(ValueVariant&& other) noexcept
442
37.4M
      : index_(other.index_), kind_(other.kind_), flags_(other.flags_) {
443
37.4M
    if ((flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone) {
444
17.4M
      std::memcpy(raw_, other.raw_, sizeof(raw_));
445
20.0M
    } else {
446
20.0M
      SlowMoveConstruct(other);
447
20.0M
    }
448
37.4M
  }
449
450
67.9M
  ~ValueVariant() {
451
67.9M
    if ((flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNonTrivial) {
452
37.0M
      SlowDestruct();
453
37.0M
    }
454
67.9M
  }
455
456
2.70M
  ValueVariant& operator=(const ValueVariant& other) noexcept {
457
2.70M
    if (this != &other) {
458
2.70M
      const bool trivial =
459
2.70M
          (flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
460
2.70M
      const bool other_trivial =
461
2.70M
          (other.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
462
2.70M
      if (trivial && other_trivial) {
463
1.34M
        FastCopyAssign(other);
464
1.36M
      } else {
465
1.36M
        SlowCopyAssign(other, trivial, other_trivial);
466
1.36M
      }
467
2.70M
    }
468
2.70M
    return *this;
469
2.70M
  }
470
471
14.0M
  ValueVariant& operator=(ValueVariant&& other) noexcept {
472
14.0M
    if (this != &other) {
473
14.0M
      const bool trivial =
474
14.0M
          (flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
475
14.0M
      const bool other_trivial =
476
14.0M
          (other.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
477
14.0M
      if (trivial && other_trivial) {
478
3.12M
        FastMoveAssign(other);
479
10.8M
      } else {
480
10.8M
        SlowMoveAssign(other, trivial, other_trivial);
481
10.8M
      }
482
14.0M
    }
483
14.0M
    return *this;
484
14.0M
  }
485
486
  template <typename T, typename... Args>
487
  explicit ValueVariant(absl::in_place_type_t<T>, Args&&... args)
488
4.03M
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
4.03M
    static_assert(alignof(T) <= kValueVariantAlign);
490
4.03M
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
4.03M
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
4.03M
                                            T(std::forward<Args>(args)...));
494
4.03M
  }
cel::common_internal::ValueVariant::ValueVariant<cel::BoolValue, cel::BoolValue>(std::__1::in_place_type_t<cel::BoolValue>, cel::BoolValue&&)
Line
Count
Source
488
721k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
721k
    static_assert(alignof(T) <= kValueVariantAlign);
490
721k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
721k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
721k
                                            T(std::forward<Args>(args)...));
494
721k
  }
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
804k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
804k
    static_assert(alignof(T) <= kValueVariantAlign);
490
804k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
804k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
804k
                                            T(std::forward<Args>(args)...));
494
804k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::IntValue, cel::IntValue>(std::__1::in_place_type_t<cel::IntValue>, cel::IntValue&&)
Line
Count
Source
488
901k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
901k
    static_assert(alignof(T) <= kValueVariantAlign);
490
901k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
901k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
901k
                                            T(std::forward<Args>(args)...));
494
901k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::UintValue, cel::UintValue>(std::__1::in_place_type_t<cel::UintValue>, cel::UintValue&&)
Line
Count
Source
488
45.3k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
45.3k
    static_assert(alignof(T) <= kValueVariantAlign);
490
45.3k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
45.3k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
45.3k
                                            T(std::forward<Args>(args)...));
494
45.3k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::StringValue, cel::StringValue>(std::__1::in_place_type_t<cel::StringValue>, cel::StringValue&&)
Line
Count
Source
488
18.2k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
18.2k
    static_assert(alignof(T) <= kValueVariantAlign);
490
18.2k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
18.2k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
18.2k
                                            T(std::forward<Args>(args)...));
494
18.2k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::TypeValue, cel::TypeValue>(std::__1::in_place_type_t<cel::TypeValue>, cel::TypeValue&&)
Line
Count
Source
488
11.3k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
11.3k
    static_assert(alignof(T) <= kValueVariantAlign);
490
11.3k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
11.3k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
11.3k
                                            T(std::forward<Args>(args)...));
494
11.3k
  }
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
175k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
175k
    static_assert(alignof(T) <= kValueVariantAlign);
490
175k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
175k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
175k
                                            T(std::forward<Args>(args)...));
494
175k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::NullValue, cel::NullValue>(std::__1::in_place_type_t<cel::NullValue>, cel::NullValue&&)
Line
Count
Source
488
339
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
339
    static_assert(alignof(T) <= kValueVariantAlign);
490
339
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
339
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
339
                                            T(std::forward<Args>(args)...));
494
339
  }
cel::common_internal::ValueVariant::ValueVariant<cel::DoubleValue, cel::DoubleValue>(std::__1::in_place_type_t<cel::DoubleValue>, cel::DoubleValue&&)
Line
Count
Source
488
187k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
187k
    static_assert(alignof(T) <= kValueVariantAlign);
490
187k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
187k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
187k
                                            T(std::forward<Args>(args)...));
494
187k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::BytesValue, cel::BytesValue>(std::__1::in_place_type_t<cel::BytesValue>, cel::BytesValue&&)
Line
Count
Source
488
106k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
106k
    static_assert(alignof(T) <= kValueVariantAlign);
490
106k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
106k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
106k
                                            T(std::forward<Args>(args)...));
494
106k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::DurationValue, cel::DurationValue>(std::__1::in_place_type_t<cel::DurationValue>, cel::DurationValue&&)
Line
Count
Source
488
18.0k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
18.0k
    static_assert(alignof(T) <= kValueVariantAlign);
490
18.0k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
18.0k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
18.0k
                                            T(std::forward<Args>(args)...));
494
18.0k
  }
cel::common_internal::ValueVariant::ValueVariant<cel::TimestampValue, cel::TimestampValue>(std::__1::in_place_type_t<cel::TimestampValue>, cel::TimestampValue&&)
Line
Count
Source
488
44
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
44
    static_assert(alignof(T) <= kValueVariantAlign);
490
44
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
44
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
44
                                            T(std::forward<Args>(args)...));
494
44
  }
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
589k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
589k
    static_assert(alignof(T) <= kValueVariantAlign);
490
589k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
589k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
589k
                                            T(std::forward<Args>(args)...));
494
589k
  }
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&&)
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&&)
Line
Count
Source
488
2.22k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
2.22k
    static_assert(alignof(T) <= kValueVariantAlign);
490
2.22k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
2.22k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
2.22k
                                            T(std::forward<Args>(args)...));
494
2.22k
  }
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
152k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
152k
    static_assert(alignof(T) <= kValueVariantAlign);
490
152k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
152k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
152k
                                            T(std::forward<Args>(args)...));
494
152k
  }
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&&)
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&&)
Line
Count
Source
488
298k
      : index_(ValueAlternative<T>::kIndex), kind_(ValueAlternative<T>::kKind) {
489
298k
    static_assert(alignof(T) <= kValueVariantAlign);
490
298k
    static_assert(sizeof(T) <= kValueVariantSize);
491
492
298k
    flags_ = ValueAlternative<T>::Flags(::new (static_cast<void*>(&raw_[0]))
493
298k
                                            T(std::forward<Args>(args)...));
494
298k
  }
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonListValue, cel::ParsedJsonListValue>(std::__1::in_place_type_t<cel::ParsedJsonListValue>, cel::ParsedJsonListValue&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedJsonMapValue, cel::ParsedJsonMapValue>(std::__1::in_place_type_t<cel::ParsedJsonMapValue>, cel::ParsedJsonMapValue&&)
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&&)
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&&)
Unexecuted instantiation: cel::common_internal::ValueVariant::ValueVariant<cel::ParsedMessageValue, cel::ParsedMessageValue>(std::__1::in_place_type_t<cel::ParsedMessageValue>, cel::ParsedMessageValue&&)
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
1.04M
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
1.04M
                     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
589k
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
589k
                     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&&)
cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyListValue const, void>(cel::common_internal::LegacyListValue const&&)
Line
Count
Source
499
2.22k
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
2.22k
                     std::forward<T>(value)) {}
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
152k
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
152k
                     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&&)
cel::common_internal::ValueVariant::ValueVariant<cel::common_internal::LegacyMapValue const, void>(cel::common_internal::LegacyMapValue const&&)
Line
Count
Source
499
298k
      : ValueVariant(absl::in_place_type<absl::remove_cvref_t<T>>,
500
298k
                     std::forward<T>(value)) {}
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
68.2M
  ValueKind kind() const { return kind_; }
503
504
  template <typename T>
505
5.80M
  void Assign(T&& value) {
506
5.80M
    using U = absl::remove_cvref_t<T>;
507
508
5.80M
    static_assert(alignof(U) <= kValueVariantAlign);
509
5.80M
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
5.80M
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
1.60M
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
111k
        SlowDestruct();
514
111k
      }
515
1.60M
      index_ = ValueAlternative<U>::kIndex;
516
1.60M
      kind_ = ValueAlternative<U>::kKind;
517
1.60M
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
1.60M
                                              U(std::forward<T>(value)));
519
4.19M
    } 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
4.19M
      if (index_ == ValueAlternative<U>::kIndex) {
524
1.72k
        *At<U>() = std::forward<T>(value);
525
1.72k
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
4.19M
      } else {
527
4.19M
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
754
          SlowDestruct();
529
754
        }
530
4.19M
        index_ = ValueAlternative<U>::kIndex;
531
4.19M
        kind_ = ValueAlternative<U>::kKind;
532
4.19M
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
4.19M
                                                U(std::forward<T>(value)));
534
4.19M
      }
535
4.19M
    }
536
5.80M
  }
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
4.11M
  void Assign(T&& value) {
506
4.11M
    using U = absl::remove_cvref_t<T>;
507
508
4.11M
    static_assert(alignof(U) <= kValueVariantAlign);
509
4.11M
    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
4.11M
    } 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
4.11M
      if (index_ == ValueAlternative<U>::kIndex) {
524
1.72k
        *At<U>() = std::forward<T>(value);
525
1.72k
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
4.11M
      } else {
527
4.11M
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
754
          SlowDestruct();
529
754
        }
530
4.11M
        index_ = ValueAlternative<U>::kIndex;
531
4.11M
        kind_ = ValueAlternative<U>::kKind;
532
4.11M
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
4.11M
                                                U(std::forward<T>(value)));
534
4.11M
      }
535
4.11M
    }
536
4.11M
  }
void cel::common_internal::ValueVariant::Assign<cel::NullValue>(cel::NullValue&&)
Line
Count
Source
505
1.27M
  void Assign(T&& value) {
506
1.27M
    using U = absl::remove_cvref_t<T>;
507
508
1.27M
    static_assert(alignof(U) <= kValueVariantAlign);
509
1.27M
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
1.27M
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
1.27M
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
111k
        SlowDestruct();
514
111k
      }
515
1.27M
      index_ = ValueAlternative<U>::kIndex;
516
1.27M
      kind_ = ValueAlternative<U>::kKind;
517
1.27M
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
1.27M
                                              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
1.27M
  }
void cel::common_internal::ValueVariant::Assign<cel::BoolValue>(cel::BoolValue&&)
Line
Count
Source
505
128k
  void Assign(T&& value) {
506
128k
    using U = absl::remove_cvref_t<T>;
507
508
128k
    static_assert(alignof(U) <= kValueVariantAlign);
509
128k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
128k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
128k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
338
        SlowDestruct();
514
338
      }
515
128k
      index_ = ValueAlternative<U>::kIndex;
516
128k
      kind_ = ValueAlternative<U>::kKind;
517
128k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
128k
                                              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
128k
  }
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
16.9k
  void Assign(T&& value) {
506
16.9k
    using U = absl::remove_cvref_t<T>;
507
508
16.9k
    static_assert(alignof(U) <= kValueVariantAlign);
509
16.9k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
16.9k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
16.9k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
16.9k
      index_ = ValueAlternative<U>::kIndex;
516
16.9k
      kind_ = ValueAlternative<U>::kKind;
517
16.9k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
16.9k
                                              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
16.9k
  }
void cel::common_internal::ValueVariant::Assign<cel::UintValue>(cel::UintValue&&)
Line
Count
Source
505
2.18k
  void Assign(T&& value) {
506
2.18k
    using U = absl::remove_cvref_t<T>;
507
508
2.18k
    static_assert(alignof(U) <= kValueVariantAlign);
509
2.18k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
2.18k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
2.18k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
2.18k
      index_ = ValueAlternative<U>::kIndex;
516
2.18k
      kind_ = ValueAlternative<U>::kKind;
517
2.18k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
2.18k
                                              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.18k
  }
void cel::common_internal::ValueVariant::Assign<cel::DoubleValue>(cel::DoubleValue&&)
Line
Count
Source
505
1.09k
  void Assign(T&& value) {
506
1.09k
    using U = absl::remove_cvref_t<T>;
507
508
1.09k
    static_assert(alignof(U) <= kValueVariantAlign);
509
1.09k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
1.09k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
1.09k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
1.09k
      index_ = ValueAlternative<U>::kIndex;
516
1.09k
      kind_ = ValueAlternative<U>::kKind;
517
1.09k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
1.09k
                                              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
1.09k
  }
void cel::common_internal::ValueVariant::Assign<cel::DurationValue>(cel::DurationValue&&)
Line
Count
Source
505
276
  void Assign(T&& value) {
506
276
    using U = absl::remove_cvref_t<T>;
507
508
276
    static_assert(alignof(U) <= kValueVariantAlign);
509
276
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
276
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
276
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
276
      index_ = ValueAlternative<U>::kIndex;
516
276
      kind_ = ValueAlternative<U>::kKind;
517
276
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
276
                                              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
276
  }
void cel::common_internal::ValueVariant::Assign<cel::TimestampValue>(cel::TimestampValue&&)
Line
Count
Source
505
7.54k
  void Assign(T&& value) {
506
7.54k
    using U = absl::remove_cvref_t<T>;
507
508
7.54k
    static_assert(alignof(U) <= kValueVariantAlign);
509
7.54k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
7.54k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
7.54k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
7.54k
      index_ = ValueAlternative<U>::kIndex;
516
7.54k
      kind_ = ValueAlternative<U>::kKind;
517
7.54k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
7.54k
                                              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
7.54k
  }
void cel::common_internal::ValueVariant::Assign<cel::StringValue>(cel::StringValue&&)
Line
Count
Source
505
9.41k
  void Assign(T&& value) {
506
9.41k
    using U = absl::remove_cvref_t<T>;
507
508
9.41k
    static_assert(alignof(U) <= kValueVariantAlign);
509
9.41k
    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
9.41k
    } 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
9.41k
      if (index_ == ValueAlternative<U>::kIndex) {
524
0
        *At<U>() = std::forward<T>(value);
525
0
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
9.41k
      } else {
527
9.41k
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
0
          SlowDestruct();
529
0
        }
530
9.41k
        index_ = ValueAlternative<U>::kIndex;
531
9.41k
        kind_ = ValueAlternative<U>::kKind;
532
9.41k
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
9.41k
                                                U(std::forward<T>(value)));
534
9.41k
      }
535
9.41k
    }
536
9.41k
  }
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::StringValue const&>(cel::StringValue const&)
void cel::common_internal::ValueVariant::Assign<cel::BytesValue>(cel::BytesValue&&)
Line
Count
Source
505
71.1k
  void Assign(T&& value) {
506
71.1k
    using U = absl::remove_cvref_t<T>;
507
508
71.1k
    static_assert(alignof(U) <= kValueVariantAlign);
509
71.1k
    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
71.1k
    } 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
71.1k
      if (index_ == ValueAlternative<U>::kIndex) {
524
0
        *At<U>() = std::forward<T>(value);
525
0
        flags_ = ValueAlternative<U>::Flags(At<U>());
526
71.1k
      } else {
527
71.1k
        if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
528
0
          SlowDestruct();
529
0
        }
530
71.1k
        index_ = ValueAlternative<U>::kIndex;
531
71.1k
        kind_ = ValueAlternative<U>::kKind;
532
71.1k
        flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
533
71.1k
                                                U(std::forward<T>(value)));
534
71.1k
      }
535
71.1k
    }
536
71.1k
  }
void cel::common_internal::ValueVariant::Assign<cel::common_internal::LegacyStructValue>(cel::common_internal::LegacyStructValue&&)
Line
Count
Source
505
171k
  void Assign(T&& value) {
506
171k
    using U = absl::remove_cvref_t<T>;
507
508
171k
    static_assert(alignof(U) <= kValueVariantAlign);
509
171k
    static_assert(sizeof(U) <= kValueVariantSize);
510
511
171k
    if constexpr (ValueAlternative<U>::kAlwaysTrivial) {
512
171k
      if ((flags_ & ValueFlags::kNonTrivial) != ValueFlags::kNone) {
513
0
        SlowDestruct();
514
0
      }
515
171k
      index_ = ValueAlternative<U>::kIndex;
516
171k
      kind_ = ValueAlternative<U>::kKind;
517
171k
      flags_ = ValueAlternative<U>::Flags(::new (static_cast<void*>(&raw_[0]))
518
171k
                                              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
171k
  }
Unexecuted instantiation: void cel::common_internal::ValueVariant::Assign<cel::TypeValue>(cel::TypeValue&&)
537
538
  template <typename T>
539
41.6M
  bool Is() const {
540
41.6M
    return index_ == ValueAlternative<T>::kIndex;
541
41.6M
  }
bool cel::common_internal::ValueVariant::Is<cel::BoolValue>() const
Line
Count
Source
539
687k
  bool Is() const {
540
687k
    return index_ == ValueAlternative<T>::kIndex;
541
687k
  }
bool cel::common_internal::ValueVariant::Is<cel::BytesValue>() const
Line
Count
Source
539
294k
  bool Is() const {
540
294k
    return index_ == ValueAlternative<T>::kIndex;
541
294k
  }
bool cel::common_internal::ValueVariant::Is<cel::DoubleValue>() const
Line
Count
Source
539
869k
  bool Is() const {
540
869k
    return index_ == ValueAlternative<T>::kIndex;
541
869k
  }
bool cel::common_internal::ValueVariant::Is<cel::DurationValue>() const
Line
Count
Source
539
12.7k
  bool Is() const {
540
12.7k
    return index_ == ValueAlternative<T>::kIndex;
541
12.7k
  }
bool cel::common_internal::ValueVariant::Is<cel::ErrorValue>() const
Line
Count
Source
539
24.0M
  bool Is() const {
540
24.0M
    return index_ == ValueAlternative<T>::kIndex;
541
24.0M
  }
bool cel::common_internal::ValueVariant::Is<cel::IntValue>() const
Line
Count
Source
539
2.36M
  bool Is() const {
540
2.36M
    return index_ == ValueAlternative<T>::kIndex;
541
2.36M
  }
bool cel::common_internal::ValueVariant::Is<cel::common_internal::LegacyListValue>() const
Line
Count
Source
539
526k
  bool Is() const {
540
526k
    return index_ == ValueAlternative<T>::kIndex;
541
526k
  }
bool cel::common_internal::ValueVariant::Is<cel::CustomListValue>() const
Line
Count
Source
539
525k
  bool Is() const {
540
525k
    return index_ == ValueAlternative<T>::kIndex;
541
525k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedRepeatedFieldValue>() const
Line
Count
Source
539
12.7k
  bool Is() const {
540
12.7k
    return index_ == ValueAlternative<T>::kIndex;
541
12.7k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedJsonListValue>() const
Line
Count
Source
539
12.7k
  bool Is() const {
540
12.7k
    return index_ == ValueAlternative<T>::kIndex;
541
12.7k
  }
bool cel::common_internal::ValueVariant::Is<cel::common_internal::LegacyMapValue>() const
Line
Count
Source
539
902k
  bool Is() const {
540
902k
    return index_ == ValueAlternative<T>::kIndex;
541
902k
  }
bool cel::common_internal::ValueVariant::Is<cel::CustomMapValue>() const
Line
Count
Source
539
518k
  bool Is() const {
540
518k
    return index_ == ValueAlternative<T>::kIndex;
541
518k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedMapFieldValue>() const
Line
Count
Source
539
323k
  bool Is() const {
540
323k
    return index_ == ValueAlternative<T>::kIndex;
541
323k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedJsonMapValue>() const
Line
Count
Source
539
323k
  bool Is() const {
540
323k
    return index_ == ValueAlternative<T>::kIndex;
541
323k
  }
bool cel::common_internal::ValueVariant::Is<cel::ParsedMessageValue>() const
Line
Count
Source
539
181k
  bool Is() const {
540
181k
    return index_ == ValueAlternative<T>::kIndex;
541
181k
  }
bool cel::common_internal::ValueVariant::Is<cel::NullValue>() const
Line
Count
Source
539
80
  bool Is() const {
540
80
    return index_ == ValueAlternative<T>::kIndex;
541
80
  }
Unexecuted instantiation: bool cel::common_internal::ValueVariant::Is<cel::OpaqueValue>() const
bool cel::common_internal::ValueVariant::Is<cel::CustomStructValue>() const
Line
Count
Source
539
181k
  bool Is() const {
540
181k
    return index_ == ValueAlternative<T>::kIndex;
541
181k
  }
bool cel::common_internal::ValueVariant::Is<cel::StringValue>() const
Line
Count
Source
539
183k
  bool Is() const {
540
183k
    return index_ == ValueAlternative<T>::kIndex;
541
183k
  }
bool cel::common_internal::ValueVariant::Is<cel::common_internal::LegacyStructValue>() const
Line
Count
Source
539
484k
  bool Is() const {
540
484k
    return index_ == ValueAlternative<T>::kIndex;
541
484k
  }
bool cel::common_internal::ValueVariant::Is<cel::TimestampValue>() const
Line
Count
Source
539
44
  bool Is() const {
540
44
    return index_ == ValueAlternative<T>::kIndex;
541
44
  }
bool cel::common_internal::ValueVariant::Is<cel::TypeValue>() const
Line
Count
Source
539
324
  bool Is() const {
540
324
    return index_ == ValueAlternative<T>::kIndex;
541
324
  }
bool cel::common_internal::ValueVariant::Is<cel::UintValue>() const
Line
Count
Source
539
657k
  bool Is() const {
540
657k
    return index_ == ValueAlternative<T>::kIndex;
541
657k
  }
bool cel::common_internal::ValueVariant::Is<cel::UnknownValue>() const
Line
Count
Source
539
8.58M
  bool Is() const {
540
8.58M
    return index_ == ValueAlternative<T>::kIndex;
541
8.58M
  }
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
9.09M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
9.09M
    ABSL_DCHECK(Is<T>());
553
554
9.09M
    return *At<T>();
555
9.09M
  }
cel::BoolValue const& cel::common_internal::ValueVariant::Get<cel::BoolValue>() const &
Line
Count
Source
551
1.30M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
1.30M
    ABSL_DCHECK(Is<T>());
553
554
1.30M
    return *At<T>();
555
1.30M
  }
cel::NullValue const& cel::common_internal::ValueVariant::Get<cel::NullValue>() const &
Line
Count
Source
551
293
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
293
    ABSL_DCHECK(Is<T>());
553
554
293
    return *At<T>();
555
293
  }
cel::IntValue const& cel::common_internal::ValueVariant::Get<cel::IntValue>() const &
Line
Count
Source
551
5.20M
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
5.20M
    ABSL_DCHECK(Is<T>());
553
554
5.20M
    return *At<T>();
555
5.20M
  }
cel::UintValue const& cel::common_internal::ValueVariant::Get<cel::UintValue>() const &
Line
Count
Source
551
611k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
611k
    ABSL_DCHECK(Is<T>());
553
554
611k
    return *At<T>();
555
611k
  }
cel::DoubleValue const& cel::common_internal::ValueVariant::Get<cel::DoubleValue>() const &
Line
Count
Source
551
945k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
945k
    ABSL_DCHECK(Is<T>());
553
554
945k
    return *At<T>();
555
945k
  }
cel::DurationValue const& cel::common_internal::ValueVariant::Get<cel::DurationValue>() const &
Line
Count
Source
551
13.2k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
13.2k
    ABSL_DCHECK(Is<T>());
553
554
13.2k
    return *At<T>();
555
13.2k
  }
cel::TimestampValue const& cel::common_internal::ValueVariant::Get<cel::TimestampValue>() const &
Line
Count
Source
551
45
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
45
    ABSL_DCHECK(Is<T>());
553
554
45
    return *At<T>();
555
45
  }
cel::TypeValue const& cel::common_internal::ValueVariant::Get<cel::TypeValue>() const &
Line
Count
Source
551
13.2k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
13.2k
    ABSL_DCHECK(Is<T>());
553
554
13.2k
    return *At<T>();
555
13.2k
  }
cel::common_internal::LegacyListValue const& cel::common_internal::ValueVariant::Get<cel::common_internal::LegacyListValue>() const &
Line
Count
Source
551
5.76k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
5.76k
    ABSL_DCHECK(Is<T>());
553
554
5.76k
    return *At<T>();
555
5.76k
  }
Unexecuted instantiation: cel::ParsedJsonListValue const& cel::common_internal::ValueVariant::Get<cel::ParsedJsonListValue>() const &
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
6.52k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
6.52k
    ABSL_DCHECK(Is<T>());
553
554
6.52k
    return *At<T>();
555
6.52k
  }
cel::common_internal::LegacyMapValue const& cel::common_internal::ValueVariant::Get<cel::common_internal::LegacyMapValue>() const &
Line
Count
Source
551
591
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
591
    ABSL_DCHECK(Is<T>());
553
554
591
    return *At<T>();
555
591
  }
Unexecuted instantiation: cel::ParsedJsonMapValue const& cel::common_internal::ValueVariant::Get<cel::ParsedJsonMapValue>() const &
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
4.23k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
4.23k
    ABSL_DCHECK(Is<T>());
553
554
4.23k
    return *At<T>();
555
4.23k
  }
cel::common_internal::LegacyStructValue const& cel::common_internal::ValueVariant::Get<cel::common_internal::LegacyStructValue>() const &
Line
Count
Source
551
535
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
535
    ABSL_DCHECK(Is<T>());
553
554
535
    return *At<T>();
555
535
  }
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
444k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
444k
    ABSL_DCHECK(Is<T>());
553
554
444k
    return *At<T>();
555
444k
  }
cel::StringValue const& cel::common_internal::ValueVariant::Get<cel::StringValue>() const &
Line
Count
Source
551
525k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
525k
    ABSL_DCHECK(Is<T>());
553
554
525k
    return *At<T>();
555
525k
  }
cel::ErrorValue const& cel::common_internal::ValueVariant::Get<cel::ErrorValue>() const &
Line
Count
Source
551
7.86k
  const T& Get() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
552
7.86k
    ABSL_DCHECK(Is<T>());
553
554
7.86k
    return *At<T>();
555
7.86k
  }
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
8.56M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
8.56M
    if (Is<T>()) {
582
1.05M
      return At<T>();
583
1.05M
    }
584
7.50M
    return nullptr;
585
8.56M
  }
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
105k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
105k
    if (Is<T>()) {
582
104k
      return At<T>();
583
104k
    }
584
1.26k
    return nullptr;
585
105k
  }
cel::BytesValue const* cel::common_internal::ValueVariant::As<cel::BytesValue>() const
Line
Count
Source
580
62.5k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
62.5k
    if (Is<T>()) {
582
62.0k
      return At<T>();
583
62.0k
    }
584
471
    return nullptr;
585
62.5k
  }
cel::DoubleValue const* cel::common_internal::ValueVariant::As<cel::DoubleValue>() const
Line
Count
Source
580
21.6k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
21.6k
    if (Is<T>()) {
582
9.61k
      return At<T>();
583
9.61k
    }
584
12.0k
    return nullptr;
585
21.6k
  }
cel::DurationValue const* cel::common_internal::ValueVariant::As<cel::DurationValue>() const
Line
Count
Source
580
1
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
1
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
1
    return nullptr;
585
1
  }
cel::ErrorValue const* cel::common_internal::ValueVariant::As<cel::ErrorValue>() const
Line
Count
Source
580
3.51M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
3.51M
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
3.51M
    return nullptr;
585
3.51M
  }
cel::IntValue const* cel::common_internal::ValueVariant::As<cel::IntValue>() const
Line
Count
Source
580
20.2k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
20.2k
    if (Is<T>()) {
582
8.61k
      return At<T>();
583
8.61k
    }
584
11.6k
    return nullptr;
585
20.2k
  }
cel::common_internal::LegacyListValue const* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyListValue>() const
Line
Count
Source
580
322k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
322k
    if (Is<T>()) {
582
470
      return At<T>();
583
470
    }
584
322k
    return nullptr;
585
322k
  }
cel::CustomListValue const* cel::common_internal::ValueVariant::As<cel::CustomListValue>() const
Line
Count
Source
580
322k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
322k
    if (Is<T>()) {
582
322k
      return At<T>();
583
322k
    }
584
165
    return nullptr;
585
322k
  }
cel::ParsedRepeatedFieldValue const* cel::common_internal::ValueVariant::As<cel::ParsedRepeatedFieldValue>() const
Line
Count
Source
580
165
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
165
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
165
    return nullptr;
585
165
  }
cel::ParsedJsonListValue const* cel::common_internal::ValueVariant::As<cel::ParsedJsonListValue>() const
Line
Count
Source
580
165
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
165
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
165
    return nullptr;
585
165
  }
cel::common_internal::LegacyMapValue const* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyMapValue>() const
Line
Count
Source
580
392k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
392k
    if (Is<T>()) {
582
274k
      return At<T>();
583
274k
    }
584
118k
    return nullptr;
585
392k
  }
cel::CustomMapValue const* cel::common_internal::ValueVariant::As<cel::CustomMapValue>() const
Line
Count
Source
580
118k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
118k
    if (Is<T>()) {
582
117k
      return At<T>();
583
117k
    }
584
640
    return nullptr;
585
118k
  }
cel::ParsedMapFieldValue const* cel::common_internal::ValueVariant::As<cel::ParsedMapFieldValue>() const
Line
Count
Source
580
640
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
640
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
640
    return nullptr;
585
640
  }
cel::ParsedJsonMapValue const* cel::common_internal::ValueVariant::As<cel::ParsedJsonMapValue>() const
Line
Count
Source
580
640
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
640
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
640
    return nullptr;
585
640
  }
cel::ParsedMessageValue const* cel::common_internal::ValueVariant::As<cel::ParsedMessageValue>() const
Line
Count
Source
580
266
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
266
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
266
    return nullptr;
585
266
  }
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
266
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
266
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
266
    return nullptr;
585
266
  }
cel::StringValue const* cel::common_internal::ValueVariant::As<cel::StringValue>() const
Line
Count
Source
580
9.21k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
9.21k
    if (Is<T>()) {
582
928
      return At<T>();
583
928
    }
584
8.28k
    return nullptr;
585
9.21k
  }
cel::common_internal::LegacyStructValue const* cel::common_internal::ValueVariant::As<cel::common_internal::LegacyStructValue>() const
Line
Count
Source
580
152k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
152k
    if (Is<T>()) {
582
151k
      return At<T>();
583
151k
    }
584
266
    return nullptr;
585
152k
  }
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
324
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
324
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
324
    return nullptr;
585
324
  }
cel::UintValue const* cel::common_internal::ValueVariant::As<cel::UintValue>() const
Line
Count
Source
580
16.5k
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
16.5k
    if (Is<T>()) {
582
5.57k
      return At<T>();
583
5.57k
    }
584
11.0k
    return nullptr;
585
16.5k
  }
cel::UnknownValue const* cel::common_internal::ValueVariant::As<cel::UnknownValue>() const
Line
Count
Source
580
3.51M
  const T* absl_nullable As() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
581
3.51M
    if (Is<T>()) {
582
0
      return At<T>();
583
0
    }
584
3.51M
    return nullptr;
585
3.51M
  }
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
3.72M
  decltype(auto) Visit(Visitor&& visitor) const& {
594
3.72M
    switch (index_) {
595
293
      case ValueIndex::kNull:
596
293
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
231k
      case ValueIndex::kBool:
598
231k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
2.79M
      case ValueIndex::kInt:
600
2.79M
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
41.2k
      case ValueIndex::kUint:
602
41.2k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
214k
      case ValueIndex::kDouble:
604
214k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
279
      case ValueIndex::kDuration:
606
279
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
12.6k
      case ValueIndex::kType:
610
12.6k
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
5.76k
      case ValueIndex::kLegacyList:
612
5.76k
        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
6.52k
      case ValueIndex::kCustomList:
618
6.52k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
590
      case ValueIndex::kLegacyMap:
620
590
        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
4.23k
      case ValueIndex::kCustomMap:
626
4.23k
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
532
      case ValueIndex::kLegacyStruct:
628
532
        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
206k
      case ValueIndex::kBytes:
636
206k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
210k
      case ValueIndex::kString:
638
210k
        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
3.72M
    }
644
3.72M
  }
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
3.42M
  decltype(auto) Visit(Visitor&& visitor) const& {
594
3.42M
    switch (index_) {
595
213
      case ValueIndex::kNull:
596
213
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
227k
      case ValueIndex::kBool:
598
227k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
2.77M
      case ValueIndex::kInt:
600
2.77M
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
31.1k
      case ValueIndex::kUint:
602
31.1k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
193k
      case ValueIndex::kDouble:
604
193k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
278
      case ValueIndex::kDuration:
606
278
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
12.3k
      case ValueIndex::kType:
610
12.3k
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
5.62k
      case ValueIndex::kLegacyList:
612
5.62k
        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
5.49k
      case ValueIndex::kCustomList:
618
5.49k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
296
      case ValueIndex::kLegacyMap:
620
296
        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
3.75k
      case ValueIndex::kCustomMap:
626
3.75k
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
266
      case ValueIndex::kLegacyStruct:
628
266
        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
144k
      case ValueIndex::kBytes:
636
144k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
23.9k
      case ValueIndex::kString:
638
23.9k
        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
3.42M
    }
644
3.42M
  }
Unexecuted instantiation: value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::GetTypeName() const::$_0>(cel::Value::GetTypeName() const::$_0&&) const &
value.cc:decltype(auto) cel::common_internal::ValueVariant::Visit<cel::Value::DebugString() const::$_0>(cel::Value::DebugString() const::$_0&&) const &
Line
Count
Source
593
200k
  decltype(auto) Visit(Visitor&& visitor) const& {
594
200k
    switch (index_) {
595
0
      case ValueIndex::kNull:
596
0
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
788
      case ValueIndex::kBool:
598
788
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
4.98k
      case ValueIndex::kInt:
600
4.98k
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
285
      case ValueIndex::kUint:
602
285
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
17.6k
      case ValueIndex::kDouble:
604
17.6k
        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
177k
      case ValueIndex::kString:
638
177k
        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
200k
    }
644
200k
  }
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 &
Unexecuted instantiation: 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 &
Unexecuted instantiation: 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 &
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
103k
  decltype(auto) Visit(Visitor&& visitor) const& {
594
103k
    switch (index_) {
595
80
      case ValueIndex::kNull:
596
80
        return std::forward<Visitor>(visitor)(Get<NullValue>());
597
2.46k
      case ValueIndex::kBool:
598
2.46k
        return std::forward<Visitor>(visitor)(Get<BoolValue>());
599
13.4k
      case ValueIndex::kInt:
600
13.4k
        return std::forward<Visitor>(visitor)(Get<IntValue>());
601
9.73k
      case ValueIndex::kUint:
602
9.73k
        return std::forward<Visitor>(visitor)(Get<UintValue>());
603
3.39k
      case ValueIndex::kDouble:
604
3.39k
        return std::forward<Visitor>(visitor)(Get<DoubleValue>());
605
1
      case ValueIndex::kDuration:
606
1
        return std::forward<Visitor>(visitor)(Get<DurationValue>());
607
0
      case ValueIndex::kTimestamp:
608
0
        return std::forward<Visitor>(visitor)(Get<TimestampValue>());
609
324
      case ValueIndex::kType:
610
324
        return std::forward<Visitor>(visitor)(Get<TypeValue>());
611
133
      case ValueIndex::kLegacyList:
612
133
        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.03k
      case ValueIndex::kCustomList:
618
1.03k
        return std::forward<Visitor>(visitor)(Get<CustomListValue>());
619
294
      case ValueIndex::kLegacyMap:
620
294
        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
482
      case ValueIndex::kCustomMap:
626
482
        return std::forward<Visitor>(visitor)(Get<CustomMapValue>());
627
266
      case ValueIndex::kLegacyStruct:
628
266
        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
62.5k
      case ValueIndex::kBytes:
636
62.5k
        return std::forward<Visitor>(visitor)(Get<BytesValue>());
637
9.21k
      case ValueIndex::kString:
638
9.21k
        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
103k
    }
644
103k
  }
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
109k
  friend void swap(ValueVariant& lhs, ValueVariant& rhs) noexcept {
729
109k
    if (&lhs != &rhs) {
730
109k
      const bool lhs_trivial =
731
109k
          (lhs.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
732
109k
      const bool rhs_trivial =
733
109k
          (rhs.flags_ & ValueFlags::kNonTrivial) == ValueFlags::kNone;
734
109k
      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
3.58k
#pragma clang diagnostic ignored "-Wnontrivial-memcall"
743
3.58k
#endif
744
3.58k
        alignas(ValueVariant) std::byte tmp[sizeof(ValueVariant)];
745
        // NOLINTNEXTLINE(bugprone-undefined-memory-manipulation)
746
3.58k
        std::memcpy(tmp, std::addressof(lhs), sizeof(ValueVariant));
747
        // NOLINTNEXTLINE(bugprone-undefined-memory-manipulation)
748
3.58k
        std::memcpy(std::addressof(lhs), std::addressof(rhs),
749
3.58k
                    sizeof(ValueVariant));
750
        // NOLINTNEXTLINE(bugprone-undefined-memory-manipulation)
751
3.58k
        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
3.58k
#endif
757
106k
      } else {
758
106k
        SlowSwap(lhs, rhs, lhs_trivial, rhs_trivial);
759
106k
      }
760
109k
    }
761
109k
  }
762
763
 private:
764
  friend struct cel::ArenaTraits<ValueVariant>;
765
766
  template <typename T>
767
  ABSL_ATTRIBUTE_ALWAYS_INLINE T* absl_nonnull At()
768
76.4M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
76.4M
    static_assert(alignof(T) <= kValueVariantAlign);
770
76.4M
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
76.4M
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
76.4M
  }
cel::ErrorValue* cel::common_internal::ValueVariant::At<cel::ErrorValue>()
Line
Count
Source
768
75.1M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
75.1M
    static_assert(alignof(T) <= kValueVariantAlign);
770
75.1M
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
75.1M
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
75.1M
  }
Unexecuted instantiation: cel::UnknownValue* cel::common_internal::ValueVariant::At<cel::UnknownValue>()
cel::StringValue* cel::common_internal::ValueVariant::At<cel::StringValue>()
Line
Count
Source
768
217k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
217k
    static_assert(alignof(T) <= kValueVariantAlign);
770
217k
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
217k
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
217k
  }
cel::BytesValue* cel::common_internal::ValueVariant::At<cel::BytesValue>()
Line
Count
Source
768
1.14M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
769
1.14M
    static_assert(alignof(T) <= kValueVariantAlign);
770
1.14M
    static_assert(sizeof(T) <= kValueVariantSize);
771
772
1.14M
    return std::launder(reinterpret_cast<T*>(&raw_[0]));
773
1.14M
  }
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
19.7M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
19.7M
    static_assert(alignof(T) <= kValueVariantAlign);
779
19.7M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
19.7M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
19.7M
  }
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.41M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
1.41M
    static_assert(alignof(T) <= kValueVariantAlign);
779
1.41M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
1.41M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
1.41M
  }
cel::NullValue const* cel::common_internal::ValueVariant::At<cel::NullValue>() const
Line
Count
Source
777
293
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
293
    static_assert(alignof(T) <= kValueVariantAlign);
779
293
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
293
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
293
  }
cel::IntValue const* cel::common_internal::ValueVariant::At<cel::IntValue>() const
Line
Count
Source
777
5.21M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
5.21M
    static_assert(alignof(T) <= kValueVariantAlign);
779
5.21M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
5.21M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
5.21M
  }
cel::UintValue const* cel::common_internal::ValueVariant::At<cel::UintValue>() const
Line
Count
Source
777
616k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
616k
    static_assert(alignof(T) <= kValueVariantAlign);
779
616k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
616k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
616k
  }
cel::DoubleValue const* cel::common_internal::ValueVariant::At<cel::DoubleValue>() const
Line
Count
Source
777
955k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
955k
    static_assert(alignof(T) <= kValueVariantAlign);
779
955k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
955k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
955k
  }
cel::DurationValue const* cel::common_internal::ValueVariant::At<cel::DurationValue>() const
Line
Count
Source
777
13.2k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
13.2k
    static_assert(alignof(T) <= kValueVariantAlign);
779
13.2k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
13.2k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
13.2k
  }
cel::TimestampValue const* cel::common_internal::ValueVariant::At<cel::TimestampValue>() const
Line
Count
Source
777
45
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
45
    static_assert(alignof(T) <= kValueVariantAlign);
779
45
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
45
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
45
  }
cel::TypeValue const* cel::common_internal::ValueVariant::At<cel::TypeValue>() const
Line
Count
Source
777
13.2k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
13.2k
    static_assert(alignof(T) <= kValueVariantAlign);
779
13.2k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
13.2k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
13.2k
  }
cel::common_internal::LegacyListValue const* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyListValue>() const
Line
Count
Source
777
6.23k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
6.23k
    static_assert(alignof(T) <= kValueVariantAlign);
779
6.23k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
6.23k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
6.23k
  }
Unexecuted instantiation: cel::ParsedJsonListValue const* cel::common_internal::ValueVariant::At<cel::ParsedJsonListValue>() const
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
329k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
329k
    static_assert(alignof(T) <= kValueVariantAlign);
779
329k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
329k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
329k
  }
cel::common_internal::LegacyMapValue const* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyMapValue>() const
Line
Count
Source
777
274k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
274k
    static_assert(alignof(T) <= kValueVariantAlign);
779
274k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
274k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
274k
  }
Unexecuted instantiation: cel::ParsedJsonMapValue const* cel::common_internal::ValueVariant::At<cel::ParsedJsonMapValue>() const
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
121k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
121k
    static_assert(alignof(T) <= kValueVariantAlign);
779
121k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
121k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
121k
  }
cel::common_internal::LegacyStructValue const* cel::common_internal::ValueVariant::At<cel::common_internal::LegacyStructValue>() const
Line
Count
Source
777
152k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
152k
    static_assert(alignof(T) <= kValueVariantAlign);
779
152k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
152k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
152k
  }
Unexecuted instantiation: cel::ParsedMessageValue const* cel::common_internal::ValueVariant::At<cel::ParsedMessageValue>() const
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
688k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
688k
    static_assert(alignof(T) <= kValueVariantAlign);
779
688k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
688k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
688k
  }
cel::StringValue const* cel::common_internal::ValueVariant::At<cel::StringValue>() const
Line
Count
Source
777
593k
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
593k
    static_assert(alignof(T) <= kValueVariantAlign);
779
593k
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
593k
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
593k
  }
cel::ErrorValue const* cel::common_internal::ValueVariant::At<cel::ErrorValue>() const
Line
Count
Source
777
9.36M
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
778
9.36M
    static_assert(alignof(T) <= kValueVariantAlign);
779
9.36M
    static_assert(sizeof(T) <= kValueVariantSize);
780
781
9.36M
    return std::launder(reinterpret_cast<const T*>(&raw_[0]));
782
9.36M
  }
Unexecuted instantiation: cel::UnknownValue const* cel::common_internal::ValueVariant::At<cel::UnknownValue>() const
783
784
  ABSL_ATTRIBUTE_ALWAYS_INLINE void FastCopyAssign(
785
4.53M
      const ValueVariant& other) noexcept {
786
4.53M
    index_ = other.index_;
787
4.53M
    kind_ = other.kind_;
788
4.53M
    flags_ = other.flags_;
789
4.53M
    std::memcpy(raw_, other.raw_, sizeof(raw_));
790
4.53M
  }
791
792
  ABSL_ATTRIBUTE_ALWAYS_INLINE void FastMoveAssign(
793
3.19M
      ValueVariant& other) noexcept {
794
3.19M
    FastCopyAssign(other);
795
3.19M
  }
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_