MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / Of

Method Of

common/values/optional_value.cc:365–413  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

363} // namespace
364
365OptionalValue OptionalValue::Of(cel::Value value,
366 google::protobuf::Arena* absl_nonnull arena) {
367 ABSL_DCHECK(value.kind() != ValueKind::kError &&
368 value.kind() != ValueKind::kUnknown);
369 ABSL_DCHECK(arena != nullptr);
370
371 // We can actually fit a lot more of the underlying values, avoiding arena
372 // allocations and destructors. For now, we just do scalars.
373 switch (value.kind()) {
374 case ValueKind::kNull:
375 return OptionalValue(&null_optional_value_dispatcher,
376 OpaqueValueContent::Zero());
377 case ValueKind::kBool:
378 return OptionalValue(
379 &bool_optional_value_dispatcher,
380 OpaqueValueContent::From(absl::implicit_cast<bool>(value.GetBool())));
381 case ValueKind::kInt:
382 return OptionalValue(&int_optional_value_dispatcher,
383 OpaqueValueContent::From(
384 absl::implicit_cast<int64_t>(value.GetInt())));
385 case ValueKind::kUint:
386 return OptionalValue(&uint_optional_value_dispatcher,
387 OpaqueValueContent::From(
388 absl::implicit_cast<uint64_t>(value.GetUint())));
389 case ValueKind::kDouble:
390 return OptionalValue(&double_optional_value_dispatcher,
391 OpaqueValueContent::From(
392 absl::implicit_cast<double>(value.GetDouble())));
393 case ValueKind::kDuration:
394 return OptionalValue(
395 &duration_optional_value_dispatcher,
396 OpaqueValueContent::From(value.GetDuration().ToDuration()));
397 case ValueKind::kTimestamp:
398 return OptionalValue(
399 &timestamp_optional_value_dispatcher,
400 OpaqueValueContent::From(value.GetTimestamp().ToTime()));
401 default: {
402 cel::Value* absl_nonnull result = ::new (
403 arena->AllocateAligned(sizeof(cel::Value), alignof(cel::Value)))
404 cel::Value(std::move(value));
405 if (!ArenaTraits<>::trivially_destructible(result)) {
406 arena->OwnDestructor(result);
407 }
408 return OptionalValue(&optional_value_dispatcher,
409 OpaqueValueContent::From(OptionalValueContent{
410 .value = result, .arena = arena}));
411 }
412 }
413}
414
415OptionalValue OptionalValue::None() {
416 return OptionalValue(&empty_optional_value_dispatcher,

Callers

nothing calls this directly

Calls 8

OptionalValueClass · 0.70
kindMethod · 0.45
GetBoolMethod · 0.45
GetIntMethod · 0.45
GetUintMethod · 0.45
GetDoubleMethod · 0.45
GetDurationMethod · 0.45
GetTimestampMethod · 0.45

Tested by

no test coverage detected