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

Function CoalesceMapKey

internal/message_equality.cc:590–715  ·  view source on GitHub ↗

Attempts to coalesce one map key to another. Returns true if it was possible, false otherwise.

Source from the content-addressed store, hash-verified

588// Attempts to coalesce one map key to another. Returns true if it was possible,
589// false otherwise.
590bool CoalesceMapKey(const google::protobuf::MapKey& src,
591 FieldDescriptor::CppType dest_type,
592 google::protobuf::MapKey* absl_nonnull dest) {
593 switch (src.type()) {
594 case FieldDescriptor::CPPTYPE_BOOL:
595 if (dest_type != FieldDescriptor::CPPTYPE_BOOL) {
596 return false;
597 }
598 dest->SetBoolValue(src.GetBoolValue());
599 return true;
600 case FieldDescriptor::CPPTYPE_INT32: {
601 const auto src_value = src.GetInt32Value();
602 switch (dest_type) {
603 case FieldDescriptor::CPPTYPE_INT32:
604 dest->SetInt32Value(src_value);
605 return true;
606 case FieldDescriptor::CPPTYPE_INT64:
607 dest->SetInt64Value(src_value);
608 return true;
609 case FieldDescriptor::CPPTYPE_UINT32:
610 if (src_value < 0) {
611 return false;
612 }
613 dest->SetUInt32Value(static_cast<uint32_t>(src_value));
614 return true;
615 case FieldDescriptor::CPPTYPE_UINT64:
616 if (src_value < 0) {
617 return false;
618 }
619 dest->SetUInt64Value(static_cast<uint64_t>(src_value));
620 return true;
621 default:
622 return false;
623 }
624 }
625 case FieldDescriptor::CPPTYPE_INT64: {
626 const auto src_value = src.GetInt64Value();
627 switch (dest_type) {
628 case FieldDescriptor::CPPTYPE_INT32:
629 if (src_value < std::numeric_limits<int32_t>::min() ||
630 src_value > std::numeric_limits<int32_t>::max()) {
631 return false;
632 }
633 dest->SetInt32Value(static_cast<int32_t>(src_value));
634 return true;
635 case FieldDescriptor::CPPTYPE_INT64:
636 dest->SetInt64Value(src_value);
637 return true;
638 case FieldDescriptor::CPPTYPE_UINT32:
639 if (src_value < 0 ||
640 src_value > std::numeric_limits<uint32_t>::max()) {
641 return false;
642 }
643 dest->SetUInt32Value(static_cast<uint32_t>(src_value));
644 return true;
645 case FieldDescriptor::CPPTYPE_UINT64:
646 if (src_value < 0) {
647 return false;

Callers 1

MapFieldEqualsMethod · 0.85

Calls 5

typeMethod · 0.80
SetBoolValueMethod · 0.45
GetBoolValueMethod · 0.45
SetStringValueMethod · 0.45
GetStringValueMethod · 0.45

Tested by

no test coverage detected