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

Side by Side Diff: third_party/protobuf/src/google/protobuf/reflection_ops.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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 const Descriptor* descriptor = from.GetDescriptor(); 57 const Descriptor* descriptor = from.GetDescriptor();
58 GOOGLE_CHECK_EQ(to->GetDescriptor(), descriptor) 58 GOOGLE_CHECK_EQ(to->GetDescriptor(), descriptor)
59 << "Tried to merge messages of different types " 59 << "Tried to merge messages of different types "
60 << "(merge " << descriptor->full_name() 60 << "(merge " << descriptor->full_name()
61 << " to " << to->GetDescriptor()->full_name() << ")"; 61 << " to " << to->GetDescriptor()->full_name() << ")";
62 62
63 const Reflection* from_reflection = from.GetReflection(); 63 const Reflection* from_reflection = from.GetReflection();
64 const Reflection* to_reflection = to->GetReflection(); 64 const Reflection* to_reflection = to->GetReflection();
65 65
66 vector<const FieldDescriptor*> fields; 66 std::vector<const FieldDescriptor*> fields;
67 from_reflection->ListFields(from, &fields); 67 from_reflection->ListFields(from, &fields);
68 for (int i = 0; i < fields.size(); i++) { 68 for (int i = 0; i < fields.size(); i++) {
69 const FieldDescriptor* field = fields[i]; 69 const FieldDescriptor* field = fields[i];
70 70
71 if (field->is_repeated()) { 71 if (field->is_repeated()) {
72 int count = from_reflection->FieldSize(from, field); 72 int count = from_reflection->FieldSize(from, field);
73 for (int j = 0; j < count; j++) { 73 for (int j = 0; j < count; j++) {
74 switch (field->cpp_type()) { 74 switch (field->cpp_type()) {
75 #define HANDLE_TYPE(CPPTYPE, METHOD) \ 75 #define HANDLE_TYPE(CPPTYPE, METHOD) \
76 case FieldDescriptor::CPPTYPE_##CPPTYPE: \ 76 case FieldDescriptor::CPPTYPE_##CPPTYPE: \
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 } 122 }
123 } 123 }
124 124
125 to_reflection->MutableUnknownFields(to)->MergeFrom( 125 to_reflection->MutableUnknownFields(to)->MergeFrom(
126 from_reflection->GetUnknownFields(from)); 126 from_reflection->GetUnknownFields(from));
127 } 127 }
128 128
129 void ReflectionOps::Clear(Message* message) { 129 void ReflectionOps::Clear(Message* message) {
130 const Reflection* reflection = message->GetReflection(); 130 const Reflection* reflection = message->GetReflection();
131 131
132 vector<const FieldDescriptor*> fields; 132 std::vector<const FieldDescriptor*> fields;
133 reflection->ListFields(*message, &fields); 133 reflection->ListFields(*message, &fields);
134 for (int i = 0; i < fields.size(); i++) { 134 for (int i = 0; i < fields.size(); i++) {
135 reflection->ClearField(message, fields[i]); 135 reflection->ClearField(message, fields[i]);
136 } 136 }
137 137
138 reflection->MutableUnknownFields(message)->Clear(); 138 reflection->MutableUnknownFields(message)->Clear();
139 } 139 }
140 140
141 bool ReflectionOps::IsInitialized(const Message& message) { 141 bool ReflectionOps::IsInitialized(const Message& message) {
142 const Descriptor* descriptor = message.GetDescriptor(); 142 const Descriptor* descriptor = message.GetDescriptor();
143 const Reflection* reflection = message.GetReflection(); 143 const Reflection* reflection = message.GetReflection();
144 144
145 // Check required fields of this message. 145 // Check required fields of this message.
146 for (int i = 0; i < descriptor->field_count(); i++) { 146 for (int i = 0; i < descriptor->field_count(); i++) {
147 if (descriptor->field(i)->is_required()) { 147 if (descriptor->field(i)->is_required()) {
148 if (!reflection->HasField(message, descriptor->field(i))) { 148 if (!reflection->HasField(message, descriptor->field(i))) {
149 return false; 149 return false;
150 } 150 }
151 } 151 }
152 } 152 }
153 153
154 // Check that sub-messages are initialized. 154 // Check that sub-messages are initialized.
155 vector<const FieldDescriptor*> fields; 155 std::vector<const FieldDescriptor*> fields;
156 reflection->ListFields(message, &fields); 156 reflection->ListFields(message, &fields);
157 for (int i = 0; i < fields.size(); i++) { 157 for (int i = 0; i < fields.size(); i++) {
158 const FieldDescriptor* field = fields[i]; 158 const FieldDescriptor* field = fields[i];
159 if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { 159 if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
160 160
161 if (field->is_repeated()) { 161 if (field->is_repeated()) {
162 int size = reflection->FieldSize(message, field); 162 int size = reflection->FieldSize(message, field);
163 163
164 for (int j = 0; j < size; j++) { 164 for (int j = 0; j < size; j++) {
165 if (!reflection->GetRepeatedMessage(message, field, j) 165 if (!reflection->GetRepeatedMessage(message, field, j)
(...skipping 10 matching lines...) Expand all
176 } 176 }
177 177
178 return true; 178 return true;
179 } 179 }
180 180
181 void ReflectionOps::DiscardUnknownFields(Message* message) { 181 void ReflectionOps::DiscardUnknownFields(Message* message) {
182 const Reflection* reflection = message->GetReflection(); 182 const Reflection* reflection = message->GetReflection();
183 183
184 reflection->MutableUnknownFields(message)->Clear(); 184 reflection->MutableUnknownFields(message)->Clear();
185 185
186 vector<const FieldDescriptor*> fields; 186 std::vector<const FieldDescriptor*> fields;
187 reflection->ListFields(*message, &fields); 187 reflection->ListFields(*message, &fields);
188 for (int i = 0; i < fields.size(); i++) { 188 for (int i = 0; i < fields.size(); i++) {
189 const FieldDescriptor* field = fields[i]; 189 const FieldDescriptor* field = fields[i];
190 if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { 190 if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
191 if (field->is_repeated()) { 191 if (field->is_repeated()) {
192 int size = reflection->FieldSize(*message, field); 192 int size = reflection->FieldSize(*message, field);
193 for (int j = 0; j < size; j++) { 193 for (int j = 0; j < size; j++) {
194 reflection->MutableRepeatedMessage(message, field, j) 194 reflection->MutableRepeatedMessage(message, field, j)
195 ->DiscardUnknownFields(); 195 ->DiscardUnknownFields();
196 } 196 }
(...skipping 20 matching lines...) Expand all
217 result.append(SimpleItoa(index)); 217 result.append(SimpleItoa(index));
218 result.append("]"); 218 result.append("]");
219 } 219 }
220 result.append("."); 220 result.append(".");
221 return result; 221 return result;
222 } 222 }
223 223
224 void ReflectionOps::FindInitializationErrors( 224 void ReflectionOps::FindInitializationErrors(
225 const Message& message, 225 const Message& message,
226 const string& prefix, 226 const string& prefix,
227 vector<string>* errors) { 227 std::vector<string>* errors) {
228 const Descriptor* descriptor = message.GetDescriptor(); 228 const Descriptor* descriptor = message.GetDescriptor();
229 const Reflection* reflection = message.GetReflection(); 229 const Reflection* reflection = message.GetReflection();
230 230
231 // Check required fields of this message. 231 // Check required fields of this message.
232 for (int i = 0; i < descriptor->field_count(); i++) { 232 for (int i = 0; i < descriptor->field_count(); i++) {
233 if (descriptor->field(i)->is_required()) { 233 if (descriptor->field(i)->is_required()) {
234 if (!reflection->HasField(message, descriptor->field(i))) { 234 if (!reflection->HasField(message, descriptor->field(i))) {
235 errors->push_back(prefix + descriptor->field(i)->name()); 235 errors->push_back(prefix + descriptor->field(i)->name());
236 } 236 }
237 } 237 }
238 } 238 }
239 239
240 // Check sub-messages. 240 // Check sub-messages.
241 vector<const FieldDescriptor*> fields; 241 std::vector<const FieldDescriptor*> fields;
242 reflection->ListFields(message, &fields); 242 reflection->ListFields(message, &fields);
243 for (int i = 0; i < fields.size(); i++) { 243 for (int i = 0; i < fields.size(); i++) {
244 const FieldDescriptor* field = fields[i]; 244 const FieldDescriptor* field = fields[i];
245 if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { 245 if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
246 246
247 if (field->is_repeated()) { 247 if (field->is_repeated()) {
248 int size = reflection->FieldSize(message, field); 248 int size = reflection->FieldSize(message, field);
249 249
250 for (int j = 0; j < size; j++) { 250 for (int j = 0; j < size; j++) {
251 const Message& sub_message = 251 const Message& sub_message =
252 reflection->GetRepeatedMessage(message, field, j); 252 reflection->GetRepeatedMessage(message, field, j);
253 FindInitializationErrors(sub_message, 253 FindInitializationErrors(sub_message,
254 SubMessagePrefix(prefix, field, j), 254 SubMessagePrefix(prefix, field, j),
255 errors); 255 errors);
256 } 256 }
257 } else { 257 } else {
258 const Message& sub_message = reflection->GetMessage(message, field); 258 const Message& sub_message = reflection->GetMessage(message, field);
259 FindInitializationErrors(sub_message, 259 FindInitializationErrors(sub_message,
260 SubMessagePrefix(prefix, field, -1), 260 SubMessagePrefix(prefix, field, -1),
261 errors); 261 errors);
262 } 262 }
263 } 263 }
264 } 264 }
265 } 265 }
266 266
267 } // namespace internal 267 } // namespace internal
268 } // namespace protobuf 268 } // namespace protobuf
269 } // namespace google 269 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698