Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: third_party/protobuf/src/google/protobuf/wire_format_lite.cc

Issue 1322483002: Revert https://codereview.chromium.org/1291903002 (protobuf roll). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/src/google/protobuf/wire_format_lite.cc
diff --git a/third_party/protobuf/src/google/protobuf/wire_format_lite.cc b/third_party/protobuf/src/google/protobuf/wire_format_lite.cc
index 58160c1feabddaed11954b4f34e858a9b236e2c1..6c21478caed0e2e94c66e03b80437d667d0e9ae7 100644
--- a/third_party/protobuf/src/google/protobuf/wire_format_lite.cc
+++ b/third_party/protobuf/src/google/protobuf/wire_format_lite.cc
@@ -1,6 +1,6 @@
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
+// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
@@ -41,6 +41,7 @@
#include <google/protobuf/io/coded_stream_inl.h>
#include <google/protobuf/io/zero_copy_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
+#include <google/protobuf/unknown_field_set.h>
namespace google {
namespace protobuf {
@@ -73,16 +74,11 @@ void FieldSkipper::SkipUnknownEnum(
// ===================================================================
-// IBM xlC requires prefixing constants with WireFormatLite::
const int WireFormatLite::kMessageSetItemTagsSize =
- io::CodedOutputStream::StaticVarintSize32<
- WireFormatLite::kMessageSetItemStartTag>::value +
- io::CodedOutputStream::StaticVarintSize32<
- WireFormatLite::kMessageSetItemEndTag>::value +
- io::CodedOutputStream::StaticVarintSize32<
- WireFormatLite::kMessageSetTypeIdTag>::value +
- io::CodedOutputStream::StaticVarintSize32<
- WireFormatLite::kMessageSetMessageTag>::value;
+ io::CodedOutputStream::StaticVarintSize32<kMessageSetItemStartTag>::value +
+ io::CodedOutputStream::StaticVarintSize32<kMessageSetItemEndTag>::value +
+ io::CodedOutputStream::StaticVarintSize32<kMessageSetTypeIdTag>::value +
+ io::CodedOutputStream::StaticVarintSize32<kMessageSetMessageTag>::value;
const WireFormatLite::CppType
WireFormatLite::kFieldTypeToCppTypeMap[MAX_FIELD_TYPE + 1] = {
@@ -131,10 +127,6 @@ WireFormatLite::kWireTypeForFieldType[MAX_FIELD_TYPE + 1] = {
WireFormatLite::WIRETYPE_VARINT, // TYPE_SINT64
};
-bool WireFormatLite::SkipField(io::CodedInputStream* input, uint32 tag) {
- return SkipField(input, tag, static_cast<UnknownFieldSet*>(NULL));
-}
-
bool WireFormatLite::SkipField(io::CodedInputStream* input, uint32 tag,
UnknownFieldSet* unknown_fields) {
int number = WireFormatLite::GetTagFieldNumber(tag);
@@ -195,66 +187,9 @@ bool WireFormatLite::SkipField(io::CodedInputStream* input, uint32 tag,
}
}
-bool WireFormatLite::SkipField(
- io::CodedInputStream* input, uint32 tag, io::CodedOutputStream* output) {
- switch (WireFormatLite::GetTagWireType(tag)) {
- case WireFormatLite::WIRETYPE_VARINT: {
- uint64 value;
- if (!input->ReadVarint64(&value)) return false;
- output->WriteVarint32(tag);
- output->WriteVarint64(value);
- return true;
- }
- case WireFormatLite::WIRETYPE_FIXED64: {
- uint64 value;
- if (!input->ReadLittleEndian64(&value)) return false;
- output->WriteVarint32(tag);
- output->WriteLittleEndian64(value);
- return true;
- }
- case WireFormatLite::WIRETYPE_LENGTH_DELIMITED: {
- uint32 length;
- if (!input->ReadVarint32(&length)) return false;
- output->WriteVarint32(tag);
- output->WriteVarint32(length);
- // TODO(mkilavuz): Provide API to prevent extra string copying.
- string temp;
- if (!input->ReadString(&temp, length)) return false;
- output->WriteString(temp);
- return true;
- }
- case WireFormatLite::WIRETYPE_START_GROUP: {
- output->WriteVarint32(tag);
- if (!input->IncrementRecursionDepth()) return false;
- if (!SkipMessage(input, output)) return false;
- input->DecrementRecursionDepth();
- // Check that the ending tag matched the starting tag.
- if (!input->LastTagWas(WireFormatLite::MakeTag(
- WireFormatLite::GetTagFieldNumber(tag),
- WireFormatLite::WIRETYPE_END_GROUP))) {
- return false;
- }
- return true;
- }
- case WireFormatLite::WIRETYPE_END_GROUP: {
- return false;
- }
- case WireFormatLite::WIRETYPE_FIXED32: {
- uint32 value;
- if (!input->ReadLittleEndian32(&value)) return false;
- output->WriteVarint32(tag);
- output->WriteLittleEndian32(value);
- return true;
- }
- default: {
- return false;
- }
- }
-}
-
bool WireFormatLite::SkipMessage(io::CodedInputStream* input,
UnknownFieldSet* unknown_fields) {
- while (true) {
+ while(true) {
uint32 tag = input->ReadTag();
if (tag == 0) {
// End of input. This is a valid place to end, so return true.
@@ -272,56 +207,8 @@ bool WireFormatLite::SkipMessage(io::CodedInputStream* input,
}
}
-bool WireFormatLite::SkipMessage(io::CodedInputStream* input,
- io::CodedOutputStream* output) {
- while (true) {
- uint32 tag = input->ReadTag();
- if (tag == 0) {
- // End of input. This is a valid place to end, so return true.
- return true;
- }
-
- WireFormatLite::WireType wire_type = WireFormatLite::GetTagWireType(tag);
-
- if (wire_type == WireFormatLite::WIRETYPE_END_GROUP) {
- output->WriteVarint32(tag);
- // Must be the end of the message.
- return true;
- }
-
- if (!SkipField(input, tag, output)) return false;
- }
-}
-
-bool WireFormatLite::ReadPackedEnumPreserveUnknowns(
- io::CodedInputStream* input,
- uint32 field_number,
- bool (*is_valid)(int),
- UnknownFieldSet* unknown_fields,
- RepeatedField<int>* values) {
- uint32 length;
- if (!input->ReadVarint32(&length)) return false;
- io::CodedInputStream::Limit limit = input->PushLimit(length);
- while (input->BytesUntilLimit() > 0) {
- int value;
- if (!google::protobuf::internal::WireFormatLite::ReadPrimitive<
- int, WireFormatLite::TYPE_ENUM>(input, &value)) {
- return false;
- }
- if (is_valid == NULL || is_valid(value)) {
- values->Add(value);
- } else {
- unknown_fields->AddVarint(field_number, value);
- }
- }
- input->PopLimit(limit);
- return true;
-}
-
-
-void WireFormatLite::SerializeUnknownFields(
- const UnknownFieldSet& unknown_fields,
- io::CodedOutputStream* output) {
+void WireFormatLite::SerializeUnknownFields(const UnknownFieldSet& unknown_fields,
+ io::CodedOutputStream* output) {
for (int i = 0; i < unknown_fields.field_count(); i++) {
const UnknownField& field = unknown_fields.field(i);
switch (field.type()) {
@@ -344,8 +231,7 @@ void WireFormatLite::SerializeUnknownFields(
output->WriteVarint32(WireFormatLite::MakeTag(field.number(),
WireFormatLite::WIRETYPE_LENGTH_DELIMITED));
output->WriteVarint32(field.length_delimited().size());
- output->WriteRawMaybeAliased(field.length_delimited().data(),
- field.length_delimited().size());
+ output->WriteString(field.length_delimited());
break;
case UnknownField::TYPE_GROUP:
output->WriteVarint32(WireFormatLite::MakeTag(field.number(),
@@ -401,6 +287,8 @@ void WireFormatLite::SerializeUnknownMessageSetItems(
// The only unknown fields that are allowed to exist in a MessageSet are
// messages, which are length-delimited.
if (field.type() == UnknownField::TYPE_LENGTH_DELIMITED) {
+ const string& data = field.length_delimited();
+
// Start group.
output->WriteVarint32(WireFormatLite::kMessageSetItemStartTag);
@@ -410,7 +298,8 @@ void WireFormatLite::SerializeUnknownMessageSetItems(
// Write message.
output->WriteVarint32(WireFormatLite::kMessageSetMessageTag);
- field.SerializeLengthDelimitedNoTag(output);
+ output->WriteVarint32(data.size());
+ output->WriteString(data);
// End group.
output->WriteVarint32(WireFormatLite::kMessageSetItemEndTag);
@@ -427,6 +316,8 @@ uint8* WireFormatLite::SerializeUnknownMessageSetItemsToArray(
// The only unknown fields that are allowed to exist in a MessageSet are
// messages, which are length-delimited.
if (field.type() == UnknownField::TYPE_LENGTH_DELIMITED) {
+ const string& data = field.length_delimited();
+
// Start group.
target = io::CodedOutputStream::WriteTagToArray(
WireFormatLite::kMessageSetItemStartTag, target);
@@ -440,7 +331,8 @@ uint8* WireFormatLite::SerializeUnknownMessageSetItemsToArray(
// Write message.
target = io::CodedOutputStream::WriteTagToArray(
WireFormatLite::kMessageSetMessageTag, target);
- target = field.SerializeLengthDelimitedNoTagToArray(target);
+ target = io::CodedOutputStream::WriteVarint32ToArray(data.size(), target);
+ target = io::CodedOutputStream::WriteStringToArray(data, target);
// End group.
target = io::CodedOutputStream::WriteTagToArray(
@@ -510,31 +402,15 @@ int WireFormatLite::ComputeUnknownMessageSetItemsSize(
if (field.type() == UnknownField::TYPE_LENGTH_DELIMITED) {
size += WireFormatLite::kMessageSetItemTagsSize;
size += io::CodedOutputStream::VarintSize32(field.number());
-
- int field_size = field.GetLengthDelimitedSize();
- size += io::CodedOutputStream::VarintSize32(field_size);
- size += field_size;
+ size += io::CodedOutputStream::VarintSize32(
+ field.length_delimited().size());
+ size += field.length_delimited().size();
}
}
return size;
}
-bool CodedOutputStreamFieldSkipper::SkipField(
- io::CodedInputStream* input, uint32 tag) {
- return WireFormatLite::SkipField(input, tag, unknown_fields_);
-}
-
-bool CodedOutputStreamFieldSkipper::SkipMessage(io::CodedInputStream* input) {
- return WireFormatLite::SkipMessage(input, unknown_fields_);
-}
-
-void CodedOutputStreamFieldSkipper::SkipUnknownEnum(
- int field_number, int value) {
- unknown_fields_->WriteVarint32(field_number);
- unknown_fields_->WriteVarint64(value);
-}
-
bool WireFormatLite::ReadPackedEnumNoInline(io::CodedInputStream* input,
bool (*is_valid)(int),
RepeatedField<int>* values) {
@@ -547,7 +423,7 @@ bool WireFormatLite::ReadPackedEnumNoInline(io::CodedInputStream* input,
int, WireFormatLite::TYPE_ENUM>(input, &value)) {
return false;
}
- if (is_valid == NULL || is_valid(value)) {
+ if (is_valid(value)) {
values->Add(value);
}
}
@@ -555,34 +431,6 @@ bool WireFormatLite::ReadPackedEnumNoInline(io::CodedInputStream* input,
return true;
}
-bool WireFormatLite::ReadPackedEnumPreserveUnknowns(
- io::CodedInputStream* input,
- int field_number,
- bool (*is_valid)(int),
- io::CodedOutputStream* unknown_fields_stream,
- RepeatedField<int>* values) {
- uint32 length;
- if (!input->ReadVarint32(&length)) return false;
- io::CodedInputStream::Limit limit = input->PushLimit(length);
- while (input->BytesUntilLimit() > 0) {
- int value;
- if (!google::protobuf::internal::WireFormatLite::ReadPrimitive<
- int, WireFormatLite::TYPE_ENUM>(input, &value)) {
- return false;
- }
- if (is_valid == NULL || is_valid(value)) {
- values->Add(value);
- } else {
- uint32 tag = WireFormatLite::MakeTag(field_number,
- WireFormatLite::WIRETYPE_VARINT);
- unknown_fields_stream->WriteVarint32(tag);
- unknown_fields_stream->WriteVarint32(value);
- }
- }
- input->PopLimit(limit);
- return true;
-}
-
void WireFormatLite::WriteInt32(int field_number, int32 value,
io::CodedOutputStream* output) {
WriteTag(field_number, WIRETYPE_VARINT, output);
@@ -662,15 +510,6 @@ void WireFormatLite::WriteString(int field_number, const string& value,
output->WriteVarint32(value.size());
output->WriteString(value);
}
-void WireFormatLite::WriteStringMaybeAliased(
- int field_number, const string& value,
- io::CodedOutputStream* output) {
- // String is for UTF-8 text only
- WriteTag(field_number, WIRETYPE_LENGTH_DELIMITED, output);
- GOOGLE_CHECK(value.size() <= kint32max);
- output->WriteVarint32(value.size());
- output->WriteRawMaybeAliased(value.data(), value.size());
-}
void WireFormatLite::WriteBytes(int field_number, const string& value,
io::CodedOutputStream* output) {
WriteTag(field_number, WIRETYPE_LENGTH_DELIMITED, output);
@@ -678,14 +517,6 @@ void WireFormatLite::WriteBytes(int field_number, const string& value,
output->WriteVarint32(value.size());
output->WriteString(value);
}
-void WireFormatLite::WriteBytesMaybeAliased(
- int field_number, const string& value,
- io::CodedOutputStream* output) {
- WriteTag(field_number, WIRETYPE_LENGTH_DELIMITED, output);
- GOOGLE_CHECK(value.size() <= kint32max);
- output->WriteVarint32(value.size());
- output->WriteRawMaybeAliased(value.data(), value.size());
-}
void WireFormatLite::WriteGroup(int field_number,
@@ -735,24 +566,19 @@ void WireFormatLite::WriteMessageMaybeToArray(int field_number,
}
}
-static inline bool ReadBytesToString(io::CodedInputStream* input,
- string* value) GOOGLE_ATTRIBUTE_ALWAYS_INLINE;
-static inline bool ReadBytesToString(io::CodedInputStream* input,
- string* value) {
+bool WireFormatLite::ReadString(io::CodedInputStream* input,
+ string* value) {
+ // String is for UTF-8 text only
uint32 length;
- return input->ReadVarint32(&length) &&
- input->InternalReadStringInline(value, length);
-}
-
-bool WireFormatLite::ReadBytes(io::CodedInputStream* input, string* value) {
- return ReadBytesToString(input, value);
+ if (!input->ReadVarint32(&length)) return false;
+ if (!input->InternalReadStringInline(value, length)) return false;
+ return true;
}
-
-bool WireFormatLite::ReadBytes(io::CodedInputStream* input, string** p) {
- if (*p == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
- *p = new ::std::string();
- }
- return ReadBytesToString(input, *p);
+bool WireFormatLite::ReadBytes(io::CodedInputStream* input,
+ string* value) {
+ uint32 length;
+ if (!input->ReadVarint32(&length)) return false;
+ return input->InternalReadStringInline(value, length);
}
} // namespace internal

Powered by Google App Engine
This is Rietveld 408576698