1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson// https://developers.google.com/protocol-buffers/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: kenton@google.com (Kenton Varda) 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Based on original Protocol Buffers design by 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Sanjay Ghemawat, Jeff Dean, and others. 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/compiler/cpp/cpp_primitive_field.h> 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/compiler/cpp/cpp_helpers.h> 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/io/printer.h> 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/wire_format.h> 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/strutil.h> 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace google { 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace compiler { 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace cpp { 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing internal::WireFormatLite; 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace { 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// For encodings with fixed sizes, returns that size in bytes. Otherwise 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// returns -1. 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleint FixedSize(FieldDescriptor::Type type) { 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville switch (type) { 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_INT32 : return -1; 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_INT64 : return -1; 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_UINT32 : return -1; 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_UINT64 : return -1; 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_SINT32 : return -1; 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_SINT64 : return -1; 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_FIXED32 : return WireFormatLite::kFixed32Size; 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_FIXED64 : return WireFormatLite::kFixed64Size; 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_SFIXED32: return WireFormatLite::kSFixed32Size; 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_SFIXED64: return WireFormatLite::kSFixed64Size; 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_FLOAT : return WireFormatLite::kFloatSize; 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_DOUBLE : return WireFormatLite::kDoubleSize; 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_BOOL : return WireFormatLite::kBoolSize; 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_ENUM : return -1; 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_STRING : return -1; 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_BYTES : return -1; 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_GROUP : return -1; 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville case FieldDescriptor::TYPE_MESSAGE : return -1; 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // No default because we want the compiler to complain if any new 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // types are added. 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GOOGLE_LOG(FATAL) << "Can't get here."; 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return -1; 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid SetPrimitiveVariables(const FieldDescriptor* descriptor, 83a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson map<string, string>* variables, 84a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const Options& options) { 85a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetCommonFieldVariables(descriptor, variables, options); 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["type"] = PrimitiveTypeName(descriptor->cpp_type()); 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["default"] = DefaultValue(descriptor); 88d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (*variables)["tag"] = SimpleItoa(internal::WireFormat::MakeTag(descriptor)); 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int fixed_size = FixedSize(descriptor->type()); 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (fixed_size != -1) { 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["fixed_size"] = SimpleItoa(fixed_size); 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 93d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (*variables)["wire_format_field_type"] = 94d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "::google::protobuf::internal::WireFormatLite::" + FieldDescriptorProto_Type_Name( 95d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville static_cast<FieldDescriptorProto_Type>(descriptor->type())); 96a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson (*variables)["full_name"] = descriptor->full_name(); 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavillePrimitiveFieldGenerator:: 104a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonPrimitiveFieldGenerator(const FieldDescriptor* descriptor, 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const Options& options) 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville : descriptor_(descriptor) { 107a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetPrimitiveVariables(descriptor, &variables_, options); 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavillePrimitiveFieldGenerator::~PrimitiveFieldGenerator() {} 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGeneratePrivateMembers(io::Printer* printer) const { 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$type$ $name$_;\n"); 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateAccessorDeclarations(io::Printer* printer) const { 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline $type$ $name$() const$deprecation$;\n" 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$($type$ value)$deprecation$;\n"); 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateInlineAccessorDefinitions(io::Printer* printer) const { 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline $type$ $classname$::$name$() const {\n" 128a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_get:$full_name$)\n" 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return $name$_;\n" 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::set_$name$($type$ value) {\n" 132a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " set_has_$name$();\n" 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_ = value;\n" 134a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_set:$full_name$)\n" 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateClearingCode(io::Printer* printer) const { 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_ = $default$;\n"); 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "set_$name$(from.$name$());\n"); 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSwappingCode(io::Printer* printer) const { 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "std::swap($name$_, other->$name$_);\n"); 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateConstructorCode(io::Printer* printer) const { 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_ = $default$;\n"); 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergeFromCodedStream(io::Printer* printer) const { 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 161d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" 162d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " $type$, $wire_format_field_type$>(\n" 163d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " input, &$name$_)));\n" 164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "set_has_$name$();\n"); 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizes(io::Printer* printer) const { 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormatLite::Write$declared_type$(" 171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$number$, this->$name$(), output);\n"); 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "target = ::google::protobuf::internal::WireFormatLite::Write$declared_type$ToArray(" 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$number$, this->$name$(), target);\n"); 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid PrimitiveFieldGenerator:: 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateByteSize(io::Printer* printer) const { 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int fixed_size = FixedSize(descriptor_->type()); 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (fixed_size == -1) { 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "total_size += $tag_size$ +\n" 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::$declared_type$Size(\n" 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$());\n"); 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "total_size += $tag_size$ + $fixed_size$;\n"); 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonPrimitiveOneofFieldGenerator:: 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonPrimitiveOneofFieldGenerator(const FieldDescriptor* descriptor, 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const Options& options) 200a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson : PrimitiveFieldGenerator(descriptor, options) { 201a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetCommonOneofFieldVariables(descriptor, &variables_); 202a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonPrimitiveOneofFieldGenerator::~PrimitiveOneofFieldGenerator() {} 205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid PrimitiveOneofFieldGenerator:: 207a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateInlineAccessorDefinitions(io::Printer* printer) const { 208a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "inline $type$ $classname$::$name$() const {\n" 210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if (has_$name$()) {\n" 211a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $oneof_prefix$$name$_;\n" 212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 213a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " return $default$;\n" 214a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n" 215a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "inline void $classname$::set_$name$($type$ value) {\n" 216a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " if (!has_$name$()) {\n" 217a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " clear_$oneof_name$();\n" 218a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " set_has_$name$();\n" 219a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " }\n" 220a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $oneof_prefix$$name$_ = value;\n" 221a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "}\n"); 222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 223a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid PrimitiveOneofFieldGenerator:: 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateClearingCode(io::Printer* printer) const { 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, "$oneof_prefix$$name$_ = $default$;\n"); 227a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid PrimitiveOneofFieldGenerator:: 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateSwappingCode(io::Printer* printer) const { 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Don't print any swapping code. Swapping the union will swap this field. 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 233a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 234a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid PrimitiveOneofFieldGenerator:: 235a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateConstructorCode(io::Printer* printer) const { 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print( 237a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson variables_, 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $classname$_default_oneof_instance_->$name$_ = $default$;\n"); 239a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid PrimitiveOneofFieldGenerator:: 242a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonGenerateMergeFromCodedStream(io::Printer* printer) const { 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson printer->Print(variables_, 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "clear_$oneof_name$();\n" 245a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<\n" 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " $type$, $wire_format_field_type$>(\n" 247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " input, &$oneof_prefix$$name$_)));\n" 248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "set_has_$name$();\n"); 249a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 250a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// =================================================================== 252a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleRepeatedPrimitiveFieldGenerator:: 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonRepeatedPrimitiveFieldGenerator(const FieldDescriptor* descriptor, 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const Options& options) 256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville : descriptor_(descriptor) { 257a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetPrimitiveVariables(descriptor, &variables_, options); 258d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 259d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (descriptor->options().packed()) { 260d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville variables_["packed_reader"] = "ReadPackedPrimitive"; 261d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville variables_["repeated_reader"] = "ReadRepeatedPrimitiveNoInline"; 262d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } else { 263d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville variables_["packed_reader"] = "ReadPackedPrimitiveNoInline"; 264d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville variables_["repeated_reader"] = "ReadRepeatedPrimitive"; 265d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleRepeatedPrimitiveFieldGenerator::~RepeatedPrimitiveFieldGenerator() {} 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGeneratePrivateMembers(io::Printer* printer) const { 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::RepeatedField< $type$ > $name$_;\n"); 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->options().packed() && HasGeneratedMethods(descriptor_->file())) { 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "mutable int _$name$_cached_byte_size_;\n"); 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateAccessorDeclarations(io::Printer* printer) const { 282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline $type$ $name$(int index) const$deprecation$;\n" 284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$(int index, $type$ value)$deprecation$;\n" 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void add_$name$($type$ value)$deprecation$;\n"); 286d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 287d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline const ::google::protobuf::RepeatedField< $type$ >&\n" 288d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " $name$() const$deprecation$;\n" 289d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline ::google::protobuf::RepeatedField< $type$ >*\n" 290d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " mutable_$name$()$deprecation$;\n"); 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateInlineAccessorDefinitions(io::Printer* printer) const { 295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline $type$ $classname$::$name$(int index) const {\n" 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_get:$full_name$)\n" 298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return $name$_.Get(index);\n" 299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::set_$name$(int index, $type$ value) {\n" 301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Set(index, value);\n" 302a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_set:$full_name$)\n" 303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::add_$name$($type$ value) {\n" 305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Add(value);\n" 306a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_add:$full_name$)\n" 307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 308d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 309d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline const ::google::protobuf::RepeatedField< $type$ >&\n" 310d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "$classname$::$name$() const {\n" 311a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_list:$full_name$)\n" 312d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " return $name$_;\n" 313d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "}\n" 314d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline ::google::protobuf::RepeatedField< $type$ >*\n" 315d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "$classname$::mutable_$name$() {\n" 316a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson " // @@protoc_insertion_point(field_mutable_list:$full_name$)\n" 317d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " return &$name$_;\n" 318d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "}\n"); 319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateClearingCode(io::Printer* printer) const { 323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_.Clear();\n"); 324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n"); 329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSwappingCode(io::Printer* printer) const { 333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_.Swap(&other->$name$_);\n"); 334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateConstructorCode(io::Printer* printer) const { 338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Not needed for repeated fields. 339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergeFromCodedStream(io::Printer* printer) const { 343d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 344d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "DO_((::google::protobuf::internal::WireFormatLite::$repeated_reader$<\n" 345d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " $type$, $wire_format_field_type$>(\n" 346d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " $tag_size$, $tag$, input, this->mutable_$name$())));\n"); 347d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 348d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 349d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillevoid RepeatedPrimitiveFieldGenerator:: 350d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleGenerateMergeFromCodedStreamWithPacking(io::Printer* printer) const { 351d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 352d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "DO_((::google::protobuf::internal::WireFormatLite::$packed_reader$<\n" 353d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " $type$, $wire_format_field_type$>(\n" 354d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " input, this->mutable_$name$())));\n"); 355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizes(io::Printer* printer) const { 359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->options().packed()) { 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Write the tag and the size. 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (this->$name$_size() > 0) {\n" 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::WriteTag(" 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$number$, " 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, " 366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "output);\n" 367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " output->WriteVarint32(_$name$_cached_byte_size_);\n" 368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "for (int i = 0; i < this->$name$_size(); i++) {\n"); 372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->options().packed()) { 373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::Write$declared_type$NoTag(\n" 375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$(i), output);\n"); 376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::Write$declared_type$(\n" 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $number$, this->$name$(i), output);\n"); 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print("}\n"); 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->options().packed()) { 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Write the tag and the size. 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (this->$name$_size() > 0) {\n" 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(\n" 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $number$,\n" 392fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,\n" 393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " target);\n" 394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(\n" 395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " _$name$_cached_byte_size_, target);\n" 396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "for (int i = 0; i < this->$name$_size(); i++) {\n"); 400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->options().packed()) { 401fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " target = ::google::protobuf::internal::WireFormatLite::\n" 403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " Write$declared_type$NoTagToArray(this->$name$(i), target);\n"); 404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " target = ::google::protobuf::internal::WireFormatLite::\n" 407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " Write$declared_type$ToArray($number$, this->$name$(i), target);\n"); 408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print("}\n"); 410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedPrimitiveFieldGenerator:: 413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateByteSize(io::Printer* printer) const { 414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "{\n" 416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " int data_size = 0;\n"); 417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Indent(); 418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int fixed_size = FixedSize(descriptor_->type()); 419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (fixed_size == -1) { 420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 421fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "for (int i = 0; i < this->$name$_size(); i++) {\n" 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " data_size += ::google::protobuf::internal::WireFormatLite::\n" 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $declared_type$Size(this->$name$(i));\n" 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "data_size = $fixed_size$ * this->$name$_size();\n"); 428fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 429fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 430fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->options().packed()) { 431fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 432fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if (data_size > 0) {\n" 433fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " total_size += $tag_size$ +\n" 434fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::Int32Size(data_size);\n" 435fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 436a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();\n" 437fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "_$name$_cached_byte_size_ = data_size;\n" 438a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "GOOGLE_SAFE_CONCURRENT_WRITES_END();\n" 439fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "total_size += data_size;\n"); 440fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 441fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "total_size += $tag_size$ * this->$name$_size() + data_size;\n"); 443fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 444fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Outdent(); 445fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print("}\n"); 446fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 447fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 448fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace cpp 449fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace compiler 450fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 451fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 452