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

Side by Side Diff: third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_string_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 28 matching lines...) Expand all
39 #include <google/protobuf/stubs/strutil.h> 39 #include <google/protobuf/stubs/strutil.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 SetStringVariables(const FieldDescriptor* descriptor, 48 void SetStringVariables(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 (*variables)["default"] = DefaultValue(descriptor); 52 (*variables)["default"] = DefaultValue(descriptor);
53 (*variables)["default_length"] = 53 (*variables)["default_length"] =
54 SimpleItoa(descriptor->default_value_string().length()); 54 SimpleItoa(descriptor->default_value_string().length());
55 string default_variable_string = 55 string default_variable_string = "_default_" + FieldName(descriptor) + "_";
56 (*variables)["default_variable_name"] = default_variable_string;
57 (*variables)["default_variable"] =
56 descriptor->default_value_string().empty() 58 descriptor->default_value_string().empty()
57 ? "&::google::protobuf::internal::GetEmptyStringAlreadyInited()" 59 ? "&::google::protobuf::internal::GetEmptyStringAlreadyInited()"
58 : "_default_" + FieldName(descriptor) + "_"; 60 : "&" + (*variables)["classname"] + "::" + default_variable_string +
59 (*variables)["default_variable"] = default_variable_string; 61 ".get()";
60 (*variables)["default_value_init"] =
61 descriptor->default_value_string().empty()
62 ? "" : "*" + default_variable_string;
63 (*variables)["pointer_type"] = 62 (*variables)["pointer_type"] =
64 descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char"; 63 descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char";
65 // NOTE: Escaped here to unblock proto1->proto2 migration. 64 // NOTE: Escaped here to unblock proto1->proto2 migration.
66 // TODO(liujisi): Extend this to apply for other conflicting methods. 65 // TODO(liujisi): Extend this to apply for other conflicting methods.
67 (*variables)["release_name"] = 66 (*variables)["release_name"] =
68 SafeFunctionName(descriptor->containing_type(), 67 SafeFunctionName(descriptor->containing_type(),
69 descriptor, "release_"); 68 descriptor, "release_");
70 (*variables)["full_name"] = descriptor->full_name(); 69 (*variables)["full_name"] = descriptor->full_name();
71 70
72 (*variables)["string_piece"] = "::std::string"; 71 (*variables)["string_piece"] = "::std::string";
(...skipping 24 matching lines...) Expand all
97 // and littering the runtime code paths with conditionals. It's simpler to 96 // and littering the runtime code paths with conditionals. It's simpler to
98 // stick with this but use lightweight accessors that assume arena == NULL. 97 // stick with this but use lightweight accessors that assume arena == NULL.
99 // There should be very little overhead anyway because it's just a tagged 98 // There should be very little overhead anyway because it's just a tagged
100 // pointer in-memory. 99 // pointer in-memory.
101 printer->Print(variables_, "::google::protobuf::internal::ArenaStringPtr $name $_;\n"); 100 printer->Print(variables_, "::google::protobuf::internal::ArenaStringPtr $name $_;\n");
102 } 101 }
103 102
104 void StringFieldGenerator:: 103 void StringFieldGenerator::
105 GenerateStaticMembers(io::Printer* printer) const { 104 GenerateStaticMembers(io::Printer* printer) const {
106 if (!descriptor_->default_value_string().empty()) { 105 if (!descriptor_->default_value_string().empty()) {
107 printer->Print(variables_, "static ::std::string* $default_variable$;\n"); 106 printer->Print(variables_,
107 "static ::google::protobuf::internal::ExplicitlyConstructed< ::std::string>"
108 " $default_variable_name$;\n");
108 } 109 }
109 } 110 }
110 111
111 void StringFieldGenerator:: 112 void StringFieldGenerator::
112 GenerateAccessorDeclarations(io::Printer* printer) const { 113 GenerateAccessorDeclarations(io::Printer* printer) const {
113 // If we're using StringFieldGenerator for a field with a ctype, it's 114 // If we're using StringFieldGenerator for a field with a ctype, it's
114 // because that ctype isn't actually implemented. In particular, this is 115 // because that ctype isn't actually implemented. In particular, this is
115 // true of ctype=CORD and ctype=STRING_PIECE in the open source release. 116 // true of ctype=CORD and ctype=STRING_PIECE in the open source release.
116 // We aren't releasing Cord because it has too many Google-specific 117 // We aren't releasing Cord because it has too many Google-specific
117 // dependencies and we aren't releasing StringPiece because it's hardly 118 // dependencies and we aren't releasing StringPiece because it's hardly
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 if (unknown_ctype) { 159 if (unknown_ctype) {
159 printer->Outdent(); 160 printer->Outdent();
160 printer->Print(" public:\n"); 161 printer->Print(" public:\n");
161 printer->Indent(); 162 printer->Indent();
162 } 163 }
163 } 164 }
164 165
165 void StringFieldGenerator:: 166 void StringFieldGenerator::
166 GenerateInlineAccessorDefinitions(io::Printer* printer, 167 GenerateInlineAccessorDefinitions(io::Printer* printer,
167 bool is_inline) const { 168 bool is_inline) const {
168 map<string, string> variables(variables_); 169 std::map<string, string> variables(variables_);
169 variables["inline"] = is_inline ? "inline" : ""; 170 variables["inline"] = is_inline ? "inline " : "";
170 if (SupportsArenas(descriptor_)) { 171 if (SupportsArenas(descriptor_)) {
171 printer->Print(variables, 172 printer->Print(
172 "$inline$ const ::std::string& $classname$::$name$() const {\n" 173 variables,
173 " // @@protoc_insertion_point(field_get:$full_name$)\n" 174 "$inline$const ::std::string& $classname$::$name$() const {\n"
174 " return $name$_.Get($default_variable$);\n" 175 " // @@protoc_insertion_point(field_get:$full_name$)\n"
175 "}\n" 176 " return $name$_.Get();\n"
176 "$inline$ void $classname$::set_$name$(const ::std::string& value) {\n" 177 "}\n"
177 " $set_hasbit$\n" 178 "$inline$void $classname$::set_$name$(const ::std::string& value) {\n"
178 " $name$_.Set($default_variable$, value, GetArenaNoVirtual());\n" 179 " $set_hasbit$\n"
179 " // @@protoc_insertion_point(field_set:$full_name$)\n" 180 " $name$_.Set($default_variable$, value, GetArenaNoVirtual());\n"
180 "}\n" 181 " // @@protoc_insertion_point(field_set:$full_name$)\n"
181 "$inline$ void $classname$::set_$name$(const char* value) {\n" 182 "}\n"
182 " $set_hasbit$\n" 183 "$inline$void $classname$::set_$name$(const char* value) {\n"
183 " $name$_.Set($default_variable$, $string_piece$(value),\n" 184 " $set_hasbit$\n"
184 " GetArenaNoVirtual());\n" 185 " $name$_.Set($default_variable$, $string_piece$(value),\n"
185 " // @@protoc_insertion_point(field_set_char:$full_name$)\n" 186 " GetArenaNoVirtual());\n"
186 "}\n" 187 " // @@protoc_insertion_point(field_set_char:$full_name$)\n"
187 "$inline$ " 188 "}\n"
188 "void $classname$::set_$name$(const $pointer_type$* value,\n" 189 "$inline$"
189 " size_t size) {\n" 190 "void $classname$::set_$name$(const $pointer_type$* value,\n"
190 " $set_hasbit$\n" 191 " size_t size) {\n"
191 " $name$_.Set($default_variable$, $string_piece$(\n" 192 " $set_hasbit$\n"
192 " reinterpret_cast<const char*>(value), size), GetArenaNoVirtual());\ n" 193 " $name$_.Set($default_variable$, $string_piece$(\n"
193 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n" 194 " reinterpret_cast<const char*>(value), size), "
194 "}\n" 195 "GetArenaNoVirtual());\n"
195 "$inline$ ::std::string* $classname$::mutable_$name$() {\n" 196 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
196 " $set_hasbit$\n" 197 "}\n"
197 " // @@protoc_insertion_point(field_mutable:$full_name$)\n" 198 "$inline$::std::string* $classname$::mutable_$name$() {\n"
198 " return $name$_.Mutable($default_variable$, GetArenaNoVirtual());\n" 199 " $set_hasbit$\n"
199 "}\n" 200 " // @@protoc_insertion_point(field_mutable:$full_name$)\n"
200 "$inline$ ::std::string* $classname$::$release_name$() {\n" 201 " return $name$_.Mutable($default_variable$, GetArenaNoVirtual());\n"
201 " // @@protoc_insertion_point(field_release:$full_name$)\n" 202 "}\n"
202 " $clear_hasbit$\n" 203 "$inline$::std::string* $classname$::$release_name$() {\n"
203 " return $name$_.Release($default_variable$, GetArenaNoVirtual());\n" 204 " // @@protoc_insertion_point(field_release:$full_name$)\n"
204 "}\n" 205 " $clear_hasbit$\n"
205 "$inline$ ::std::string* $classname$::unsafe_arena_release_$name$() {\n" 206 " return $name$_.Release($default_variable$, GetArenaNoVirtual());\n"
206 " // @@protoc_insertion_point(field_unsafe_arena_release:$full_name$)\n" 207 "}\n"
207 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n" 208 "$inline$::std::string* $classname$::unsafe_arena_release_$name$() {\n"
208 " $clear_hasbit$\n" 209 " // "
209 " return $name$_.UnsafeArenaRelease($default_variable$,\n" 210 "@@protoc_insertion_point(field_unsafe_arena_release:$full_name$)\n"
210 " GetArenaNoVirtual());\n" 211 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n"
211 "}\n" 212 " $clear_hasbit$\n"
212 "$inline$ void $classname$::set_allocated_$name$(::std::string* $name$) {\ n" 213 " return $name$_.UnsafeArenaRelease($default_variable$,\n"
213 " if ($name$ != NULL) {\n" 214 " GetArenaNoVirtual());\n"
214 " $set_hasbit$\n" 215 "}\n"
215 " } else {\n" 216 "$inline$void $classname$::set_allocated_$name$(::std::string* $name$) { \n"
216 " $clear_hasbit$\n" 217 " if ($name$ != NULL) {\n"
217 " }\n" 218 " $set_hasbit$\n"
218 " $name$_.SetAllocated($default_variable$, $name$,\n" 219 " } else {\n"
219 " GetArenaNoVirtual());\n" 220 " $clear_hasbit$\n"
220 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n" 221 " }\n"
221 "}\n" 222 " $name$_.SetAllocated($default_variable$, $name$,\n"
222 "$inline$ void $classname$::unsafe_arena_set_allocated_$name$(\n" 223 " GetArenaNoVirtual());\n"
223 " ::std::string* $name$) {\n" 224 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n"
224 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n" 225 "}\n"
225 " if ($name$ != NULL) {\n" 226 "$inline$void $classname$::unsafe_arena_set_allocated_$name$(\n"
226 " $set_hasbit$\n" 227 " ::std::string* $name$) {\n"
227 " } else {\n" 228 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n"
228 " $clear_hasbit$\n" 229 " if ($name$ != NULL) {\n"
229 " }\n" 230 " $set_hasbit$\n"
230 " $name$_.UnsafeArenaSetAllocated($default_variable$,\n" 231 " } else {\n"
231 " $name$, GetArenaNoVirtual());\n" 232 " $clear_hasbit$\n"
232 " // @@protoc_insertion_point(field_unsafe_arena_set_allocated:" 233 " }\n"
233 "$full_name$)\n" 234 " $name$_.UnsafeArenaSetAllocated($default_variable$,\n"
234 "}\n"); 235 " $name$, GetArenaNoVirtual());\n"
236 " // @@protoc_insertion_point(field_unsafe_arena_set_allocated:"
237 "$full_name$)\n"
238 "}\n");
235 } else { 239 } else {
236 // No-arena case. 240 // No-arena case.
237 printer->Print(variables, 241 printer->Print(
238 "$inline$ const ::std::string& $classname$::$name$() const {\n" 242 variables,
239 " // @@protoc_insertion_point(field_get:$full_name$)\n" 243 "$inline$const ::std::string& $classname$::$name$() const {\n"
240 " return $name$_.GetNoArena($default_variable$);\n" 244 " // @@protoc_insertion_point(field_get:$full_name$)\n"
241 "}\n" 245 " return $name$_.GetNoArena();\n"
242 "$inline$ void $classname$::set_$name$(const ::std::string& value) {\n" 246 "}\n"
243 " $set_hasbit$\n" 247 "$inline$void $classname$::set_$name$(const ::std::string& value) {\n"
244 " $name$_.SetNoArena($default_variable$, value);\n" 248 " $set_hasbit$\n"
245 " // @@protoc_insertion_point(field_set:$full_name$)\n" 249 " $name$_.SetNoArena($default_variable$, value);\n"
246 "}\n" 250 " // @@protoc_insertion_point(field_set:$full_name$)\n"
247 "$inline$ void $classname$::set_$name$(const char* value) {\n" 251 "}\n"
248 " $set_hasbit$\n" 252 "$inline$void $classname$::set_$name$(const char* value) {\n"
249 " $name$_.SetNoArena($default_variable$, $string_piece$(value));\n" 253 " $set_hasbit$\n"
250 " // @@protoc_insertion_point(field_set_char:$full_name$)\n" 254 " $name$_.SetNoArena($default_variable$, $string_piece$(value));\n"
251 "}\n" 255 " // @@protoc_insertion_point(field_set_char:$full_name$)\n"
252 "$inline$ " 256 "}\n"
253 "void $classname$::set_$name$(const $pointer_type$* value, " 257 "$inline$"
254 "size_t size) {\n" 258 "void $classname$::set_$name$(const $pointer_type$* value, "
255 " $set_hasbit$\n" 259 "size_t size) {\n"
256 " $name$_.SetNoArena($default_variable$,\n" 260 " $set_hasbit$\n"
257 " $string_piece$(reinterpret_cast<const char*>(value), size));\n" 261 " $name$_.SetNoArena($default_variable$,\n"
258 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n" 262 " $string_piece$(reinterpret_cast<const char*>(value), size));\n"
259 "}\n" 263 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
260 "$inline$ ::std::string* $classname$::mutable_$name$() {\n" 264 "}\n"
261 " $set_hasbit$\n" 265 "$inline$::std::string* $classname$::mutable_$name$() {\n"
262 " // @@protoc_insertion_point(field_mutable:$full_name$)\n" 266 " $set_hasbit$\n"
263 " return $name$_.MutableNoArena($default_variable$);\n" 267 " // @@protoc_insertion_point(field_mutable:$full_name$)\n"
264 "}\n" 268 " return $name$_.MutableNoArena($default_variable$);\n"
265 "$inline$ ::std::string* $classname$::$release_name$() {\n" 269 "}\n"
266 " // @@protoc_insertion_point(field_release:$full_name$)\n" 270 "$inline$::std::string* $classname$::$release_name$() {\n"
267 " $clear_hasbit$\n" 271 " // @@protoc_insertion_point(field_release:$full_name$)\n"
268 " return $name$_.ReleaseNoArena($default_variable$);\n" 272 " $clear_hasbit$\n"
269 "}\n" 273 " return $name$_.ReleaseNoArena($default_variable$);\n"
270 "$inline$ void $classname$::set_allocated_$name$(::std::string* $name$) {\ n" 274 "}\n"
271 " if ($name$ != NULL) {\n" 275 "$inline$void $classname$::set_allocated_$name$(::std::string* $name$) { \n"
272 " $set_hasbit$\n" 276 " if ($name$ != NULL) {\n"
273 " } else {\n" 277 " $set_hasbit$\n"
274 " $clear_hasbit$\n" 278 " } else {\n"
275 " }\n" 279 " $clear_hasbit$\n"
276 " $name$_.SetAllocatedNoArena($default_variable$, $name$);\n" 280 " }\n"
277 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n" 281 " $name$_.SetAllocatedNoArena($default_variable$, $name$);\n"
278 "}\n"); 282 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n"
283 "}\n");
279 } 284 }
280 } 285 }
281 286
282 void StringFieldGenerator:: 287 void StringFieldGenerator::
283 GenerateNonInlineAccessorDefinitions(io::Printer* printer) const { 288 GenerateNonInlineAccessorDefinitions(io::Printer* printer) const {
284 if (!descriptor_->default_value_string().empty()) { 289 if (!descriptor_->default_value_string().empty()) {
285 // Initialized in GenerateDefaultInstanceAllocator. 290 // Initialized in GenerateDefaultInstanceAllocator.
286 printer->Print(variables_, 291 printer->Print(variables_,
287 "::std::string* $classname$::$default_variable$ = NULL;\n"); 292 "::google::protobuf::internal::ExplicitlyConstructed< ::std:: string> "
293 "$classname$::$default_variable_name$;\n");
288 } 294 }
289 } 295 }
290 296
291 void StringFieldGenerator:: 297 void StringFieldGenerator::
292 GenerateClearingCode(io::Printer* printer) const { 298 GenerateClearingCode(io::Printer* printer) const {
293 // Two-dimension specialization here: supporting arenas or not, and default 299 // Two-dimension specialization here: supporting arenas or not, and default
294 // value is the empty string or not. Complexity here ensures the minimal 300 // value is the empty string or not. Complexity here ensures the minimal
295 // number of branches / amount of extraneous code at runtime (given that the 301 // number of branches / amount of extraneous code at runtime (given that the
296 // below methods are inlined one-liners)! 302 // below methods are inlined one-liners)!
297 if (SupportsArenas(descriptor_)) { 303 if (SupportsArenas(descriptor_)) {
298 if (descriptor_->default_value_string().empty()) { 304 if (descriptor_->default_value_string().empty()) {
299 printer->Print(variables_, 305 printer->Print(variables_,
300 "$name$_.ClearToEmpty($default_variable$, GetArenaNoVirtual());\n"); 306 "$name$_.ClearToEmpty($default_variable$, GetArenaNoVirtual());\n");
301 } else { 307 } else {
302 printer->Print(variables_, 308 printer->Print(variables_,
303 "$name$_.ClearToDefault($default_variable$, GetArenaNoVirtual());\n"); 309 "$name$_.ClearToDefault($default_variable$, GetArenaNoVirtual());\n");
304 } 310 }
305 } else { 311 } else {
306 if (descriptor_->default_value_string().empty()) { 312 if (descriptor_->default_value_string().empty()) {
307 printer->Print(variables_, 313 printer->Print(variables_,
308 "$name$_.ClearToEmptyNoArena($default_variable$);\n"); 314 "$name$_.ClearToEmptyNoArena($default_variable$);\n");
309 } else { 315 } else {
310 printer->Print(variables_, 316 printer->Print(variables_,
311 "$name$_.ClearToDefaultNoArena($default_variable$);\n"); 317 "$name$_.ClearToDefaultNoArena($default_variable$);\n");
312 } 318 }
313 } 319 }
314 } 320 }
315 321
316 void StringFieldGenerator:: 322 void StringFieldGenerator::
323 GenerateMessageClearingCode(io::Printer* printer) const {
324 // Two-dimension specialization here: supporting arenas, field presence, or
325 // not, and default value is the empty string or not. Complexity here ensures
326 // the minimal number of branches / amount of extraneous code at runtime
327 // (given that the below methods are inlined one-liners)!
328
329 // If we have field presence, then the Clear() method of the protocol buffer
330 // will have checked that this field is set. If so, we can avoid redundant
331 // checks against default_variable.
332 const bool must_be_present = HasFieldPresence(descriptor_->file());
333
334 if (must_be_present) {
335 printer->Print(variables_,
336 "GOOGLE_DCHECK(!$name$_.IsDefault($default_variable$));\n");
337 }
338
339 if (SupportsArenas(descriptor_)) {
340 if (descriptor_->default_value_string().empty()) {
341 printer->Print(variables_,
342 "$name$_.ClearToEmpty($default_variable$, GetArenaNoVirtual());\n");
343 } else {
344 printer->Print(variables_,
345 "$name$_.ClearToDefault($default_variable$, GetArenaNoVirtual());\n");
346 }
347 } else if (must_be_present) {
348 // When Arenas are disabled and field presence has been checked, we can
349 // safely treat the ArenaStringPtr as a string*.
350 if (descriptor_->default_value_string().empty()) {
351 printer->Print(variables_,
352 "(*$name$_.UnsafeRawStringPointer())->clear();\n");
353 } else {
354 printer->Print(variables_,
355 "(*$name$_.UnsafeRawStringPointer())->assign(*$default_variable$);\n");
356 }
357 } else {
358 if (descriptor_->default_value_string().empty()) {
359 printer->Print(variables_,
360 "$name$_.ClearToEmptyNoArena($default_variable$);\n");
361 } else {
362 printer->Print(variables_,
363 "$name$_.ClearToDefaultNoArena($default_variable$);\n");
364 }
365 }
366 }
367
368 void StringFieldGenerator::
317 GenerateMergingCode(io::Printer* printer) const { 369 GenerateMergingCode(io::Printer* printer) const {
318 if (SupportsArenas(descriptor_) || descriptor_->containing_oneof() != NULL) { 370 if (SupportsArenas(descriptor_) || descriptor_->containing_oneof() != NULL) {
319 // TODO(gpike): improve this 371 // TODO(gpike): improve this
320 printer->Print(variables_, "set_$name$(from.$name$());\n"); 372 printer->Print(variables_, "set_$name$(from.$name$());\n");
321 } else { 373 } else {
322 printer->Print(variables_, 374 printer->Print(variables_,
323 "$set_hasbit$\n" 375 "$set_hasbit$\n"
324 "$name$_.AssignWithDefault($default_variable$, from.$name$_);\n"); 376 "$name$_.AssignWithDefault($default_variable$, from.$name$_);\n");
325 } 377 }
326 } 378 }
327 379
328 void StringFieldGenerator:: 380 void StringFieldGenerator::
329 GenerateSwappingCode(io::Printer* printer) const { 381 GenerateSwappingCode(io::Printer* printer) const {
330 printer->Print(variables_, "$name$_.Swap(&other->$name$_);\n"); 382 printer->Print(variables_, "$name$_.Swap(&other->$name$_);\n");
331 } 383 }
332 384
333 void StringFieldGenerator:: 385 void StringFieldGenerator::
334 GenerateConstructorCode(io::Printer* printer) const { 386 GenerateConstructorCode(io::Printer* printer) const {
335 printer->Print(variables_, 387 printer->Print(variables_,
336 "$name$_.UnsafeSetDefault($default_variable$);\n"); 388 "$name$_.UnsafeSetDefault($default_variable$);\n");
337 } 389 }
338 390
339 void StringFieldGenerator:: 391 void StringFieldGenerator::
392 GenerateCopyConstructorCode(io::Printer* printer) const {
393 GenerateConstructorCode(printer);
394
395 if (HasFieldPresence(descriptor_->file())) {
396 printer->Print(variables_,
397 "if (from.has_$name$()) {\n");
398 } else {
399 printer->Print(variables_,
400 "if (from.$name$().size() > 0) {\n");
401 }
402
403 printer->Indent();
404
405 if (SupportsArenas(descriptor_) || descriptor_->containing_oneof() != NULL) {
406 // TODO(gpike): improve this
407 printer->Print(variables_,
408 "$name$_.Set($default_variable$, from.$name$(),\n"
409 " GetArenaNoVirtual());\n");
410 } else {
411 printer->Print(variables_,
412 "$name$_.AssignWithDefault($default_variable$, from.$name$_);\n");
413 }
414
415 printer->Outdent();
416 printer->Print("}\n");
417 }
418
419 void StringFieldGenerator::
340 GenerateDestructorCode(io::Printer* printer) const { 420 GenerateDestructorCode(io::Printer* printer) const {
341 if (SupportsArenas(descriptor_)) { 421 if (SupportsArenas(descriptor_)) {
422 // The variable |arena| is defined by the enclosing code.
423 // See MessageGenerator::GenerateSharedDestructorCode.
342 printer->Print(variables_, 424 printer->Print(variables_,
343 "$name$_.Destroy($default_variable$, GetArenaNoVirtual());\n"); 425 "$name$_.Destroy($default_variable$, arena);\n");
344 } else { 426 } else {
345 printer->Print(variables_, 427 printer->Print(variables_,
346 "$name$_.DestroyNoArena($default_variable$);\n"); 428 "$name$_.DestroyNoArena($default_variable$);\n");
347 } 429 }
348 } 430 }
349 431
350 void StringFieldGenerator:: 432 void StringFieldGenerator::
351 GenerateDefaultInstanceAllocator(io::Printer* printer) const { 433 GenerateDefaultInstanceAllocator(io::Printer* printer) const {
352 if (!descriptor_->default_value_string().empty()) { 434 if (!descriptor_->default_value_string().empty()) {
353 printer->Print(variables_, 435 printer->Print(variables_,
354 "$classname$::$default_variable$ =\n" 436 "$classname$::$default_variable_name$.DefaultConstruct();\n"
355 " new ::std::string($default$, $default_length$);\n"); 437 "*$classname$::$default_variable_name$.get_mutable() = "
438 "::std::string($default$, $default_length$);\n");
356 } 439 }
357 } 440 }
358 441
359 void StringFieldGenerator:: 442 void StringFieldGenerator::
360 GenerateShutdownCode(io::Printer* printer) const { 443 GenerateShutdownCode(io::Printer* printer) const {
361 if (!descriptor_->default_value_string().empty()) { 444 if (!descriptor_->default_value_string().empty()) {
362 printer->Print(variables_, 445 printer->Print(variables_,
363 "delete $classname$::$default_variable$;\n"); 446 "$classname$::$default_variable_name$.Shutdown();\n");
364 } 447 }
365 } 448 }
366 449
367 void StringFieldGenerator:: 450 void StringFieldGenerator::
368 GenerateMergeFromCodedStream(io::Printer* printer) const { 451 GenerateMergeFromCodedStream(io::Printer* printer) const {
369 printer->Print(variables_, 452 printer->Print(variables_,
370 "DO_(::google::protobuf::internal::WireFormatLite::Read$declared_type$(\n" 453 "DO_(::google::protobuf::internal::WireFormatLite::Read$declared_type$(\n"
371 " input, this->mutable_$name$()));\n"); 454 " input, this->mutable_$name$()));\n");
372 455
373 if (descriptor_->type() == FieldDescriptor::TYPE_STRING) { 456 if (descriptor_->type() == FieldDescriptor::TYPE_STRING) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 : StringFieldGenerator(descriptor, options), 501 : StringFieldGenerator(descriptor, options),
419 dependent_field_(options.proto_h) { 502 dependent_field_(options.proto_h) {
420 SetCommonOneofFieldVariables(descriptor, &variables_); 503 SetCommonOneofFieldVariables(descriptor, &variables_);
421 } 504 }
422 505
423 StringOneofFieldGenerator::~StringOneofFieldGenerator() {} 506 StringOneofFieldGenerator::~StringOneofFieldGenerator() {}
424 507
425 void StringOneofFieldGenerator:: 508 void StringOneofFieldGenerator::
426 GenerateInlineAccessorDefinitions(io::Printer* printer, 509 GenerateInlineAccessorDefinitions(io::Printer* printer,
427 bool is_inline) const { 510 bool is_inline) const {
428 map<string, string> variables(variables_); 511 std::map<string, string> variables(variables_);
429 variables["inline"] = is_inline ? "inline" : ""; 512 variables["inline"] = is_inline ? "inline " : "";
430 if (SupportsArenas(descriptor_)) { 513 if (SupportsArenas(descriptor_)) {
431 printer->Print(variables, 514 printer->Print(
432 "$inline$ const ::std::string& $classname$::$name$() const {\n" 515 variables,
433 " // @@protoc_insertion_point(field_get:$full_name$)\n" 516 "$inline$const ::std::string& $classname$::$name$() const {\n"
434 " if (has_$name$()) {\n" 517 " // @@protoc_insertion_point(field_get:$full_name$)\n"
435 " return $oneof_prefix$$name$_.Get($default_variable$);\n" 518 " if (has_$name$()) {\n"
436 " }\n" 519 " return $oneof_prefix$$name$_.Get();\n"
437 " return *$default_variable$;\n" 520 " }\n"
438 "}\n" 521 " return *$default_variable$;\n"
439 "$inline$ void $classname$::set_$name$(const ::std::string& value) {\n" 522 "}\n"
440 " if (!has_$name$()) {\n" 523 "$inline$void $classname$::set_$name$(const ::std::string& value) {\n"
441 " clear_$oneof_name$();\n" 524 " if (!has_$name$()) {\n"
442 " set_has_$name$();\n" 525 " clear_$oneof_name$();\n"
443 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 526 " set_has_$name$();\n"
444 " }\n" 527 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
445 " $oneof_prefix$$name$_.Set($default_variable$, value,\n" 528 " }\n"
446 " GetArenaNoVirtual());\n" 529 " $oneof_prefix$$name$_.Set($default_variable$, value,\n"
447 " // @@protoc_insertion_point(field_set:$full_name$)\n" 530 " GetArenaNoVirtual());\n"
448 "}\n" 531 " // @@protoc_insertion_point(field_set:$full_name$)\n"
449 "$inline$ void $classname$::set_$name$(const char* value) {\n" 532 "}\n"
450 " if (!has_$name$()) {\n" 533 "$inline$void $classname$::set_$name$(const char* value) {\n"
451 " clear_$oneof_name$();\n" 534 " if (!has_$name$()) {\n"
452 " set_has_$name$();\n" 535 " clear_$oneof_name$();\n"
453 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 536 " set_has_$name$();\n"
454 " }\n" 537 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
455 " $oneof_prefix$$name$_.Set($default_variable$,\n" 538 " }\n"
456 " $string_piece$(value), GetArenaNoVirtual());\n" 539 " $oneof_prefix$$name$_.Set($default_variable$,\n"
457 " // @@protoc_insertion_point(field_set_char:$full_name$)\n" 540 " $string_piece$(value), GetArenaNoVirtual());\n"
458 "}\n" 541 " // @@protoc_insertion_point(field_set_char:$full_name$)\n"
459 "$inline$ " 542 "}\n"
460 "void $classname$::set_$name$(const $pointer_type$* value,\n" 543 "$inline$"
461 " size_t size) {\n" 544 "void $classname$::set_$name$(const $pointer_type$* value,\n"
462 " if (!has_$name$()) {\n" 545 " size_t size) {\n"
463 " clear_$oneof_name$();\n" 546 " if (!has_$name$()) {\n"
464 " set_has_$name$();\n" 547 " clear_$oneof_name$();\n"
465 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 548 " set_has_$name$();\n"
466 " }\n" 549 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
467 " $oneof_prefix$$name$_.Set($default_variable$, $string_piece$(\n" 550 " }\n"
468 " reinterpret_cast<const char*>(value), size),\n" 551 " $oneof_prefix$$name$_.Set($default_variable$, $string_piece$(\n"
469 " GetArenaNoVirtual());\n" 552 " reinterpret_cast<const char*>(value), size),\n"
470 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n" 553 " GetArenaNoVirtual());\n"
471 "}\n" 554 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
472 "$inline$ ::std::string* $classname$::mutable_$name$() {\n" 555 "}\n"
473 " if (!has_$name$()) {\n" 556 "$inline$::std::string* $classname$::mutable_$name$() {\n"
474 " clear_$oneof_name$();\n" 557 " if (!has_$name$()) {\n"
475 " set_has_$name$();\n" 558 " clear_$oneof_name$();\n"
476 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 559 " set_has_$name$();\n"
477 " }\n" 560 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
478 " return $oneof_prefix$$name$_.Mutable($default_variable$,\n" 561 " }\n"
479 " GetArenaNoVirtual());\n" 562 " return $oneof_prefix$$name$_.Mutable($default_variable$,\n"
480 " // @@protoc_insertion_point(field_mutable:$full_name$)\n" 563 " GetArenaNoVirtual());\n"
481 "}\n" 564 " // @@protoc_insertion_point(field_mutable:$full_name$)\n"
482 "$inline$ ::std::string* $classname$::$release_name$() {\n" 565 "}\n"
483 " // @@protoc_insertion_point(field_release:$full_name$)\n" 566 "$inline$::std::string* $classname$::$release_name$() {\n"
484 " if (has_$name$()) {\n" 567 " // @@protoc_insertion_point(field_release:$full_name$)\n"
485 " clear_has_$oneof_name$();\n" 568 " if (has_$name$()) {\n"
486 " return $oneof_prefix$$name$_.Release($default_variable$,\n" 569 " clear_has_$oneof_name$();\n"
487 " GetArenaNoVirtual());\n" 570 " return $oneof_prefix$$name$_.Release($default_variable$,\n"
488 " } else {\n" 571 " GetArenaNoVirtual());\n"
489 " return NULL;\n" 572 " } else {\n"
490 " }\n" 573 " return NULL;\n"
491 "}\n" 574 " }\n"
492 "$inline$ ::std::string* $classname$::unsafe_arena_release_$name$() {\n" 575 "}\n"
493 " // @@protoc_insertion_point(field_unsafe_arena_release:$full_name$)\n" 576 "$inline$::std::string* $classname$::unsafe_arena_release_$name$() {\n"
494 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n" 577 " // "
495 " if (has_$name$()) {\n" 578 "@@protoc_insertion_point(field_unsafe_arena_release:$full_name$)\n"
496 " clear_has_$oneof_name$();\n" 579 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n"
497 " return $oneof_prefix$$name$_.UnsafeArenaRelease(\n" 580 " if (has_$name$()) {\n"
498 " $default_variable$, GetArenaNoVirtual());\n" 581 " clear_has_$oneof_name$();\n"
499 " } else {\n" 582 " return $oneof_prefix$$name$_.UnsafeArenaRelease(\n"
500 " return NULL;\n" 583 " $default_variable$, GetArenaNoVirtual());\n"
501 " }\n" 584 " } else {\n"
502 "}\n" 585 " return NULL;\n"
503 "$inline$ void $classname$::set_allocated_$name$(::std::string* $name$) {\ n" 586 " }\n"
504 " if (!has_$name$()) {\n" 587 "}\n"
505 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 588 "$inline$void $classname$::set_allocated_$name$(::std::string* $name$) { \n"
506 " }\n" 589 " if (!has_$name$()) {\n"
507 " clear_$oneof_name$();\n" 590 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
508 " if ($name$ != NULL) {\n" 591 " }\n"
509 " set_has_$name$();\n" 592 " clear_$oneof_name$();\n"
510 " $oneof_prefix$$name$_.SetAllocated($default_variable$, $name$,\n" 593 " if ($name$ != NULL) {\n"
511 " GetArenaNoVirtual());\n" 594 " set_has_$name$();\n"
512 " }\n" 595 " $oneof_prefix$$name$_.SetAllocated($default_variable$, $name$,\n"
513 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n" 596 " GetArenaNoVirtual());\n"
514 "}\n" 597 " }\n"
515 "$inline$ void $classname$::unsafe_arena_set_allocated_$name$(" 598 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n"
516 "::std::string* $name$) {\n" 599 "}\n"
517 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n" 600 "$inline$void $classname$::unsafe_arena_set_allocated_$name$("
518 " if (!has_$name$()) {\n" 601 "::std::string* $name$) {\n"
519 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 602 " GOOGLE_DCHECK(GetArenaNoVirtual() != NULL);\n"
520 " }\n" 603 " if (!has_$name$()) {\n"
521 " clear_$oneof_name$();\n" 604 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
522 " if ($name$) {\n" 605 " }\n"
523 " set_has_$name$();\n" 606 " clear_$oneof_name$();\n"
524 " $oneof_prefix$$name$_.UnsafeArenaSetAllocated($default_variable$, " 607 " if ($name$) {\n"
525 "$name$, GetArenaNoVirtual());\n" 608 " set_has_$name$();\n"
526 " }\n" 609 " $oneof_prefix$$name$_.UnsafeArenaSetAllocated($default_variable$, "
527 " // @@protoc_insertion_point(field_unsafe_arena_set_allocated:" 610 "$name$, GetArenaNoVirtual());\n"
528 "$full_name$)\n" 611 " }\n"
529 "}\n"); 612 " // @@protoc_insertion_point(field_unsafe_arena_set_allocated:"
613 "$full_name$)\n"
614 "}\n");
530 } else { 615 } else {
531 // No-arena case. 616 // No-arena case.
532 printer->Print(variables, 617 printer->Print(
533 "$inline$ const ::std::string& $classname$::$name$() const {\n" 618 variables,
534 " // @@protoc_insertion_point(field_get:$full_name$)\n" 619 "$inline$const ::std::string& $classname$::$name$() const {\n"
535 " if (has_$name$()) {\n" 620 " // @@protoc_insertion_point(field_get:$full_name$)\n"
536 " return $oneof_prefix$$name$_.GetNoArena($default_variable$);\n" 621 " if (has_$name$()) {\n"
537 " }\n" 622 " return $oneof_prefix$$name$_.GetNoArena();\n"
538 " return *$default_variable$;\n" 623 " }\n"
539 "}\n" 624 " return *$default_variable$;\n"
540 "$inline$ void $classname$::set_$name$(const ::std::string& value) {\n" 625 "}\n"
541 " // @@protoc_insertion_point(field_set:$full_name$)\n" 626 "$inline$void $classname$::set_$name$(const ::std::string& value) {\n"
542 " if (!has_$name$()) {\n" 627 " // @@protoc_insertion_point(field_set:$full_name$)\n"
543 " clear_$oneof_name$();\n" 628 " if (!has_$name$()) {\n"
544 " set_has_$name$();\n" 629 " clear_$oneof_name$();\n"
545 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 630 " set_has_$name$();\n"
546 " }\n" 631 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
547 " $oneof_prefix$$name$_.SetNoArena($default_variable$, value);\n" 632 " }\n"
548 " // @@protoc_insertion_point(field_set:$full_name$)\n" 633 " $oneof_prefix$$name$_.SetNoArena($default_variable$, value);\n"
549 "}\n" 634 " // @@protoc_insertion_point(field_set:$full_name$)\n"
550 "$inline$ void $classname$::set_$name$(const char* value) {\n" 635 "}\n"
551 " if (!has_$name$()) {\n" 636 "$inline$void $classname$::set_$name$(const char* value) {\n"
552 " clear_$oneof_name$();\n" 637 " if (!has_$name$()) {\n"
553 " set_has_$name$();\n" 638 " clear_$oneof_name$();\n"
554 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 639 " set_has_$name$();\n"
555 " }\n" 640 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
556 " $oneof_prefix$$name$_.SetNoArena($default_variable$,\n" 641 " }\n"
557 " $string_piece$(value));\n" 642 " $oneof_prefix$$name$_.SetNoArena($default_variable$,\n"
558 " // @@protoc_insertion_point(field_set_char:$full_name$)\n" 643 " $string_piece$(value));\n"
559 "}\n" 644 " // @@protoc_insertion_point(field_set_char:$full_name$)\n"
560 "$inline$ " 645 "}\n"
561 "void $classname$::set_$name$(const $pointer_type$* value, size_t size) {\ n" 646 "$inline$"
562 " if (!has_$name$()) {\n" 647 "void $classname$::set_$name$(const $pointer_type$* value, size_t "
563 " clear_$oneof_name$();\n" 648 "size) {\n"
564 " set_has_$name$();\n" 649 " if (!has_$name$()) {\n"
565 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 650 " clear_$oneof_name$();\n"
566 " }\n" 651 " set_has_$name$();\n"
567 " $oneof_prefix$$name$_.SetNoArena($default_variable$, $string_piece$(\n" 652 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
568 " reinterpret_cast<const char*>(value), size));\n" 653 " }\n"
569 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n" 654 " $oneof_prefix$$name$_.SetNoArena($default_variable$, "
570 "}\n" 655 "$string_piece$(\n"
571 "$inline$ ::std::string* $classname$::mutable_$name$() {\n" 656 " reinterpret_cast<const char*>(value), size));\n"
572 " if (!has_$name$()) {\n" 657 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
573 " clear_$oneof_name$();\n" 658 "}\n"
574 " set_has_$name$();\n" 659 "$inline$::std::string* $classname$::mutable_$name$() {\n"
575 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 660 " if (!has_$name$()) {\n"
576 " }\n" 661 " clear_$oneof_name$();\n"
577 " // @@protoc_insertion_point(field_mutable:$full_name$)\n" 662 " set_has_$name$();\n"
578 " return $oneof_prefix$$name$_.MutableNoArena($default_variable$);\n" 663 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
579 "}\n" 664 " }\n"
580 "$inline$ ::std::string* $classname$::$release_name$() {\n" 665 " // @@protoc_insertion_point(field_mutable:$full_name$)\n"
581 " // @@protoc_insertion_point(field_release:$full_name$)\n" 666 " return $oneof_prefix$$name$_.MutableNoArena($default_variable$);\n"
582 " if (has_$name$()) {\n" 667 "}\n"
583 " clear_has_$oneof_name$();\n" 668 "$inline$::std::string* $classname$::$release_name$() {\n"
584 " return $oneof_prefix$$name$_.ReleaseNoArena($default_variable$);\n" 669 " // @@protoc_insertion_point(field_release:$full_name$)\n"
585 " } else {\n" 670 " if (has_$name$()) {\n"
586 " return NULL;\n" 671 " clear_has_$oneof_name$();\n"
587 " }\n" 672 " return $oneof_prefix$$name$_.ReleaseNoArena($default_variable$);\n"
588 "}\n" 673 " } else {\n"
589 "$inline$ void $classname$::set_allocated_$name$(::std::string* $name$) {\ n" 674 " return NULL;\n"
590 " if (!has_$name$()) {\n" 675 " }\n"
591 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n" 676 "}\n"
592 " }\n" 677 "$inline$void $classname$::set_allocated_$name$(::std::string* $name$) { \n"
593 " clear_$oneof_name$();\n" 678 " if (!has_$name$()) {\n"
594 " if ($name$ != NULL) {\n" 679 " $oneof_prefix$$name$_.UnsafeSetDefault($default_variable$);\n"
595 " set_has_$name$();\n" 680 " }\n"
596 " $oneof_prefix$$name$_.SetAllocatedNoArena($default_variable$,\n" 681 " clear_$oneof_name$();\n"
597 " $name$);\n" 682 " if ($name$ != NULL) {\n"
598 " }\n" 683 " set_has_$name$();\n"
599 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n" 684 " $oneof_prefix$$name$_.SetAllocatedNoArena($default_variable$,\n"
600 "}\n"); 685 " $name$);\n"
686 " }\n"
687 " // @@protoc_insertion_point(field_set_allocated:$full_name$)\n"
688 "}\n");
601 } 689 }
602 } 690 }
603 691
604 void StringOneofFieldGenerator:: 692 void StringOneofFieldGenerator::
605 GenerateClearingCode(io::Printer* printer) const { 693 GenerateClearingCode(io::Printer* printer) const {
606 map<string, string> variables(variables_); 694 std::map<string, string> variables(variables_);
607 if (dependent_field_) { 695 if (dependent_field_) {
608 variables["this_message"] = DependentBaseDownCast(); 696 variables["this_message"] = DependentBaseDownCast();
609 // This clearing code may be in the dependent base class. If the default 697 // This clearing code may be in the dependent base class. If the default
610 // value is an empty string, then the $default_variable$ is a global 698 // value is an empty string, then the $default_variable$ is a global
611 // singleton. If the default is not empty, we need to down-cast to get the 699 // singleton. If the default is not empty, we need to down-cast to get the
612 // default value's global singleton instance. See SetStringVariables() for 700 // default value's global singleton instance. See SetStringVariables() for
613 // possible values of default_variable. 701 // possible values of default_variable.
614 if (!descriptor_->default_value_string().empty()) { 702 if (!descriptor_->default_value_string().empty()) {
615 variables["default_variable"] = 703 variables["default_variable"] = "&" + DependentBaseDownCast() +
616 DependentBaseDownCast() + variables["default_variable"]; 704 variables["default_variable_name"] +
705 ".get()";
617 } 706 }
618 } else { 707 } else {
619 variables["this_message"] = ""; 708 variables["this_message"] = "";
620 } 709 }
621 if (SupportsArenas(descriptor_)) { 710 if (SupportsArenas(descriptor_)) {
622 printer->Print(variables, 711 printer->Print(variables,
623 "$this_message$$oneof_prefix$$name$_.Destroy($default_variable$,\n" 712 "$this_message$$oneof_prefix$$name$_.Destroy($default_variable$,\n"
624 " $this_message$GetArenaNoVirtual());\n"); 713 " $this_message$GetArenaNoVirtual());\n");
625 } else { 714 } else {
626 printer->Print(variables, 715 printer->Print(variables,
627 "$this_message$$oneof_prefix$$name$_." 716 "$this_message$$oneof_prefix$$name$_."
628 "DestroyNoArena($default_variable$);\n"); 717 "DestroyNoArena($default_variable$);\n");
629 } 718 }
630 } 719 }
631 720
632 void StringOneofFieldGenerator:: 721 void StringOneofFieldGenerator::
722 GenerateMessageClearingCode(io::Printer* printer) const {
723 return GenerateClearingCode(printer);
724 }
725
726 void StringOneofFieldGenerator::
633 GenerateSwappingCode(io::Printer* printer) const { 727 GenerateSwappingCode(io::Printer* printer) const {
634 // Don't print any swapping code. Swapping the union will swap this field. 728 // Don't print any swapping code. Swapping the union will swap this field.
635 } 729 }
636 730
637 void StringOneofFieldGenerator:: 731 void StringOneofFieldGenerator::
638 GenerateConstructorCode(io::Printer* printer) const { 732 GenerateConstructorCode(io::Printer* printer) const {
639 printer->Print(variables_, 733 printer->Print(
640 " $classname$_default_oneof_instance_->$name$_.UnsafeSetDefault(" 734 variables_,
641 "$default_variable$);\n"); 735 "$classname$_default_oneof_instance_.$name$_.UnsafeSetDefault(\n"
736 " $default_variable$);\n");
642 } 737 }
643 738
644 void StringOneofFieldGenerator:: 739 void StringOneofFieldGenerator::
645 GenerateDestructorCode(io::Printer* printer) const { 740 GenerateDestructorCode(io::Printer* printer) const {
646 if (SupportsArenas(descriptor_)) { 741 if (SupportsArenas(descriptor_)) {
647 printer->Print(variables_, 742 printer->Print(variables_,
648 "if (has_$name$()) {\n" 743 "if (has_$name$()) {\n"
649 " $oneof_prefix$$name$_.Destroy($default_variable$,\n" 744 " $oneof_prefix$$name$_.Destroy($default_variable$,\n"
650 " GetArenaNoVirtual());\n" 745 " GetArenaNoVirtual());\n"
651 "}\n"); 746 "}\n");
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 if (unknown_ctype) { 819 if (unknown_ctype) {
725 printer->Outdent(); 820 printer->Outdent();
726 printer->Print(" public:\n"); 821 printer->Print(" public:\n");
727 printer->Indent(); 822 printer->Indent();
728 } 823 }
729 } 824 }
730 825
731 void RepeatedStringFieldGenerator:: 826 void RepeatedStringFieldGenerator::
732 GenerateInlineAccessorDefinitions(io::Printer* printer, 827 GenerateInlineAccessorDefinitions(io::Printer* printer,
733 bool is_inline) const { 828 bool is_inline) const {
734 map<string, string> variables(variables_); 829 std::map<string, string> variables(variables_);
735 variables["inline"] = is_inline ? "inline" : ""; 830 variables["inline"] = is_inline ? "inline " : "";
736 printer->Print(variables, 831 printer->Print(variables,
737 "$inline$ const ::std::string& $classname$::$name$(int index) const {\n" 832 "$inline$const ::std::string& $classname$::$name$(int index) const {\n"
738 " // @@protoc_insertion_point(field_get:$full_name$)\n" 833 " // @@protoc_insertion_point(field_get:$full_name$)\n"
739 " return $name$_.$cppget$(index);\n" 834 " return $name$_.$cppget$(index);\n"
740 "}\n" 835 "}\n"
741 "$inline$ ::std::string* $classname$::mutable_$name$(int index) {\n" 836 "$inline$::std::string* $classname$::mutable_$name$(int index) {\n"
742 " // @@protoc_insertion_point(field_mutable:$full_name$)\n" 837 " // @@protoc_insertion_point(field_mutable:$full_name$)\n"
743 " return $name$_.Mutable(index);\n" 838 " return $name$_.Mutable(index);\n"
744 "}\n" 839 "}\n"
745 "$inline$ void $classname$::set_$name$(int index, const ::std::string& value ) {\n" 840 "$inline$void $classname$::set_$name$(int index, const ::std::string& value) {\n"
746 " // @@protoc_insertion_point(field_set:$full_name$)\n" 841 " // @@protoc_insertion_point(field_set:$full_name$)\n"
747 " $name$_.Mutable(index)->assign(value);\n" 842 " $name$_.Mutable(index)->assign(value);\n"
748 "}\n" 843 "}\n"
749 "$inline$ void $classname$::set_$name$(int index, const char* value) {\n" 844 "$inline$void $classname$::set_$name$(int index, const char* value) {\n"
750 " $name$_.Mutable(index)->assign(value);\n" 845 " $name$_.Mutable(index)->assign(value);\n"
751 " // @@protoc_insertion_point(field_set_char:$full_name$)\n" 846 " // @@protoc_insertion_point(field_set_char:$full_name$)\n"
752 "}\n" 847 "}\n"
753 "$inline$ void " 848 "$inline$void "
754 "$classname$::set_$name$" 849 "$classname$::set_$name$"
755 "(int index, const $pointer_type$* value, size_t size) {\n" 850 "(int index, const $pointer_type$* value, size_t size) {\n"
756 " $name$_.Mutable(index)->assign(\n" 851 " $name$_.Mutable(index)->assign(\n"
757 " reinterpret_cast<const char*>(value), size);\n" 852 " reinterpret_cast<const char*>(value), size);\n"
758 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n" 853 " // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
759 "}\n" 854 "}\n"
760 "$inline$ ::std::string* $classname$::add_$name$() {\n" 855 "$inline$::std::string* $classname$::add_$name$() {\n"
761 " // @@protoc_insertion_point(field_add_mutable:$full_name$)\n" 856 " // @@protoc_insertion_point(field_add_mutable:$full_name$)\n"
762 " return $name$_.Add();\n" 857 " return $name$_.Add();\n"
763 "}\n" 858 "}\n"
764 "$inline$ void $classname$::add_$name$(const ::std::string& value) {\n" 859 "$inline$void $classname$::add_$name$(const ::std::string& value) {\n"
765 " $name$_.Add()->assign(value);\n" 860 " $name$_.Add()->assign(value);\n"
766 " // @@protoc_insertion_point(field_add:$full_name$)\n" 861 " // @@protoc_insertion_point(field_add:$full_name$)\n"
767 "}\n" 862 "}\n"
768 "$inline$ void $classname$::add_$name$(const char* value) {\n" 863 "$inline$void $classname$::add_$name$(const char* value) {\n"
769 " $name$_.Add()->assign(value);\n" 864 " $name$_.Add()->assign(value);\n"
770 " // @@protoc_insertion_point(field_add_char:$full_name$)\n" 865 " // @@protoc_insertion_point(field_add_char:$full_name$)\n"
771 "}\n" 866 "}\n"
772 "$inline$ void " 867 "$inline$void "
773 "$classname$::add_$name$(const $pointer_type$* value, size_t size) {\n" 868 "$classname$::add_$name$(const $pointer_type$* value, size_t size) {\n"
774 " $name$_.Add()->assign(reinterpret_cast<const char*>(value), size);\n" 869 " $name$_.Add()->assign(reinterpret_cast<const char*>(value), size);\n"
775 " // @@protoc_insertion_point(field_add_pointer:$full_name$)\n" 870 " // @@protoc_insertion_point(field_add_pointer:$full_name$)\n"
776 "}\n"); 871 "}\n");
777 printer->Print(variables, 872 printer->Print(variables,
778 "$inline$ const ::google::protobuf::RepeatedPtrField< ::std::string>&\n" 873 "$inline$const ::google::protobuf::RepeatedPtrField< ::std::string>&\n"
779 "$classname$::$name$() const {\n" 874 "$classname$::$name$() const {\n"
780 " // @@protoc_insertion_point(field_list:$full_name$)\n" 875 " // @@protoc_insertion_point(field_list:$full_name$)\n"
781 " return $name$_;\n" 876 " return $name$_;\n"
782 "}\n" 877 "}\n"
783 "$inline$ ::google::protobuf::RepeatedPtrField< ::std::string>*\n" 878 "$inline$::google::protobuf::RepeatedPtrField< ::std::string>*\n"
784 "$classname$::mutable_$name$() {\n" 879 "$classname$::mutable_$name$() {\n"
785 " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n" 880 " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n"
786 " return &$name$_;\n" 881 " return &$name$_;\n"
787 "}\n"); 882 "}\n");
788 } 883 }
789 884
790 void RepeatedStringFieldGenerator:: 885 void RepeatedStringFieldGenerator::
791 GenerateClearingCode(io::Printer* printer) const { 886 GenerateClearingCode(io::Printer* printer) const {
792 printer->Print(variables_, "$name$_.Clear();\n"); 887 printer->Print(variables_, "$name$_.Clear();\n");
793 } 888 }
794 889
795 void RepeatedStringFieldGenerator:: 890 void RepeatedStringFieldGenerator::
796 GenerateMergingCode(io::Printer* printer) const { 891 GenerateMergingCode(io::Printer* printer) const {
797 printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n"); 892 printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n");
798 } 893 }
799 894
800 void RepeatedStringFieldGenerator:: 895 void RepeatedStringFieldGenerator::
801 GenerateSwappingCode(io::Printer* printer) const { 896 GenerateSwappingCode(io::Printer* printer) const {
802 printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); 897 printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n");
803 } 898 }
804 899
805 void RepeatedStringFieldGenerator:: 900 void RepeatedStringFieldGenerator::
806 GenerateConstructorCode(io::Printer* printer) const { 901 GenerateConstructorCode(io::Printer* printer) const {
807 // Not needed for repeated fields. 902 // Not needed for repeated fields.
808 } 903 }
809 904
810 void RepeatedStringFieldGenerator:: 905 void RepeatedStringFieldGenerator::
906 GenerateCopyConstructorCode(io::Printer* printer) const {
907 printer->Print(variables_, "$name$_.CopyFrom(from.$name$_);");
908 }
909
910 void RepeatedStringFieldGenerator::
811 GenerateMergeFromCodedStream(io::Printer* printer) const { 911 GenerateMergeFromCodedStream(io::Printer* printer) const {
812 printer->Print(variables_, 912 printer->Print(variables_,
813 "DO_(::google::protobuf::internal::WireFormatLite::Read$declared_type$(\n" 913 "DO_(::google::protobuf::internal::WireFormatLite::Read$declared_type$(\n"
814 " input, this->add_$name$()));\n"); 914 " input, this->add_$name$()));\n");
815 if (descriptor_->type() == FieldDescriptor::TYPE_STRING) { 915 if (descriptor_->type() == FieldDescriptor::TYPE_STRING) {
816 GenerateUtf8CheckCodeForString( 916 GenerateUtf8CheckCodeForString(
817 descriptor_, options_, true, variables_, 917 descriptor_, options_, true, variables_,
818 "this->$name$(this->$name$_size() - 1).data(),\n" 918 "this->$name$(this->$name$_size() - 1).data(),\n"
819 "this->$name$(this->$name$_size() - 1).length(),\n", 919 "this->$name$(this->$name$_size() - 1).length(),\n",
820 printer); 920 printer);
(...skipping 30 matching lines...) Expand all
851 printer->Outdent(); 951 printer->Outdent();
852 printer->Print(variables_, 952 printer->Print(variables_,
853 " target = ::google::protobuf::internal::WireFormatLite::\n" 953 " target = ::google::protobuf::internal::WireFormatLite::\n"
854 " Write$declared_type$ToArray($number$, this->$name$(i), target);\n" 954 " Write$declared_type$ToArray($number$, this->$name$(i), target);\n"
855 "}\n"); 955 "}\n");
856 } 956 }
857 957
858 void RepeatedStringFieldGenerator:: 958 void RepeatedStringFieldGenerator::
859 GenerateByteSize(io::Printer* printer) const { 959 GenerateByteSize(io::Printer* printer) const {
860 printer->Print(variables_, 960 printer->Print(variables_,
861 "total_size += $tag_size$ * this->$name$_size();\n" 961 "total_size += $tag_size$ *\n"
962 " ::google::protobuf::internal::FromIntSize(this->$name$_size());\n"
862 "for (int i = 0; i < this->$name$_size(); i++) {\n" 963 "for (int i = 0; i < this->$name$_size(); i++) {\n"
863 " total_size += ::google::protobuf::internal::WireFormatLite::$declared_typ e$Size(\n" 964 " total_size += ::google::protobuf::internal::WireFormatLite::$declared_typ e$Size(\n"
864 " this->$name$(i));\n" 965 " this->$name$(i));\n"
865 "}\n"); 966 "}\n");
866 } 967 }
867 968
868 } // namespace cpp 969 } // namespace cpp
869 } // namespace compiler 970 } // namespace compiler
870 } // namespace protobuf 971 } // namespace protobuf
871 } // namespace google 972 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698