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

Side by Side Diff: third_party/protobuf/src/google/protobuf/wire_format.cc

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 300
301 // End group. 301 // End group.
302 target = io::CodedOutputStream::WriteTagToArray( 302 target = io::CodedOutputStream::WriteTagToArray(
303 WireFormatLite::kMessageSetItemEndTag, target); 303 WireFormatLite::kMessageSetItemEndTag, target);
304 } 304 }
305 } 305 }
306 306
307 return target; 307 return target;
308 } 308 }
309 309
310 int WireFormat::ComputeUnknownFieldsSize( 310 size_t WireFormat::ComputeUnknownFieldsSize(
311 const UnknownFieldSet& unknown_fields) { 311 const UnknownFieldSet& unknown_fields) {
312 int size = 0; 312 size_t size = 0;
313 for (int i = 0; i < unknown_fields.field_count(); i++) { 313 for (int i = 0; i < unknown_fields.field_count(); i++) {
314 const UnknownField& field = unknown_fields.field(i); 314 const UnknownField& field = unknown_fields.field(i);
315 315
316 switch (field.type()) { 316 switch (field.type()) {
317 case UnknownField::TYPE_VARINT: 317 case UnknownField::TYPE_VARINT:
318 size += io::CodedOutputStream::VarintSize32( 318 size += io::CodedOutputStream::VarintSize32(
319 WireFormatLite::MakeTag(field.number(), 319 WireFormatLite::MakeTag(field.number(),
320 WireFormatLite::WIRETYPE_VARINT)); 320 WireFormatLite::WIRETYPE_VARINT));
321 size += io::CodedOutputStream::VarintSize64(field.varint()); 321 size += io::CodedOutputStream::VarintSize64(field.varint());
322 break; 322 break;
(...skipping 25 matching lines...) Expand all
348 size += io::CodedOutputStream::VarintSize32( 348 size += io::CodedOutputStream::VarintSize32(
349 WireFormatLite::MakeTag(field.number(), 349 WireFormatLite::MakeTag(field.number(),
350 WireFormatLite::WIRETYPE_END_GROUP)); 350 WireFormatLite::WIRETYPE_END_GROUP));
351 break; 351 break;
352 } 352 }
353 } 353 }
354 354
355 return size; 355 return size;
356 } 356 }
357 357
358 int WireFormat::ComputeUnknownMessageSetItemsSize( 358 size_t WireFormat::ComputeUnknownMessageSetItemsSize(
359 const UnknownFieldSet& unknown_fields) { 359 const UnknownFieldSet& unknown_fields) {
360 int size = 0; 360 size_t size = 0;
361 for (int i = 0; i < unknown_fields.field_count(); i++) { 361 for (int i = 0; i < unknown_fields.field_count(); i++) {
362 const UnknownField& field = unknown_fields.field(i); 362 const UnknownField& field = unknown_fields.field(i);
363 363
364 // The only unknown fields that are allowed to exist in a MessageSet are 364 // The only unknown fields that are allowed to exist in a MessageSet are
365 // messages, which are length-delimited. 365 // messages, which are length-delimited.
366 if (field.type() == UnknownField::TYPE_LENGTH_DELIMITED) { 366 if (field.type() == UnknownField::TYPE_LENGTH_DELIMITED) {
367 size += WireFormatLite::kMessageSetItemTagsSize; 367 size += WireFormatLite::kMessageSetItemTagsSize;
368 size += io::CodedOutputStream::VarintSize32(field.number()); 368 size += io::CodedOutputStream::VarintSize32(field.number());
369 369
370 int field_size = field.GetLengthDelimitedSize(); 370 int field_size = field.GetLengthDelimitedSize();
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 785
786 // =================================================================== 786 // ===================================================================
787 787
788 void WireFormat::SerializeWithCachedSizes( 788 void WireFormat::SerializeWithCachedSizes(
789 const Message& message, 789 const Message& message,
790 int size, io::CodedOutputStream* output) { 790 int size, io::CodedOutputStream* output) {
791 const Descriptor* descriptor = message.GetDescriptor(); 791 const Descriptor* descriptor = message.GetDescriptor();
792 const Reflection* message_reflection = message.GetReflection(); 792 const Reflection* message_reflection = message.GetReflection();
793 int expected_endpoint = output->ByteCount() + size; 793 int expected_endpoint = output->ByteCount() + size;
794 794
795 vector<const FieldDescriptor*> fields; 795 std::vector<const FieldDescriptor*> fields;
796 message_reflection->ListFields(message, &fields); 796 message_reflection->ListFields(message, &fields);
797 for (int i = 0; i < fields.size(); i++) { 797 for (int i = 0; i < fields.size(); i++) {
798 SerializeFieldWithCachedSizes(fields[i], message, output); 798 SerializeFieldWithCachedSizes(fields[i], message, output);
799 } 799 }
800 800
801 if (descriptor->options().message_set_wire_format()) { 801 if (descriptor->options().message_set_wire_format()) {
802 SerializeUnknownMessageSetItems( 802 SerializeUnknownMessageSetItems(
803 message_reflection->GetUnknownFields(message), output); 803 message_reflection->GetUnknownFields(message), output);
804 } else { 804 } else {
805 SerializeUnknownFields( 805 SerializeUnknownFields(
(...skipping 25 matching lines...) Expand all
831 if (field->is_repeated()) { 831 if (field->is_repeated()) {
832 count = message_reflection->FieldSize(message, field); 832 count = message_reflection->FieldSize(message, field);
833 } else if (message_reflection->HasField(message, field)) { 833 } else if (message_reflection->HasField(message, field)) {
834 count = 1; 834 count = 1;
835 } 835 }
836 836
837 const bool is_packed = field->is_packed(); 837 const bool is_packed = field->is_packed();
838 if (is_packed && count > 0) { 838 if (is_packed && count > 0) {
839 WireFormatLite::WriteTag(field->number(), 839 WireFormatLite::WriteTag(field->number(),
840 WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); 840 WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
841 const int data_size = FieldDataOnlyByteSize(field, message); 841 const size_t data_size = FieldDataOnlyByteSize(field, message);
842 output->WriteVarint32(data_size); 842 output->WriteVarint32(data_size);
843 } 843 }
844 844
845 for (int j = 0; j < count; j++) { 845 for (int j = 0; j < count; j++) {
846 switch (field->type()) { 846 switch (field->type()) {
847 #define HANDLE_PRIMITIVE_TYPE(TYPE, CPPTYPE, TYPE_METHOD, CPPTYPE_METHOD) \ 847 #define HANDLE_PRIMITIVE_TYPE(TYPE, CPPTYPE, TYPE_METHOD, CPPTYPE_METHOD) \
848 case FieldDescriptor::TYPE_##TYPE: { \ 848 case FieldDescriptor::TYPE_##TYPE: { \
849 const CPPTYPE value = field->is_repeated() ? \ 849 const CPPTYPE value = field->is_repeated() ? \
850 message_reflection->GetRepeated##CPPTYPE_METHOD( \ 850 message_reflection->GetRepeated##CPPTYPE_METHOD( \
851 message, field, j) : \ 851 message, field, j) : \
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 const Message& sub_message = message_reflection->GetMessage(message, field); 957 const Message& sub_message = message_reflection->GetMessage(message, field);
958 output->WriteVarint32(sub_message.GetCachedSize()); 958 output->WriteVarint32(sub_message.GetCachedSize());
959 sub_message.SerializeWithCachedSizes(output); 959 sub_message.SerializeWithCachedSizes(output);
960 960
961 // End group. 961 // End group.
962 output->WriteVarint32(WireFormatLite::kMessageSetItemEndTag); 962 output->WriteVarint32(WireFormatLite::kMessageSetItemEndTag);
963 } 963 }
964 964
965 // =================================================================== 965 // ===================================================================
966 966
967 int WireFormat::ByteSize(const Message& message) { 967 size_t WireFormat::ByteSize(const Message& message) {
968 const Descriptor* descriptor = message.GetDescriptor(); 968 const Descriptor* descriptor = message.GetDescriptor();
969 const Reflection* message_reflection = message.GetReflection(); 969 const Reflection* message_reflection = message.GetReflection();
970 970
971 int our_size = 0; 971 size_t our_size = 0;
972 972
973 vector<const FieldDescriptor*> fields; 973 std::vector<const FieldDescriptor*> fields;
974 message_reflection->ListFields(message, &fields); 974 message_reflection->ListFields(message, &fields);
975 for (int i = 0; i < fields.size(); i++) { 975 for (int i = 0; i < fields.size(); i++) {
976 our_size += FieldByteSize(fields[i], message); 976 our_size += FieldByteSize(fields[i], message);
977 } 977 }
978 978
979 if (descriptor->options().message_set_wire_format()) { 979 if (descriptor->options().message_set_wire_format()) {
980 our_size += ComputeUnknownMessageSetItemsSize( 980 our_size += ComputeUnknownMessageSetItemsSize(
981 message_reflection->GetUnknownFields(message)); 981 message_reflection->GetUnknownFields(message));
982 } else { 982 } else {
983 our_size += ComputeUnknownFieldsSize( 983 our_size += ComputeUnknownFieldsSize(
984 message_reflection->GetUnknownFields(message)); 984 message_reflection->GetUnknownFields(message));
985 } 985 }
986 986
987 return our_size; 987 return our_size;
988 } 988 }
989 989
990 int WireFormat::FieldByteSize( 990 size_t WireFormat::FieldByteSize(
991 const FieldDescriptor* field, 991 const FieldDescriptor* field,
992 const Message& message) { 992 const Message& message) {
993 const Reflection* message_reflection = message.GetReflection(); 993 const Reflection* message_reflection = message.GetReflection();
994 994
995 if (field->is_extension() && 995 if (field->is_extension() &&
996 field->containing_type()->options().message_set_wire_format() && 996 field->containing_type()->options().message_set_wire_format() &&
997 field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && 997 field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
998 !field->is_repeated()) { 998 !field->is_repeated()) {
999 return MessageSetItemByteSize(field, message); 999 return MessageSetItemByteSize(field, message);
1000 } 1000 }
1001 1001
1002 int count = 0; 1002 size_t count = 0;
1003 if (field->is_repeated()) { 1003 if (field->is_repeated()) {
1004 count = message_reflection->FieldSize(message, field); 1004 count = FromIntSize(message_reflection->FieldSize(message, field));
1005 } else if (message_reflection->HasField(message, field)) { 1005 } else if (message_reflection->HasField(message, field)) {
1006 count = 1; 1006 count = 1;
1007 } 1007 }
1008 1008
1009 const int data_size = FieldDataOnlyByteSize(field, message); 1009 const size_t data_size = FieldDataOnlyByteSize(field, message);
1010 int our_size = data_size; 1010 size_t our_size = data_size;
1011 if (field->is_packed()) { 1011 if (field->is_packed()) {
1012 if (data_size > 0) { 1012 if (data_size > 0) {
1013 // Packed fields get serialized like a string, not their native type. 1013 // Packed fields get serialized like a string, not their native type.
1014 // Technically this doesn't really matter; the size only changes if it's 1014 // Technically this doesn't really matter; the size only changes if it's
1015 // a GROUP 1015 // a GROUP
1016 our_size += TagSize(field->number(), FieldDescriptor::TYPE_STRING); 1016 our_size += TagSize(field->number(), FieldDescriptor::TYPE_STRING);
1017 our_size += io::CodedOutputStream::VarintSize32(data_size); 1017 our_size += io::CodedOutputStream::VarintSize32(data_size);
1018 } 1018 }
1019 } else { 1019 } else {
1020 our_size += count * TagSize(field->number(), field->type()); 1020 our_size += count * TagSize(field->number(), field->type());
1021 } 1021 }
1022 return our_size; 1022 return our_size;
1023 } 1023 }
1024 1024
1025 int WireFormat::FieldDataOnlyByteSize( 1025 size_t WireFormat::FieldDataOnlyByteSize(
1026 const FieldDescriptor* field, 1026 const FieldDescriptor* field,
1027 const Message& message) { 1027 const Message& message) {
1028 const Reflection* message_reflection = message.GetReflection(); 1028 const Reflection* message_reflection = message.GetReflection();
1029 1029
1030 int count = 0; 1030 size_t count = 0;
1031 if (field->is_repeated()) { 1031 if (field->is_repeated()) {
1032 count = message_reflection->FieldSize(message, field); 1032 count =
1033 internal::FromIntSize(message_reflection->FieldSize(message, field));
1033 } else if (message_reflection->HasField(message, field)) { 1034 } else if (message_reflection->HasField(message, field)) {
1034 count = 1; 1035 count = 1;
1035 } 1036 }
1036 1037
1037 int data_size = 0; 1038 size_t data_size = 0;
1038 switch (field->type()) { 1039 switch (field->type()) {
1039 #define HANDLE_TYPE(TYPE, TYPE_METHOD, CPPTYPE_METHOD) \ 1040 #define HANDLE_TYPE(TYPE, TYPE_METHOD, CPPTYPE_METHOD) \
1040 case FieldDescriptor::TYPE_##TYPE: \ 1041 case FieldDescriptor::TYPE_##TYPE: \
1041 if (field->is_repeated()) { \ 1042 if (field->is_repeated()) { \
1042 for (int j = 0; j < count; j++) { \ 1043 for (int j = 0; j < count; j++) { \
1043 data_size += WireFormatLite::TYPE_METHOD##Size( \ 1044 data_size += WireFormatLite::TYPE_METHOD##Size( \
1044 message_reflection->GetRepeated##CPPTYPE_METHOD( \ 1045 message_reflection->GetRepeated##CPPTYPE_METHOD( \
1045 message, field, j)); \ 1046 message, field, j)); \
1046 } \ 1047 } \
1047 } else { \ 1048 } else { \
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 message, field, j, &scratch) : 1102 message, field, j, &scratch) :
1102 message_reflection->GetStringReference(message, field, &scratch); 1103 message_reflection->GetStringReference(message, field, &scratch);
1103 data_size += WireFormatLite::StringSize(value); 1104 data_size += WireFormatLite::StringSize(value);
1104 } 1105 }
1105 break; 1106 break;
1106 } 1107 }
1107 } 1108 }
1108 return data_size; 1109 return data_size;
1109 } 1110 }
1110 1111
1111 int WireFormat::MessageSetItemByteSize( 1112 size_t WireFormat::MessageSetItemByteSize(
1112 const FieldDescriptor* field, 1113 const FieldDescriptor* field,
1113 const Message& message) { 1114 const Message& message) {
1114 const Reflection* message_reflection = message.GetReflection(); 1115 const Reflection* message_reflection = message.GetReflection();
1115 1116
1116 int our_size = WireFormatLite::kMessageSetItemTagsSize; 1117 size_t our_size = WireFormatLite::kMessageSetItemTagsSize;
1117 1118
1118 // type_id 1119 // type_id
1119 our_size += io::CodedOutputStream::VarintSize32(field->number()); 1120 our_size += io::CodedOutputStream::VarintSize32(field->number());
1120 1121
1121 // message 1122 // message
1122 const Message& sub_message = message_reflection->GetMessage(message, field); 1123 const Message& sub_message = message_reflection->GetMessage(message, field);
1123 int message_size = sub_message.ByteSize(); 1124 size_t message_size = sub_message.ByteSizeLong();
1124 1125
1125 our_size += io::CodedOutputStream::VarintSize32(message_size); 1126 our_size += io::CodedOutputStream::VarintSize32(message_size);
1126 our_size += message_size; 1127 our_size += message_size;
1127 1128
1128 return our_size; 1129 return our_size;
1129 } 1130 }
1130 1131
1131 } // namespace internal 1132 } // namespace internal
1132 } // namespace protobuf 1133 } // namespace protobuf
1133 } // namespace google 1134 } // namespace google
OLDNEW
« no previous file with comments | « third_party/protobuf/src/google/protobuf/wire_format.h ('k') | third_party/protobuf/src/google/protobuf/wire_format_lite.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698