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

Side by Side Diff: third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.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 17 matching lines...) Expand all
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 // Author: kenton@google.com (Kenton Varda) 31 // Author: kenton@google.com (Kenton Varda)
32 // Based on original Protocol Buffers design by 32 // Based on original Protocol Buffers design by
33 // Sanjay Ghemawat, Jeff Dean, and others. 33 // Sanjay Ghemawat, Jeff Dean, and others.
34 34
35 #include <google/protobuf/compiler/cpp/cpp_enum_field.h> 35 #include <google/protobuf/compiler/cpp/cpp_enum_field.h>
36 #include <google/protobuf/compiler/cpp/cpp_helpers.h> 36 #include <google/protobuf/compiler/cpp/cpp_helpers.h>
37 #include <google/protobuf/io/printer.h> 37 #include <google/protobuf/io/printer.h>
38 #include <google/protobuf/wire_format.h>
38 #include <google/protobuf/stubs/strutil.h> 39 #include <google/protobuf/stubs/strutil.h>
39 #include <google/protobuf/wire_format.h>
40 40
41 namespace google { 41 namespace google {
42 namespace protobuf { 42 namespace protobuf {
43 namespace compiler { 43 namespace compiler {
44 namespace cpp { 44 namespace cpp {
45 45
46 namespace { 46 namespace {
47 47
48 void SetEnumVariables(const FieldDescriptor* descriptor, 48 void SetEnumVariables(const FieldDescriptor* descriptor,
49 map<string, string>* variables, 49 std::map<string, string>* variables,
50 const Options& options) { 50 const Options& options) {
51 SetCommonFieldVariables(descriptor, variables, options); 51 SetCommonFieldVariables(descriptor, variables, options);
52 const EnumValueDescriptor* default_value = descriptor->default_value_enum(); 52 const EnumValueDescriptor* default_value = descriptor->default_value_enum();
53 (*variables)["type"] = ClassName(descriptor->enum_type(), true); 53 (*variables)["type"] = ClassName(descriptor->enum_type(), true);
54 (*variables)["default"] = Int32ToString(default_value->number()); 54 (*variables)["default"] = Int32ToString(default_value->number());
55 (*variables)["full_name"] = descriptor->full_name(); 55 (*variables)["full_name"] = descriptor->full_name();
56 } 56 }
57 57
58 } // namespace 58 } // namespace
59 59
(...skipping 15 matching lines...) Expand all
75 void EnumFieldGenerator:: 75 void EnumFieldGenerator::
76 GenerateAccessorDeclarations(io::Printer* printer) const { 76 GenerateAccessorDeclarations(io::Printer* printer) const {
77 printer->Print(variables_, 77 printer->Print(variables_,
78 "$deprecated_attr$$type$ $name$() const;\n" 78 "$deprecated_attr$$type$ $name$() const;\n"
79 "$deprecated_attr$void set_$name$($type$ value);\n"); 79 "$deprecated_attr$void set_$name$($type$ value);\n");
80 } 80 }
81 81
82 void EnumFieldGenerator:: 82 void EnumFieldGenerator::
83 GenerateInlineAccessorDefinitions(io::Printer* printer, 83 GenerateInlineAccessorDefinitions(io::Printer* printer,
84 bool is_inline) const { 84 bool is_inline) const {
85 map<string, string> variables(variables_); 85 std::map<string, string> variables(variables_);
86 variables["inline"] = is_inline ? "inline" : ""; 86 variables["inline"] = is_inline ? "inline " : "";
87 printer->Print(variables, 87 printer->Print(variables,
88 "$inline$ $type$ $classname$::$name$() const {\n" 88 "$inline$$type$ $classname$::$name$() const {\n"
89 " // @@protoc_insertion_point(field_get:$full_name$)\n" 89 " // @@protoc_insertion_point(field_get:$full_name$)\n"
90 " return static_cast< $type$ >($name$_);\n" 90 " return static_cast< $type$ >($name$_);\n"
91 "}\n" 91 "}\n"
92 "$inline$ void $classname$::set_$name$($type$ value) {\n"); 92 "$inline$void $classname$::set_$name$($type$ value) {\n");
93 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) { 93 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) {
94 printer->Print(variables, 94 printer->Print(variables,
95 " assert($type$_IsValid(value));\n"); 95 " assert($type$_IsValid(value));\n");
96 } 96 }
97 printer->Print(variables, 97 printer->Print(variables,
98 " $set_hasbit$\n" 98 " $set_hasbit$\n"
99 " $name$_ = value;\n" 99 " $name$_ = value;\n"
100 " // @@protoc_insertion_point(field_set:$full_name$)\n" 100 " // @@protoc_insertion_point(field_set:$full_name$)\n"
101 "}\n"); 101 "}\n");
102 } 102 }
(...skipping 12 matching lines...) Expand all
115 GenerateSwappingCode(io::Printer* printer) const { 115 GenerateSwappingCode(io::Printer* printer) const {
116 printer->Print(variables_, "std::swap($name$_, other->$name$_);\n"); 116 printer->Print(variables_, "std::swap($name$_, other->$name$_);\n");
117 } 117 }
118 118
119 void EnumFieldGenerator:: 119 void EnumFieldGenerator::
120 GenerateConstructorCode(io::Printer* printer) const { 120 GenerateConstructorCode(io::Printer* printer) const {
121 printer->Print(variables_, "$name$_ = $default$;\n"); 121 printer->Print(variables_, "$name$_ = $default$;\n");
122 } 122 }
123 123
124 void EnumFieldGenerator:: 124 void EnumFieldGenerator::
125 GenerateCopyConstructorCode(io::Printer* printer) const {
126 printer->Print(variables_, "$name$_ = from.$name$_;\n");
127 }
128
129 void EnumFieldGenerator::
125 GenerateMergeFromCodedStream(io::Printer* printer) const { 130 GenerateMergeFromCodedStream(io::Printer* printer) const {
126 printer->Print(variables_, 131 printer->Print(variables_,
127 "int value;\n" 132 "int value;\n"
128 "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" 133 "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n"
129 " int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(\n" 134 " int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(\n"
130 " input, &value)));\n"); 135 " input, &value)));\n");
131 if (HasPreservingUnknownEnumSemantics(descriptor_->file())) { 136 if (HasPreservingUnknownEnumSemantics(descriptor_->file())) {
132 printer->Print(variables_, 137 printer->Print(variables_,
133 "set_$name$(static_cast< $type$ >(value));\n"); 138 "set_$name$(static_cast< $type$ >(value));\n");
134 } else { 139 } else {
135 printer->Print(variables_, 140 printer->Print(variables_,
136 "if ($type$_IsValid(value)) {\n" 141 "if ($type$_IsValid(value)) {\n"
137 " set_$name$(static_cast< $type$ >(value));\n"); 142 " set_$name$(static_cast< $type$ >(value));\n");
138 if (UseUnknownFieldSet(descriptor_->file(), options_)) { 143 if (UseUnknownFieldSet(descriptor_->file(), options_)) {
139 printer->Print(variables_, 144 printer->Print(variables_,
140 "} else {\n" 145 "} else {\n"
141 " mutable_unknown_fields()->AddVarint($number$, value);\n"); 146 " mutable_unknown_fields()->AddVarint($number$, value);\n");
142 } else { 147 } else {
143 printer->Print( 148 printer->Print(
144 "} else {\n" 149 "} else {\n"
145 " unknown_fields_stream.WriteVarint32($tag$);\n" 150 " unknown_fields_stream.WriteVarint32($tag$u);\n"
146 " unknown_fields_stream.WriteVarint32(value);\n", 151 " unknown_fields_stream.WriteVarint32(value);\n",
147 "tag", SimpleItoa(internal::WireFormat::MakeTag(descriptor_))); 152 "tag", SimpleItoa(internal::WireFormat::MakeTag(descriptor_)));
148 } 153 }
149 printer->Print(variables_, 154 printer->Print(variables_,
150 "}\n"); 155 "}\n");
151 } 156 }
152 } 157 }
153 158
154 void EnumFieldGenerator:: 159 void EnumFieldGenerator::
155 GenerateSerializeWithCachedSizes(io::Printer* printer) const { 160 GenerateSerializeWithCachedSizes(io::Printer* printer) const {
(...skipping 23 matching lines...) Expand all
179 const Options& options) 184 const Options& options)
180 : EnumFieldGenerator(descriptor, options) { 185 : EnumFieldGenerator(descriptor, options) {
181 SetCommonOneofFieldVariables(descriptor, &variables_); 186 SetCommonOneofFieldVariables(descriptor, &variables_);
182 } 187 }
183 188
184 EnumOneofFieldGenerator::~EnumOneofFieldGenerator() {} 189 EnumOneofFieldGenerator::~EnumOneofFieldGenerator() {}
185 190
186 void EnumOneofFieldGenerator:: 191 void EnumOneofFieldGenerator::
187 GenerateInlineAccessorDefinitions(io::Printer* printer, 192 GenerateInlineAccessorDefinitions(io::Printer* printer,
188 bool is_inline) const { 193 bool is_inline) const {
189 map<string, string> variables(variables_); 194 std::map<string, string> variables(variables_);
190 variables["inline"] = is_inline ? "inline" : ""; 195 variables["inline"] = is_inline ? "inline " : "";
191 printer->Print(variables, 196 printer->Print(variables,
192 "$inline$ $type$ $classname$::$name$() const {\n" 197 "$inline$$type$ $classname$::$name$() const {\n"
193 " // @@protoc_insertion_point(field_get:$full_name$)\n" 198 " // @@protoc_insertion_point(field_get:$full_name$)\n"
194 " if (has_$name$()) {\n" 199 " if (has_$name$()) {\n"
195 " return static_cast< $type$ >($oneof_prefix$$name$_);\n" 200 " return static_cast< $type$ >($oneof_prefix$$name$_);\n"
196 " }\n" 201 " }\n"
197 " return static_cast< $type$ >($default$);\n" 202 " return static_cast< $type$ >($default$);\n"
198 "}\n" 203 "}\n"
199 "$inline$ void $classname$::set_$name$($type$ value) {\n"); 204 "$inline$void $classname$::set_$name$($type$ value) {\n");
200 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) { 205 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) {
201 printer->Print(variables, 206 printer->Print(variables,
202 " assert($type$_IsValid(value));\n"); 207 " assert($type$_IsValid(value));\n");
203 } 208 }
204 printer->Print(variables, 209 printer->Print(variables,
205 " if (!has_$name$()) {\n" 210 " if (!has_$name$()) {\n"
206 " clear_$oneof_name$();\n" 211 " clear_$oneof_name$();\n"
207 " set_has_$name$();\n" 212 " set_has_$name$();\n"
208 " }\n" 213 " }\n"
209 " $oneof_prefix$$name$_ = value;\n" 214 " $oneof_prefix$$name$_ = value;\n"
210 " // @@protoc_insertion_point(field_set:$full_name$)\n" 215 " // @@protoc_insertion_point(field_set:$full_name$)\n"
211 "}\n"); 216 "}\n");
212 } 217 }
213 218
214 void EnumOneofFieldGenerator:: 219 void EnumOneofFieldGenerator::
215 GenerateClearingCode(io::Printer* printer) const { 220 GenerateClearingCode(io::Printer* printer) const {
216 printer->Print(variables_, "$oneof_prefix$$name$_ = $default$;\n"); 221 printer->Print(variables_, "$oneof_prefix$$name$_ = $default$;\n");
217 } 222 }
218 223
219 void EnumOneofFieldGenerator:: 224 void EnumOneofFieldGenerator::
220 GenerateSwappingCode(io::Printer* printer) const { 225 GenerateSwappingCode(io::Printer* printer) const {
221 // Don't print any swapping code. Swapping the union will swap this field. 226 // Don't print any swapping code. Swapping the union will swap this field.
222 } 227 }
223 228
224 void EnumOneofFieldGenerator:: 229 void EnumOneofFieldGenerator::
225 GenerateConstructorCode(io::Printer* printer) const { 230 GenerateConstructorCode(io::Printer* printer) const {
226 printer->Print(variables_, 231 printer->Print(
227 " $classname$_default_oneof_instance_->$name$_ = $default$;\n"); 232 variables_,
233 " $classname$_default_oneof_instance_.$name$_ = $default$;\n");
228 } 234 }
229 235
230 // =================================================================== 236 // ===================================================================
231 237
232 RepeatedEnumFieldGenerator::RepeatedEnumFieldGenerator( 238 RepeatedEnumFieldGenerator::RepeatedEnumFieldGenerator(
233 const FieldDescriptor* descriptor, const Options& options) 239 const FieldDescriptor* descriptor, const Options& options)
234 : FieldGenerator(options), descriptor_(descriptor) { 240 : FieldGenerator(options), descriptor_(descriptor) {
235 SetEnumVariables(descriptor, &variables_, options); 241 SetEnumVariables(descriptor, &variables_, options);
236 } 242 }
237 243
(...skipping 17 matching lines...) Expand all
255 "$deprecated_attr$void set_$name$(int index, $type$ value);\n" 261 "$deprecated_attr$void set_$name$(int index, $type$ value);\n"
256 "$deprecated_attr$void add_$name$($type$ value);\n"); 262 "$deprecated_attr$void add_$name$($type$ value);\n");
257 printer->Print(variables_, 263 printer->Print(variables_,
258 "$deprecated_attr$const ::google::protobuf::RepeatedField<int>& $name$() con st;\n" 264 "$deprecated_attr$const ::google::protobuf::RepeatedField<int>& $name$() con st;\n"
259 "$deprecated_attr$::google::protobuf::RepeatedField<int>* mutable_$name$();\ n"); 265 "$deprecated_attr$::google::protobuf::RepeatedField<int>* mutable_$name$();\ n");
260 } 266 }
261 267
262 void RepeatedEnumFieldGenerator:: 268 void RepeatedEnumFieldGenerator::
263 GenerateInlineAccessorDefinitions(io::Printer* printer, 269 GenerateInlineAccessorDefinitions(io::Printer* printer,
264 bool is_inline) const { 270 bool is_inline) const {
265 map<string, string> variables(variables_); 271 std::map<string, string> variables(variables_);
266 variables["inline"] = is_inline ? "inline" : ""; 272 variables["inline"] = is_inline ? "inline " : "";
267 printer->Print(variables, 273 printer->Print(variables,
268 "$inline$ $type$ $classname$::$name$(int index) const {\n" 274 "$inline$$type$ $classname$::$name$(int index) const {\n"
269 " // @@protoc_insertion_point(field_get:$full_name$)\n" 275 " // @@protoc_insertion_point(field_get:$full_name$)\n"
270 " return static_cast< $type$ >($name$_.Get(index));\n" 276 " return static_cast< $type$ >($name$_.Get(index));\n"
271 "}\n" 277 "}\n"
272 "$inline$ void $classname$::set_$name$(int index, $type$ value) {\n"); 278 "$inline$void $classname$::set_$name$(int index, $type$ value) {\n");
273 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) { 279 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) {
274 printer->Print(variables, 280 printer->Print(variables,
275 " assert($type$_IsValid(value));\n"); 281 " assert($type$_IsValid(value));\n");
276 } 282 }
277 printer->Print(variables, 283 printer->Print(variables,
278 " $name$_.Set(index, value);\n" 284 " $name$_.Set(index, value);\n"
279 " // @@protoc_insertion_point(field_set:$full_name$)\n" 285 " // @@protoc_insertion_point(field_set:$full_name$)\n"
280 "}\n" 286 "}\n"
281 "$inline$ void $classname$::add_$name$($type$ value) {\n"); 287 "$inline$void $classname$::add_$name$($type$ value) {\n");
282 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) { 288 if (!HasPreservingUnknownEnumSemantics(descriptor_->file())) {
283 printer->Print(variables, 289 printer->Print(variables,
284 " assert($type$_IsValid(value));\n"); 290 " assert($type$_IsValid(value));\n");
285 } 291 }
286 printer->Print(variables, 292 printer->Print(variables,
287 " $name$_.Add(value);\n" 293 " $name$_.Add(value);\n"
288 " // @@protoc_insertion_point(field_add:$full_name$)\n" 294 " // @@protoc_insertion_point(field_add:$full_name$)\n"
289 "}\n"); 295 "}\n");
290 printer->Print(variables, 296 printer->Print(variables,
291 "$inline$ const ::google::protobuf::RepeatedField<int>&\n" 297 "$inline$const ::google::protobuf::RepeatedField<int>&\n"
292 "$classname$::$name$() const {\n" 298 "$classname$::$name$() const {\n"
293 " // @@protoc_insertion_point(field_list:$full_name$)\n" 299 " // @@protoc_insertion_point(field_list:$full_name$)\n"
294 " return $name$_;\n" 300 " return $name$_;\n"
295 "}\n" 301 "}\n"
296 "$inline$ ::google::protobuf::RepeatedField<int>*\n" 302 "$inline$::google::protobuf::RepeatedField<int>*\n"
297 "$classname$::mutable_$name$() {\n" 303 "$classname$::mutable_$name$() {\n"
298 " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n" 304 " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n"
299 " return &$name$_;\n" 305 " return &$name$_;\n"
300 "}\n"); 306 "}\n");
301 } 307 }
302 308
303 void RepeatedEnumFieldGenerator:: 309 void RepeatedEnumFieldGenerator::
304 GenerateClearingCode(io::Printer* printer) const { 310 GenerateClearingCode(io::Printer* printer) const {
305 printer->Print(variables_, "$name$_.Clear();\n"); 311 printer->Print(variables_, "$name$_.Clear();\n");
306 } 312 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 " target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray (\n" 474 " target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray (\n"
469 " $number$, this->$name$(i), target);\n"); 475 " $number$, this->$name$(i), target);\n");
470 } 476 }
471 printer->Print("}\n"); 477 printer->Print("}\n");
472 } 478 }
473 479
474 void RepeatedEnumFieldGenerator:: 480 void RepeatedEnumFieldGenerator::
475 GenerateByteSize(io::Printer* printer) const { 481 GenerateByteSize(io::Printer* printer) const {
476 printer->Print(variables_, 482 printer->Print(variables_,
477 "{\n" 483 "{\n"
478 " int data_size = 0;\n"); 484 " size_t data_size = 0;\n"
485 " unsigned int count = this->$name$_size();");
479 printer->Indent(); 486 printer->Indent();
480 printer->Print(variables_, 487 printer->Print(variables_,
481 "for (int i = 0; i < this->$name$_size(); i++) {\n" 488 "for (unsigned int i = 0; i < count; i++) {\n"
482 " data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(\n" 489 " data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(\n"
483 " this->$name$(i));\n" 490 " this->$name$(i));\n"
484 "}\n"); 491 "}\n");
485 492
486 if (descriptor_->is_packed()) { 493 if (descriptor_->is_packed()) {
487 printer->Print(variables_, 494 printer->Print(variables_,
488 "if (data_size > 0) {\n" 495 "if (data_size > 0) {\n"
489 " total_size += $tag_size$ +\n" 496 " total_size += $tag_size$ +\n"
490 " ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);\n " 497 " ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);\n "
491 "}\n" 498 "}\n"
499 "int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);\ n"
492 "GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();\n" 500 "GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();\n"
493 "_$name$_cached_byte_size_ = data_size;\n" 501 "_$name$_cached_byte_size_ = cached_size;\n"
494 "GOOGLE_SAFE_CONCURRENT_WRITES_END();\n" 502 "GOOGLE_SAFE_CONCURRENT_WRITES_END();\n"
495 "total_size += data_size;\n"); 503 "total_size += data_size;\n");
496 } else { 504 } else {
497 printer->Print(variables_, 505 printer->Print(variables_,
498 "total_size += $tag_size$ * this->$name$_size() + data_size;\n"); 506 "total_size += ($tag_size$UL * count) + data_size;\n");
499 } 507 }
500 printer->Outdent(); 508 printer->Outdent();
501 printer->Print("}\n"); 509 printer->Print("}\n");
502 } 510 }
503 511
504 } // namespace cpp 512 } // namespace cpp
505 } // namespace compiler 513 } // namespace compiler
506 } // namespace protobuf 514 } // namespace protobuf
507 } // namespace google 515 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698