diff --git a/src/google/protobuf/map_field.h b/src/google/protobuf/map_field.h index b9d03c806f..b083a25f67 100644 --- a/src/google/protobuf/map_field.h +++ b/src/google/protobuf/map_field.h @@ -9,12 +9,19 @@ #define GOOGLE_PROTOBUF_MAP_FIELD_H__ #include +#include +#include #include +#include #include +#include +#include "absl/log/absl_check.h" +#include "absl/log/absl_log.h" #include "absl/synchronization/mutex.h" #include "google/protobuf/arena.h" #include "google/protobuf/descriptor.h" +#include "google/protobuf/explicitly_constructed.h" #include "google/protobuf/generated_message_reflection.h" #include "google/protobuf/generated_message_util.h" #include "google/protobuf/internal_visibility.h" @@ -23,6 +30,7 @@ #include "google/protobuf/map_field_lite.h" #include "google/protobuf/map_type_handler.h" #include "google/protobuf/message.h" +#include "google/protobuf/message_lite.h" #include "google/protobuf/port.h" #include "google/protobuf/repeated_field.h" #include "google/protobuf/unknown_field_set.h" @@ -71,7 +79,7 @@ class PROTOBUF_EXPORT MapKey { ~MapKey() { if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_.Destruct(); + val_.string_value.Destruct(); } } @@ -86,52 +94,52 @@ class PROTOBUF_EXPORT MapKey { void SetInt64Value(int64_t value) { SetType(FieldDescriptor::CPPTYPE_INT64); - val_.int64_value_ = value; + val_.int64_value = value; } void SetUInt64Value(uint64_t value) { SetType(FieldDescriptor::CPPTYPE_UINT64); - val_.uint64_value_ = value; + val_.uint64_value = value; } void SetInt32Value(int32_t value) { SetType(FieldDescriptor::CPPTYPE_INT32); - val_.int32_value_ = value; + val_.int32_value = value; } void SetUInt32Value(uint32_t value) { SetType(FieldDescriptor::CPPTYPE_UINT32); - val_.uint32_value_ = value; + val_.uint32_value = value; } void SetBoolValue(bool value) { SetType(FieldDescriptor::CPPTYPE_BOOL); - val_.bool_value_ = value; + val_.bool_value = value; } void SetStringValue(std::string val) { SetType(FieldDescriptor::CPPTYPE_STRING); - *val_.string_value_.get_mutable() = std::move(val); + *val_.string_value.get_mutable() = std::move(val); } int64_t GetInt64Value() const { TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, "MapKey::GetInt64Value"); - return val_.int64_value_; + return val_.int64_value; } uint64_t GetUInt64Value() const { TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, "MapKey::GetUInt64Value"); - return val_.uint64_value_; + return val_.uint64_value; } int32_t GetInt32Value() const { TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, "MapKey::GetInt32Value"); - return val_.int32_value_; + return val_.int32_value; } uint32_t GetUInt32Value() const { TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, "MapKey::GetUInt32Value"); - return val_.uint32_value_; + return val_.uint32_value; } bool GetBoolValue() const { TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, "MapKey::GetBoolValue"); - return val_.bool_value_; + return val_.bool_value; } const std::string& GetStringValue() const { TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, "MapKey::GetStringValue"); - return val_.string_value_.get(); + return val_.string_value.get(); } bool operator<(const MapKey& other) const { @@ -148,17 +156,17 @@ class PROTOBUF_EXPORT MapKey { ABSL_LOG(FATAL) << "Unsupported"; return false; case FieldDescriptor::CPPTYPE_STRING: - return val_.string_value_.get() < other.val_.string_value_.get(); + return val_.string_value.get() < other.val_.string_value.get(); case FieldDescriptor::CPPTYPE_INT64: - return val_.int64_value_ < other.val_.int64_value_; + return val_.int64_value < other.val_.int64_value; case FieldDescriptor::CPPTYPE_INT32: - return val_.int32_value_ < other.val_.int32_value_; + return val_.int32_value < other.val_.int32_value; case FieldDescriptor::CPPTYPE_UINT64: - return val_.uint64_value_ < other.val_.uint64_value_; + return val_.uint64_value < other.val_.uint64_value; case FieldDescriptor::CPPTYPE_UINT32: - return val_.uint32_value_ < other.val_.uint32_value_; + return val_.uint32_value < other.val_.uint32_value; case FieldDescriptor::CPPTYPE_BOOL: - return val_.bool_value_ < other.val_.bool_value_; + return val_.bool_value < other.val_.bool_value; } return false; } @@ -176,17 +184,17 @@ class PROTOBUF_EXPORT MapKey { ABSL_LOG(FATAL) << "Unsupported"; break; case FieldDescriptor::CPPTYPE_STRING: - return val_.string_value_.get() == other.val_.string_value_.get(); + return val_.string_value.get() == other.val_.string_value.get(); case FieldDescriptor::CPPTYPE_INT64: - return val_.int64_value_ == other.val_.int64_value_; + return val_.int64_value == other.val_.int64_value; case FieldDescriptor::CPPTYPE_INT32: - return val_.int32_value_ == other.val_.int32_value_; + return val_.int32_value == other.val_.int32_value; case FieldDescriptor::CPPTYPE_UINT64: - return val_.uint64_value_ == other.val_.uint64_value_; + return val_.uint64_value == other.val_.uint64_value; case FieldDescriptor::CPPTYPE_UINT32: - return val_.uint32_value_ == other.val_.uint32_value_; + return val_.uint32_value == other.val_.uint32_value; case FieldDescriptor::CPPTYPE_BOOL: - return val_.bool_value_ == other.val_.bool_value_; + return val_.bool_value == other.val_.bool_value; } ABSL_LOG(FATAL) << "Can't get here."; return false; @@ -202,22 +210,22 @@ class PROTOBUF_EXPORT MapKey { ABSL_LOG(FATAL) << "Unsupported"; break; case FieldDescriptor::CPPTYPE_STRING: - *val_.string_value_.get_mutable() = other.val_.string_value_.get(); + *val_.string_value.get_mutable() = other.val_.string_value.get(); break; case FieldDescriptor::CPPTYPE_INT64: - val_.int64_value_ = other.val_.int64_value_; + val_.int64_value = other.val_.int64_value; break; case FieldDescriptor::CPPTYPE_INT32: - val_.int32_value_ = other.val_.int32_value_; + val_.int32_value = other.val_.int32_value; break; case FieldDescriptor::CPPTYPE_UINT64: - val_.uint64_value_ = other.val_.uint64_value_; + val_.uint64_value = other.val_.uint64_value; break; case FieldDescriptor::CPPTYPE_UINT32: - val_.uint32_value_ = other.val_.uint32_value_; + val_.uint32_value = other.val_.uint32_value; break; case FieldDescriptor::CPPTYPE_BOOL: - val_.bool_value_ = other.val_.bool_value_; + val_.bool_value = other.val_.bool_value; break; } } @@ -231,22 +239,22 @@ class PROTOBUF_EXPORT MapKey { union KeyValue { KeyValue() {} - internal::ExplicitlyConstructed string_value_; - int64_t int64_value_; - int32_t int32_value_; - uint64_t uint64_value_; - uint32_t uint32_value_; - bool bool_value_; + internal::ExplicitlyConstructed string_value; + int64_t int64_value; + int32_t int32_value; + uint64_t uint64_value; + uint32_t uint32_value; + bool bool_value; } val_; void SetType(FieldDescriptor::CppType type) { if (type_ == type) return; if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_.Destruct(); + val_.string_value.Destruct(); } type_ = type; if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_.DefaultConstruct(); + val_.string_value.DefaultConstruct(); } } @@ -291,6 +299,8 @@ class ContendedMapCleanTest; class GeneratedMessageReflection; class MapFieldAccessor; +struct MapFieldTestPeer; + // This class provides access to map field using reflection, which is the same // as those provided for RepeatedPtrField. It is used for internal // reflection implementation only. Users should never use this directly. @@ -645,7 +655,7 @@ class MapField final : public TypeDefinedMapFieldBase { constexpr MapField() : MapField::TypeDefinedMapFieldBase(&kVTable) {} MapField(const MapField&) = delete; MapField& operator=(const MapField&) = delete; - ~MapField() {} + ~MapField() = default; explicit MapField(Arena* arena) : TypeDefinedMapFieldBase(&kVTable, arena) {} @@ -834,7 +844,7 @@ class PROTOBUF_EXPORT MapValueConstRef { // the map value. class PROTOBUF_EXPORT MapValueRef final : public MapValueConstRef { public: - MapValueRef() {} + MapValueRef() = default; void SetInt64Value(int64_t value) { TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, "MapValueRef::SetInt64Value");