| 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
|
|
|