15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Protocol Buffers - Google's data interchange format 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2008 Google Inc. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://code.google.com/p/protobuf/ 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Redistribution and use in source and binary forms, with or without 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// modification, are permitted provided that the following conditions are 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// met: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * Redistributions of source code must retain the above copyright 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notice, this list of conditions and the following disclaimer. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * Redistributions in binary form must reproduce the above 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// copyright notice, this list of conditions and the following disclaimer 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in the documentation and/or other materials provided with the 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// distribution. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * Neither the name of Google Inc. nor the names of its 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// contributors may be used to endorse or promote products derived from 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this software without specific prior written permission. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Author: kenton@google.com (Kenton Varda) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Based on original Protocol Buffers design by 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sanjay Ghemawat, Jeff Dean, and others. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/compiler/cpp/cpp_message_field.h> 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/compiler/cpp/cpp_helpers.h> 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/io/printer.h> 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/stubs/strutil.h> 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace protobuf { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace compiler { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace cpp { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetMessageVariables(const FieldDescriptor* descriptor, 48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch map<string, string>* variables, 49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Options& options) { 50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetCommonFieldVariables(descriptor, variables, options); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*variables)["type"] = FieldMessageTypeName(descriptor); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*variables)["stream_writer"] = (*variables)["declared_type"] + 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (HasFastArraySerialization(descriptor->message_type()->file()) ? 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "MaybeToArray" : 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ""); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// =================================================================== 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MessageFieldGenerator:: 63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochMessageFieldGenerator(const FieldDescriptor* descriptor, 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Options& options) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : descriptor_(descriptor) { 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetMessageVariables(descriptor, &variables_, options); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MessageFieldGenerator::~MessageFieldGenerator() {} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GeneratePrivateMembers(io::Printer* printer) const { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, "$type$* $name$_;\n"); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateAccessorDeclarations(io::Printer* printer) const { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline const $type$& $name$() const$deprecation$;\n" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* mutable_$name$()$deprecation$;\n" 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "inline $type$* release_$name$()$deprecation$;\n" 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "inline void set_allocated_$name$($type$* $name$)$deprecation$;\n"); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateInlineAccessorDefinitions(io::Printer* printer) const { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline const $type$& $classname$::$name$() const {\n"); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintHandlingOptionalStaticInitializers( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) variables_, descriptor_->file(), printer, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // With static initializers. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return $name$_ != NULL ? *$name$_ : *default_instance_->$name$_;\n", 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Without. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return $name$_ != NULL ? *$name$_ : *default_instance().$name$_;\n"); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n" 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* $classname$::mutable_$name$() {\n" 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " set_has_$name$();\n" 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " if ($name$_ == NULL) $name$_ = new $type$;\n" 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return $name$_;\n" 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n" 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* $classname$::release_$name$() {\n" 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " clear_has_$name$();\n" 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $type$* temp = $name$_;\n" 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $name$_ = NULL;\n" 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return temp;\n" 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "}\n" 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "inline void $classname$::set_allocated_$name$($type$* $name$) {\n" 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " delete $name$_;\n" 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " $name$_ = $name$;\n" 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " if ($name$) {\n" 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " set_has_$name$();\n" 115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " } else {\n" 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " clear_has_$name$();\n" 117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " }\n" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n"); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateClearingCode(io::Printer* printer) const { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "if ($name$_ != NULL) $name$_->$type$::Clear();\n"); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateMergingCode(io::Printer* printer) const { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mutable_$name$()->$type$::MergeFrom(from.$name$());\n"); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateSwappingCode(io::Printer* printer) const { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, "std::swap($name$_, other->$name$_);\n"); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateConstructorCode(io::Printer* printer) const { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, "$name$_ = NULL;\n"); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateMergeFromCodedStream(io::Printer* printer) const { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descriptor_->type() == FieldDescriptor::TYPE_MESSAGE) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(\n" 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " input, mutable_$name$()));\n"); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "DO_(::google::protobuf::internal::WireFormatLite::ReadGroupNoVirtual(\n" 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, input, mutable_$name$()));\n"); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateSerializeWithCachedSizes(io::Printer* printer) const { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "::google::protobuf::internal::WireFormatLite::Write$stream_writer$(\n" 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, this->$name$(), output);\n"); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "target = ::google::protobuf::internal::WireFormatLite::\n" 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " Write$declared_type$NoVirtualToArray(\n" 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, this->$name$(), target);\n"); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MessageFieldGenerator:: 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateByteSize(io::Printer* printer) const { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "total_size += $tag_size$ +\n" 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ::google::protobuf::internal::WireFormatLite::$declared_type$SizeNoVirtual(\n" 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " this->$name$());\n"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// =================================================================== 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RepeatedMessageFieldGenerator:: 182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochRepeatedMessageFieldGenerator(const FieldDescriptor* descriptor, 183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Options& options) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : descriptor_(descriptor) { 185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetMessageVariables(descriptor, &variables_, options); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RepeatedMessageFieldGenerator::~RepeatedMessageFieldGenerator() {} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GeneratePrivateMembers(io::Printer* printer) const { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "::google::protobuf::RepeatedPtrField< $type$ > $name$_;\n"); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateAccessorDeclarations(io::Printer* printer) const { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline const $type$& $name$(int index) const$deprecation$;\n" 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* mutable_$name$(int index)$deprecation$;\n" 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* add_$name$()$deprecation$;\n"); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline const ::google::protobuf::RepeatedPtrField< $type$ >&\n" 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $name$() const$deprecation$;\n" 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline ::google::protobuf::RepeatedPtrField< $type$ >*\n" 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " mutable_$name$()$deprecation$;\n"); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateInlineAccessorDefinitions(io::Printer* printer) const { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline const $type$& $classname$::$name$(int index) const {\n" 213ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " return $name$_.$cppget$(index);\n" 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n" 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* $classname$::mutable_$name$(int index) {\n" 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return $name$_.Mutable(index);\n" 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n" 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline $type$* $classname$::add_$name$() {\n" 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return $name$_.Add();\n" 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n"); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline const ::google::protobuf::RepeatedPtrField< $type$ >&\n" 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "$classname$::$name$() const {\n" 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return $name$_;\n" 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n" 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "inline ::google::protobuf::RepeatedPtrField< $type$ >*\n" 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "$classname$::mutable_$name$() {\n" 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return &$name$_;\n" 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n"); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateClearingCode(io::Printer* printer) const { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, "$name$_.Clear();\n"); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateMergingCode(io::Printer* printer) const { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n"); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateSwappingCode(io::Printer* printer) const { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, "$name$_.Swap(&other->$name$_);\n"); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateConstructorCode(io::Printer* printer) const { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not needed for repeated fields. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateMergeFromCodedStream(io::Printer* printer) const { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descriptor_->type() == FieldDescriptor::TYPE_MESSAGE) { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(\n" 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " input, add_$name$()));\n"); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "DO_(::google::protobuf::internal::WireFormatLite::ReadGroupNoVirtual(\n" 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, input, add_$name$()));\n"); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateSerializeWithCachedSizes(io::Printer* printer) const { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "for (int i = 0; i < this->$name$_size(); i++) {\n" 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ::google::protobuf::internal::WireFormatLite::Write$stream_writer$(\n" 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, this->$name$(i), output);\n" 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n"); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "for (int i = 0; i < this->$name$_size(); i++) {\n" 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " target = ::google::protobuf::internal::WireFormatLite::\n" 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " Write$declared_type$NoVirtualToArray(\n" 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, this->$name$(i), target);\n" 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RepeatedMessageFieldGenerator:: 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GenerateByteSize(io::Printer* printer) const { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(variables_, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "total_size += $tag_size$ * this->$name$_size();\n" 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "for (int i = 0; i < this->$name$_size(); i++) {\n" 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " total_size +=\n" 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ::google::protobuf::internal::WireFormatLite::$declared_type$SizeNoVirtual(\n" 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " this->$name$(i));\n" 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n"); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace cpp 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace compiler 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace protobuf 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace google 299