OLD | NEW |
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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 case FieldDescriptor::TYPE_MESSAGE : return -1; | 73 case FieldDescriptor::TYPE_MESSAGE : return -1; |
74 | 74 |
75 // No default because we want the compiler to complain if any new | 75 // No default because we want the compiler to complain if any new |
76 // types are added. | 76 // types are added. |
77 } | 77 } |
78 GOOGLE_LOG(FATAL) << "Can't get here."; | 78 GOOGLE_LOG(FATAL) << "Can't get here."; |
79 return -1; | 79 return -1; |
80 } | 80 } |
81 | 81 |
82 void SetPrimitiveVariables(const FieldDescriptor* descriptor, | 82 void SetPrimitiveVariables(const FieldDescriptor* descriptor, |
83 std::map<string, string>* variables, | 83 map<string, string>* variables, |
84 const Options& options) { | 84 const Options& options) { |
85 SetCommonFieldVariables(descriptor, variables, options); | 85 SetCommonFieldVariables(descriptor, variables, options); |
86 (*variables)["type"] = PrimitiveTypeName(descriptor->cpp_type()); | 86 (*variables)["type"] = PrimitiveTypeName(descriptor->cpp_type()); |
87 (*variables)["default"] = DefaultValue(descriptor); | 87 (*variables)["default"] = DefaultValue(descriptor); |
88 (*variables)["tag"] = SimpleItoa(internal::WireFormat::MakeTag(descriptor)); | 88 (*variables)["tag"] = SimpleItoa(internal::WireFormat::MakeTag(descriptor)); |
89 int fixed_size = FixedSize(descriptor->type()); | 89 int fixed_size = FixedSize(descriptor->type()); |
90 if (fixed_size != -1) { | 90 if (fixed_size != -1) { |
91 (*variables)["fixed_size"] = SimpleItoa(fixed_size); | 91 (*variables)["fixed_size"] = SimpleItoa(fixed_size); |
92 } | 92 } |
93 (*variables)["wire_format_field_type"] = | 93 (*variables)["wire_format_field_type"] = |
(...skipping 21 matching lines...) Expand all Loading... |
115 | 115 |
116 void PrimitiveFieldGenerator:: | 116 void PrimitiveFieldGenerator:: |
117 GenerateAccessorDeclarations(io::Printer* printer) const { | 117 GenerateAccessorDeclarations(io::Printer* printer) const { |
118 printer->Print(variables_, | 118 printer->Print(variables_, |
119 "$deprecated_attr$$type$ $name$() const;\n" | 119 "$deprecated_attr$$type$ $name$() const;\n" |
120 "$deprecated_attr$void set_$name$($type$ value);\n"); | 120 "$deprecated_attr$void set_$name$($type$ value);\n"); |
121 } | 121 } |
122 | 122 |
123 void PrimitiveFieldGenerator:: | 123 void PrimitiveFieldGenerator:: |
124 GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const { | 124 GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const { |
125 std::map<string, string> variables(variables_); | 125 map<string, string> variables(variables_); |
126 variables["inline"] = is_inline ? "inline " : ""; | 126 variables["inline"] = is_inline ? "inline" : ""; |
127 printer->Print(variables, | 127 printer->Print(variables, |
128 "$inline$$type$ $classname$::$name$() const {\n" | 128 "$inline$ $type$ $classname$::$name$() const {\n" |
129 " // @@protoc_insertion_point(field_get:$full_name$)\n" | 129 " // @@protoc_insertion_point(field_get:$full_name$)\n" |
130 " return $name$_;\n" | 130 " return $name$_;\n" |
131 "}\n" | 131 "}\n" |
132 "$inline$void $classname$::set_$name$($type$ value) {\n" | 132 "$inline$ void $classname$::set_$name$($type$ value) {\n" |
133 " $set_hasbit$\n" | 133 " $set_hasbit$\n" |
134 " $name$_ = value;\n" | 134 " $name$_ = value;\n" |
135 " // @@protoc_insertion_point(field_set:$full_name$)\n" | 135 " // @@protoc_insertion_point(field_set:$full_name$)\n" |
136 "}\n"); | 136 "}\n"); |
137 } | 137 } |
138 | 138 |
139 void PrimitiveFieldGenerator:: | 139 void PrimitiveFieldGenerator:: |
140 GenerateClearingCode(io::Printer* printer) const { | 140 GenerateClearingCode(io::Printer* printer) const { |
141 printer->Print(variables_, "$name$_ = $default$;\n"); | 141 printer->Print(variables_, "$name$_ = $default$;\n"); |
142 } | 142 } |
143 | 143 |
144 void PrimitiveFieldGenerator:: | 144 void PrimitiveFieldGenerator:: |
145 GenerateMergingCode(io::Printer* printer) const { | 145 GenerateMergingCode(io::Printer* printer) const { |
146 printer->Print(variables_, "set_$name$(from.$name$());\n"); | 146 printer->Print(variables_, "set_$name$(from.$name$());\n"); |
147 } | 147 } |
148 | 148 |
149 void PrimitiveFieldGenerator:: | 149 void PrimitiveFieldGenerator:: |
150 GenerateSwappingCode(io::Printer* printer) const { | 150 GenerateSwappingCode(io::Printer* printer) const { |
151 printer->Print(variables_, "std::swap($name$_, other->$name$_);\n"); | 151 printer->Print(variables_, "std::swap($name$_, other->$name$_);\n"); |
152 } | 152 } |
153 | 153 |
154 void PrimitiveFieldGenerator:: | 154 void PrimitiveFieldGenerator:: |
155 GenerateConstructorCode(io::Printer* printer) const { | 155 GenerateConstructorCode(io::Printer* printer) const { |
156 printer->Print(variables_, "$name$_ = $default$;\n"); | 156 printer->Print(variables_, "$name$_ = $default$;\n"); |
157 } | 157 } |
158 | 158 |
159 void PrimitiveFieldGenerator:: | 159 void PrimitiveFieldGenerator:: |
160 GenerateCopyConstructorCode(io::Printer* printer) const { | |
161 printer->Print(variables_, "$name$_ = from.$name$_;\n"); | |
162 } | |
163 | |
164 void PrimitiveFieldGenerator:: | |
165 GenerateMergeFromCodedStream(io::Printer* printer) const { | 160 GenerateMergeFromCodedStream(io::Printer* printer) const { |
166 printer->Print(variables_, | 161 printer->Print(variables_, |
167 "$set_hasbit$\n" | |
168 "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" | 162 "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" |
169 " $type$, $wire_format_field_type$>(\n" | 163 " $type$, $wire_format_field_type$>(\n" |
170 " input, &$name$_)));\n"); | 164 " input, &$name$_)));\n" |
| 165 "$set_hasbit$\n"); |
171 } | 166 } |
172 | 167 |
173 void PrimitiveFieldGenerator:: | 168 void PrimitiveFieldGenerator:: |
174 GenerateSerializeWithCachedSizes(io::Printer* printer) const { | 169 GenerateSerializeWithCachedSizes(io::Printer* printer) const { |
175 printer->Print(variables_, | 170 printer->Print(variables_, |
176 "::google::protobuf::internal::WireFormatLite::Write$declared_type$(" | 171 "::google::protobuf::internal::WireFormatLite::Write$declared_type$(" |
177 "$number$, this->$name$(), output);\n"); | 172 "$number$, this->$name$(), output);\n"); |
178 } | 173 } |
179 | 174 |
180 void PrimitiveFieldGenerator:: | 175 void PrimitiveFieldGenerator:: |
(...skipping 23 matching lines...) Expand all Loading... |
204 PrimitiveOneofFieldGenerator(const FieldDescriptor* descriptor, | 199 PrimitiveOneofFieldGenerator(const FieldDescriptor* descriptor, |
205 const Options& options) | 200 const Options& options) |
206 : PrimitiveFieldGenerator(descriptor, options) { | 201 : PrimitiveFieldGenerator(descriptor, options) { |
207 SetCommonOneofFieldVariables(descriptor, &variables_); | 202 SetCommonOneofFieldVariables(descriptor, &variables_); |
208 } | 203 } |
209 | 204 |
210 PrimitiveOneofFieldGenerator::~PrimitiveOneofFieldGenerator() {} | 205 PrimitiveOneofFieldGenerator::~PrimitiveOneofFieldGenerator() {} |
211 | 206 |
212 void PrimitiveOneofFieldGenerator:: | 207 void PrimitiveOneofFieldGenerator:: |
213 GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const { | 208 GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const { |
214 std::map<string, string> variables(variables_); | 209 map<string, string> variables(variables_); |
215 variables["inline"] = is_inline ? "inline " : ""; | 210 variables["inline"] = is_inline ? "inline" : ""; |
216 printer->Print(variables, | 211 printer->Print(variables, |
217 "$inline$$type$ $classname$::$name$() const {\n" | 212 "$inline$ $type$ $classname$::$name$() const {\n" |
218 " // @@protoc_insertion_point(field_get:$full_name$)\n" | 213 " // @@protoc_insertion_point(field_get:$full_name$)\n" |
219 " if (has_$name$()) {\n" | 214 " if (has_$name$()) {\n" |
220 " return $oneof_prefix$$name$_;\n" | 215 " return $oneof_prefix$$name$_;\n" |
221 " }\n" | 216 " }\n" |
222 " return $default$;\n" | 217 " return $default$;\n" |
223 "}\n" | 218 "}\n" |
224 "$inline$void $classname$::set_$name$($type$ value) {\n" | 219 "$inline$ void $classname$::set_$name$($type$ value) {\n" |
225 " if (!has_$name$()) {\n" | 220 " if (!has_$name$()) {\n" |
226 " clear_$oneof_name$();\n" | 221 " clear_$oneof_name$();\n" |
227 " set_has_$name$();\n" | 222 " set_has_$name$();\n" |
228 " }\n" | 223 " }\n" |
229 " $oneof_prefix$$name$_ = value;\n" | 224 " $oneof_prefix$$name$_ = value;\n" |
230 " // @@protoc_insertion_point(field_set:$full_name$)\n" | 225 " // @@protoc_insertion_point(field_set:$full_name$)\n" |
231 "}\n"); | 226 "}\n"); |
232 } | 227 } |
233 | 228 |
234 void PrimitiveOneofFieldGenerator:: | 229 void PrimitiveOneofFieldGenerator:: |
235 GenerateClearingCode(io::Printer* printer) const { | 230 GenerateClearingCode(io::Printer* printer) const { |
236 printer->Print(variables_, "$oneof_prefix$$name$_ = $default$;\n"); | 231 printer->Print(variables_, "$oneof_prefix$$name$_ = $default$;\n"); |
237 } | 232 } |
238 | 233 |
239 void PrimitiveOneofFieldGenerator:: | 234 void PrimitiveOneofFieldGenerator:: |
240 GenerateSwappingCode(io::Printer* printer) const { | 235 GenerateSwappingCode(io::Printer* printer) const { |
241 // Don't print any swapping code. Swapping the union will swap this field. | 236 // Don't print any swapping code. Swapping the union will swap this field. |
242 } | 237 } |
243 | 238 |
244 void PrimitiveOneofFieldGenerator:: | 239 void PrimitiveOneofFieldGenerator:: |
245 GenerateConstructorCode(io::Printer* printer) const { | 240 GenerateConstructorCode(io::Printer* printer) const { |
246 printer->Print( | 241 printer->Print( |
247 variables_, | 242 variables_, |
248 " $classname$_default_oneof_instance_.$name$_ = $default$;\n"); | 243 " $classname$_default_oneof_instance_->$name$_ = $default$;\n"); |
249 } | 244 } |
250 | 245 |
251 void PrimitiveOneofFieldGenerator:: | 246 void PrimitiveOneofFieldGenerator:: |
252 GenerateMergeFromCodedStream(io::Printer* printer) const { | 247 GenerateMergeFromCodedStream(io::Printer* printer) const { |
253 printer->Print(variables_, | 248 printer->Print(variables_, |
254 "clear_$oneof_name$();\n" | 249 "clear_$oneof_name$();\n" |
255 "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" | 250 "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" |
256 " $type$, $wire_format_field_type$>(\n" | 251 " $type$, $wire_format_field_type$>(\n" |
257 " input, &$oneof_prefix$$name$_)));\n" | 252 " input, &$oneof_prefix$$name$_)));\n" |
258 "set_has_$name$();\n"); | 253 "set_has_$name$();\n"); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 "$deprecated_attr$void add_$name$($type$ value);\n"); | 290 "$deprecated_attr$void add_$name$($type$ value);\n"); |
296 printer->Print(variables_, | 291 printer->Print(variables_, |
297 "$deprecated_attr$const ::google::protobuf::RepeatedField< $type$ >&\n" | 292 "$deprecated_attr$const ::google::protobuf::RepeatedField< $type$ >&\n" |
298 " $name$() const;\n" | 293 " $name$() const;\n" |
299 "$deprecated_attr$::google::protobuf::RepeatedField< $type$ >*\n" | 294 "$deprecated_attr$::google::protobuf::RepeatedField< $type$ >*\n" |
300 " mutable_$name$();\n"); | 295 " mutable_$name$();\n"); |
301 } | 296 } |
302 | 297 |
303 void RepeatedPrimitiveFieldGenerator:: | 298 void RepeatedPrimitiveFieldGenerator:: |
304 GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const { | 299 GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const { |
305 std::map<string, string> variables(variables_); | 300 map<string, string> variables(variables_); |
306 variables["inline"] = is_inline ? "inline " : ""; | 301 variables["inline"] = is_inline ? "inline" : ""; |
307 printer->Print(variables, | 302 printer->Print(variables, |
308 "$inline$$type$ $classname$::$name$(int index) const {\n" | 303 "$inline$ $type$ $classname$::$name$(int index) const {\n" |
309 " // @@protoc_insertion_point(field_get:$full_name$)\n" | 304 " // @@protoc_insertion_point(field_get:$full_name$)\n" |
310 " return $name$_.Get(index);\n" | 305 " return $name$_.Get(index);\n" |
311 "}\n" | 306 "}\n" |
312 "$inline$void $classname$::set_$name$(int index, $type$ value) {\n" | 307 "$inline$ void $classname$::set_$name$(int index, $type$ value) {\n" |
313 " $name$_.Set(index, value);\n" | 308 " $name$_.Set(index, value);\n" |
314 " // @@protoc_insertion_point(field_set:$full_name$)\n" | 309 " // @@protoc_insertion_point(field_set:$full_name$)\n" |
315 "}\n" | 310 "}\n" |
316 "$inline$void $classname$::add_$name$($type$ value) {\n" | 311 "$inline$ void $classname$::add_$name$($type$ value) {\n" |
317 " $name$_.Add(value);\n" | 312 " $name$_.Add(value);\n" |
318 " // @@protoc_insertion_point(field_add:$full_name$)\n" | 313 " // @@protoc_insertion_point(field_add:$full_name$)\n" |
319 "}\n"); | 314 "}\n"); |
320 printer->Print(variables, | 315 printer->Print(variables, |
321 "$inline$const ::google::protobuf::RepeatedField< $type$ >&\n" | 316 "$inline$ const ::google::protobuf::RepeatedField< $type$ >&\n" |
322 "$classname$::$name$() const {\n" | 317 "$classname$::$name$() const {\n" |
323 " // @@protoc_insertion_point(field_list:$full_name$)\n" | 318 " // @@protoc_insertion_point(field_list:$full_name$)\n" |
324 " return $name$_;\n" | 319 " return $name$_;\n" |
325 "}\n" | 320 "}\n" |
326 "$inline$::google::protobuf::RepeatedField< $type$ >*\n" | 321 "$inline$ ::google::protobuf::RepeatedField< $type$ >*\n" |
327 "$classname$::mutable_$name$() {\n" | 322 "$classname$::mutable_$name$() {\n" |
328 " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n" | 323 " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n" |
329 " return &$name$_;\n" | 324 " return &$name$_;\n" |
330 "}\n"); | 325 "}\n"); |
331 } | 326 } |
332 | 327 |
333 void RepeatedPrimitiveFieldGenerator:: | 328 void RepeatedPrimitiveFieldGenerator:: |
334 GenerateClearingCode(io::Printer* printer) const { | 329 GenerateClearingCode(io::Printer* printer) const { |
335 printer->Print(variables_, "$name$_.Clear();\n"); | 330 printer->Print(variables_, "$name$_.Clear();\n"); |
336 } | 331 } |
337 | 332 |
338 void RepeatedPrimitiveFieldGenerator:: | 333 void RepeatedPrimitiveFieldGenerator:: |
339 GenerateMergingCode(io::Printer* printer) const { | 334 GenerateMergingCode(io::Printer* printer) const { |
340 printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n"); | 335 printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n"); |
341 } | 336 } |
342 | 337 |
343 void RepeatedPrimitiveFieldGenerator:: | 338 void RepeatedPrimitiveFieldGenerator:: |
344 GenerateSwappingCode(io::Printer* printer) const { | 339 GenerateSwappingCode(io::Printer* printer) const { |
345 printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); | 340 printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); |
346 } | 341 } |
347 | 342 |
348 void RepeatedPrimitiveFieldGenerator:: | 343 void RepeatedPrimitiveFieldGenerator:: |
349 GenerateConstructorCode(io::Printer* printer) const { | 344 GenerateConstructorCode(io::Printer* printer) const { |
350 // Not needed for repeated fields. | 345 // Not needed for repeated fields. |
351 } | 346 } |
352 | 347 |
353 void RepeatedPrimitiveFieldGenerator:: | 348 void RepeatedPrimitiveFieldGenerator:: |
354 GenerateCopyConstructorCode(io::Printer* printer) const { | |
355 printer->Print(variables_, "$name$_.CopyFrom(from.$name$_);\n"); | |
356 } | |
357 | |
358 void RepeatedPrimitiveFieldGenerator:: | |
359 GenerateMergeFromCodedStream(io::Printer* printer) const { | 349 GenerateMergeFromCodedStream(io::Printer* printer) const { |
360 printer->Print(variables_, | 350 printer->Print(variables_, |
361 "DO_((::google::protobuf::internal::WireFormatLite::$repeated_reader$<\n" | 351 "DO_((::google::protobuf::internal::WireFormatLite::$repeated_reader$<\n" |
362 " $type$, $wire_format_field_type$>(\n" | 352 " $type$, $wire_format_field_type$>(\n" |
363 " $tag_size$, $tag$u, input, this->mutable_$name$())));\n"); | 353 " $tag_size$, $tag$, input, this->mutable_$name$())));\n"); |
364 } | 354 } |
365 | 355 |
366 void RepeatedPrimitiveFieldGenerator:: | 356 void RepeatedPrimitiveFieldGenerator:: |
367 GenerateMergeFromCodedStreamWithPacking(io::Printer* printer) const { | 357 GenerateMergeFromCodedStreamWithPacking(io::Printer* printer) const { |
368 printer->Print(variables_, | 358 printer->Print(variables_, |
369 "DO_((::google::protobuf::internal::WireFormatLite::$packed_reader$<\n" | 359 "DO_((::google::protobuf::internal::WireFormatLite::$packed_reader$<\n" |
370 " $type$, $wire_format_field_type$>(\n" | 360 " $type$, $wire_format_field_type$>(\n" |
371 " input, this->mutable_$name$())));\n"); | 361 " input, this->mutable_$name$())));\n"); |
372 } | 362 } |
373 | 363 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 " target = ::google::protobuf::internal::WireFormatLite::\n" | 413 " target = ::google::protobuf::internal::WireFormatLite::\n" |
424 " Write$declared_type$ToArray($number$, this->$name$(i), target);\n"); | 414 " Write$declared_type$ToArray($number$, this->$name$(i), target);\n"); |
425 } | 415 } |
426 printer->Print("}\n"); | 416 printer->Print("}\n"); |
427 } | 417 } |
428 | 418 |
429 void RepeatedPrimitiveFieldGenerator:: | 419 void RepeatedPrimitiveFieldGenerator:: |
430 GenerateByteSize(io::Printer* printer) const { | 420 GenerateByteSize(io::Printer* printer) const { |
431 printer->Print(variables_, | 421 printer->Print(variables_, |
432 "{\n" | 422 "{\n" |
433 " size_t data_size = 0;\n" | 423 " int data_size = 0;\n"); |
434 " unsigned int count = this->$name$_size();\n"); | |
435 printer->Indent(); | 424 printer->Indent(); |
436 int fixed_size = FixedSize(descriptor_->type()); | 425 int fixed_size = FixedSize(descriptor_->type()); |
437 if (fixed_size == -1) { | 426 if (fixed_size == -1) { |
438 printer->Print(variables_, | 427 printer->Print(variables_, |
439 "for (unsigned int i = 0; i < count; i++) {\n" | 428 "for (int i = 0; i < this->$name$_size(); i++) {\n" |
440 " data_size += ::google::protobuf::internal::WireFormatLite::\n" | 429 " data_size += ::google::protobuf::internal::WireFormatLite::\n" |
441 " $declared_type$Size(this->$name$(i));\n" | 430 " $declared_type$Size(this->$name$(i));\n" |
442 "}\n"); | 431 "}\n"); |
443 } else { | 432 } else { |
444 printer->Print(variables_, | 433 printer->Print(variables_, |
445 "data_size = $fixed_size$UL * count;\n"); | 434 "data_size = $fixed_size$ * this->$name$_size();\n"); |
446 } | 435 } |
447 | 436 |
448 if (descriptor_->is_packed()) { | 437 if (descriptor_->is_packed()) { |
449 printer->Print(variables_, | 438 printer->Print(variables_, |
450 "if (data_size > 0) {\n" | 439 "if (data_size > 0) {\n" |
451 " total_size += $tag_size$ +\n" | 440 " total_size += $tag_size$ +\n" |
452 " ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);\n
" | 441 " ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);\n
" |
453 "}\n" | 442 "}\n" |
454 "int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);\
n" | |
455 "GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();\n" | 443 "GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();\n" |
456 "_$name$_cached_byte_size_ = cached_size;\n" | 444 "_$name$_cached_byte_size_ = data_size;\n" |
457 "GOOGLE_SAFE_CONCURRENT_WRITES_END();\n" | 445 "GOOGLE_SAFE_CONCURRENT_WRITES_END();\n" |
458 "total_size += data_size;\n"); | 446 "total_size += data_size;\n"); |
459 } else { | 447 } else { |
460 printer->Print(variables_, | 448 printer->Print(variables_, |
461 "total_size += $tag_size$ *\n" | 449 "total_size += $tag_size$ * this->$name$_size() + data_size;\n"); |
462 " ::google::protobuf::internal::FromIntSize(this->$name$_size
());\n" | |
463 "total_size += data_size;\n"); | |
464 } | 450 } |
465 printer->Outdent(); | 451 printer->Outdent(); |
466 printer->Print("}\n"); | 452 printer->Print("}\n"); |
467 } | 453 } |
468 | 454 |
469 } // namespace cpp | 455 } // namespace cpp |
470 } // namespace compiler | 456 } // namespace compiler |
471 } // namespace protobuf | 457 } // namespace protobuf |
472 } // namespace google | 458 } // namespace google |
OLD | NEW |