Internal change.

PiperOrigin-RevId: 653680509
pull/17499/head
Protobuf Team Bot 7 months ago committed by Copybara-Service
parent d0e49dfe31
commit b84942022d
  1. 18
      src/google/protobuf/unknown_field_set.cc
  2. 25
      src/google/protobuf/unknown_field_set.h
  3. 4
      src/google/protobuf/unknown_field_set_unittest.cc

@ -26,7 +26,6 @@
#include "google/protobuf/wire_format.h"
#include "google/protobuf/wire_format_lite.h"
// Must be included last.
#include "google/protobuf/port_def.inc"
@ -95,9 +94,9 @@ size_t UnknownFieldSet::SpaceUsedExcludingSelfLong() const {
for (const UnknownField& field : fields_) {
switch (field.type()) {
case UnknownField::TYPE_LENGTH_DELIMITED:
total_size += sizeof(*field.data_.length_delimited_.string_value) +
total_size += sizeof(*field.data_.string_value) +
internal::StringSpaceUsedExcludingSelfLong(
*field.data_.length_delimited_.string_value);
*field.data_.string_value);
break;
case UnknownField::TYPE_GROUP:
total_size += field.data_.group_->SpaceUsedLong();
@ -142,11 +141,10 @@ std::string* UnknownFieldSet::AddLengthDelimited(int number) {
auto& field = fields_.back();
field.number_ = number;
field.SetType(UnknownField::TYPE_LENGTH_DELIMITED);
field.data_.length_delimited_.string_value = new std::string;
return field.data_.length_delimited_.string_value;
field.data_.string_value = new std::string;
return field.data_.string_value;
}
UnknownFieldSet* UnknownFieldSet::AddGroup(int number) {
fields_.emplace_back();
auto& field = fields_.back();
@ -249,7 +247,7 @@ bool UnknownFieldSet::SerializeToCord(absl::Cord* output) const {
void UnknownField::Delete() {
switch (type()) {
case UnknownField::TYPE_LENGTH_DELIMITED:
delete data_.length_delimited_.string_value;
delete data_.string_value;
break;
case UnknownField::TYPE_GROUP:
delete data_.group_;
@ -263,8 +261,7 @@ void UnknownField::DeepCopy(const UnknownField& other) {
(void)other; // Parameter is used by Google-internal code.
switch (type()) {
case UnknownField::TYPE_LENGTH_DELIMITED:
data_.length_delimited_.string_value =
new std::string(*data_.length_delimited_.string_value);
data_.string_value = new std::string(*data_.string_value);
break;
case UnknownField::TYPE_GROUP: {
UnknownFieldSet* group = new UnknownFieldSet();
@ -277,11 +274,10 @@ void UnknownField::DeepCopy(const UnknownField& other) {
}
}
uint8_t* UnknownField::InternalSerializeLengthDelimitedNoTag(
uint8_t* target, io::EpsCopyOutputStream* stream) const {
ABSL_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type());
const absl::string_view data = *data_.length_delimited_.string_value;
const absl::string_view data = *data_.string_value;
target = io::CodedOutputStream::WriteVarint32ToArray(data.size(), target);
target = stream->WriteRaw(data.data(), data.size(), target);
return target;

@ -255,6 +255,8 @@ class PROTOBUF_EXPORT UnknownField {
uint8_t* InternalSerializeLengthDelimitedNoTag(
uint8_t* target, io::EpsCopyOutputStream* stream) const;
private:
friend class UnknownFieldSet;
// If this UnknownField contains a pointer, delete it.
void Delete();
@ -266,17 +268,13 @@ class PROTOBUF_EXPORT UnknownField {
// UnknownField is being created.
inline void SetType(Type type);
union LengthDelimited {
std::string* string_value;
};
uint32_t number_;
uint32_t type_;
union {
uint64_t varint_;
uint32_t fixed32_;
uint64_t fixed64_;
mutable union LengthDelimited length_delimited_;
std::string* string_value;
UnknownFieldSet* group_;
} data_;
};
@ -317,9 +315,6 @@ inline void UnknownFieldSet::AddLengthDelimited(int number,
AddLengthDelimited(number)->assign(value.data(), value.size());
}
inline int UnknownField::number() const { return static_cast<int>(number_); }
inline UnknownField::Type UnknownField::type() const {
return static_cast<Type>(type_);
@ -339,7 +334,7 @@ inline uint64_t UnknownField::fixed64() const {
}
inline internal::UFSStringView UnknownField::length_delimited() const {
assert(type() == TYPE_LENGTH_DELIMITED);
return *data_.length_delimited_.string_value;
return *data_.string_value;
}
inline const UnknownFieldSet& UnknownField::group() const {
assert(type() == TYPE_GROUP);
@ -360,11 +355,11 @@ inline void UnknownField::set_fixed64(uint64_t value) {
}
inline void UnknownField::set_length_delimited(const absl::string_view value) {
assert(type() == TYPE_LENGTH_DELIMITED);
data_.length_delimited_.string_value->assign(value.data(), value.size());
data_.string_value->assign(value.data(), value.size());
}
inline std::string* UnknownField::mutable_length_delimited() {
assert(type() == TYPE_LENGTH_DELIMITED);
return data_.length_delimited_.string_value;
return data_.string_value;
}
inline UnknownFieldSet* UnknownField::mutable_group() {
assert(type() == TYPE_GROUP);
@ -376,16 +371,12 @@ bool UnknownFieldSet::MergeFromMessage(const MessageType& message) {
return InternalMergeFromMessage(message);
}
inline size_t UnknownField::GetLengthDelimitedSize() const {
ABSL_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type());
return data_.length_delimited_.string_value->size();
}
inline void UnknownField::SetType(Type type) {
type_ = type;
return data_.string_value->size();
}
inline void UnknownField::SetType(Type type) { type_ = type; }
} // namespace protobuf
} // namespace google

@ -37,7 +37,6 @@
#include "google/protobuf/unittest_lite.pb.h"
#include "google/protobuf/wire_format.h"
namespace google {
namespace protobuf {
@ -335,7 +334,6 @@ TEST_F(UnknownFieldSetTest, MergeFromMessageLite) {
EXPECT_EQ(unknown_field.fixed32(), 42);
}
TEST_F(UnknownFieldSetTest, Clear) {
// Clear the set.
empty_message_.Clear();
@ -575,7 +573,6 @@ TEST_F(UnknownFieldSetTest, SpaceUsed) {
EXPECT_EQ(total(), empty_message.SpaceUsedLong()) << "Var2";
}
TEST_F(UnknownFieldSetTest, Empty) {
UnknownFieldSet unknown_fields;
EXPECT_TRUE(unknown_fields.empty());
@ -732,6 +729,5 @@ TEST_F(UnknownFieldSetTest, SerializeToCord_TestPackedTypes) {
}
} // namespace
} // namespace protobuf
} // namespace google

Loading…
Cancel
Save