1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// http://code.google.com/p/protobuf/ 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_string_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/descriptor.pb.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 Savillenamespace { 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid SetStringVariables(const FieldDescriptor* descriptor, 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville map<string, string>* variables) { 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville SetCommonFieldVariables(descriptor, variables); 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["default"] = 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "\"" + CEscape(descriptor->default_value_string()) + "\""; 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (*variables)["pointer_type"] = 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char"; 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleStringFieldGenerator:: 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleStringFieldGenerator(const FieldDescriptor* descriptor) 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville : descriptor_(descriptor) { 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville SetStringVariables(descriptor, &variables_); 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleStringFieldGenerator::~StringFieldGenerator() {} 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGeneratePrivateMembers(io::Printer* printer) const { 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::std::string* $name$_;\n" 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "static const ::std::string _default_$name$_;\n"); 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateAccessorDeclarations(io::Printer* printer) const { 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // If we're using StringFieldGenerator for a field with a ctype, it's 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // because that ctype isn't actually implemented. In particular, this is 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // true of ctype=CORD and ctype=STRING_PIECE in the open source release. 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // We aren't releasing Cord because it has too many Google-specific 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // dependencies and we aren't releasing StringPiece because it's hardly 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // useful outside of Google and because it would get confusing to have 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // multiple instances of the StringPiece class in different libraries (PCRE 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // already includes it for their C++ bindings, which came from Google). 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // In any case, we make all the accessors private while still actually 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // using a string to represent the field internally. This way, we can 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // guarantee that if we do ever implement the ctype, it won't break any 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // existing users who might be -- for whatever reason -- already using .proto 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // files that applied the ctype. The field can still be accessed via the 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // reflection interface since the reflection interface is independent of 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // the string's underlying representation. 94d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (descriptor_->options().ctype() != FieldOptions::STRING) { 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Outdent(); 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print( 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " private:\n" 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " // Hidden due to unknown ctype option.\n"); 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Indent(); 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline const ::std::string& $name$() const$deprecation$;\n" 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$(const ::std::string& value)$deprecation$;\n" 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$(const char* value)$deprecation$;\n" 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$(const $pointer_type$* value, size_t size)" 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$deprecation$;\n" 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline ::std::string* mutable_$name$()$deprecation$;\n"); 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 110d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (descriptor_->options().ctype() != FieldOptions::STRING) { 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Outdent(); 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(" public:\n"); 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Indent(); 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateInlineAccessorDefinitions(io::Printer* printer) const { 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline const ::std::string& $classname$::$name$() const {\n" 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return *$name$_;\n" 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::set_$name$(const ::std::string& value) {\n" 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " _set_bit($index$);\n" 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if ($name$_ == &_default_$name$_) {\n" 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_ = new ::std::string;\n" 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_->assign(value);\n" 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::set_$name$(const char* value) {\n" 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " _set_bit($index$);\n" 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if ($name$_ == &_default_$name$_) {\n" 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_ = new ::std::string;\n" 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_->assign(value);\n" 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline " 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "void $classname$::set_$name$(const $pointer_type$* value, size_t size) {\n" 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " _set_bit($index$);\n" 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if ($name$_ == &_default_$name$_) {\n" 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_ = new ::std::string;\n" 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_->assign(reinterpret_cast<const char*>(value), size);\n" 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline ::std::string* $classname$::mutable_$name$() {\n" 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " _set_bit($index$);\n" 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " if ($name$_ == &_default_$name$_) {\n"); 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->default_value_string().empty()) { 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_ = new ::std::string;\n"); 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_ = new ::std::string(_default_$name$_);\n"); 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " }\n" 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return $name$_;\n" 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateNonInlineAccessorDefinitions(io::Printer* printer) const { 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->default_value_string().empty()) { 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "const ::std::string $classname$::_default_$name$_;\n"); 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "const ::std::string $classname$::_default_$name$_($default$);\n"); 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateClearingCode(io::Printer* printer) const { 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (descriptor_->default_value_string().empty()) { 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if ($name$_ != &_default_$name$_) {\n" 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_->clear();\n" 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } else { 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if ($name$_ != &_default_$name$_) {\n" 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_->assign(_default_$name$_);\n" 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "set_$name$(from.$name$());\n"); 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSwappingCode(io::Printer* printer) const { 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "std::swap($name$_, other->$name$_);\n"); 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateConstructorCode(io::Printer* printer) const { 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$name$_ = const_cast< ::std::string*>(&_default_$name$_);\n"); 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateDestructorCode(io::Printer* printer) const { 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "if ($name$_ != &_default_$name$_) {\n" 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " delete $name$_;\n" 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergeFromCodedStream(io::Printer* printer) const { 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "DO_(::google::protobuf::internal::WireFormatLite::Read$declared_type$(\n" 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " input, this->mutable_$name$()));\n"); 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (HasUtf8Verification(descriptor_->file()) && 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_->type() == FieldDescriptor::TYPE_STRING) { 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormat::VerifyUTF8String(\n" 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$().data(), this->$name$().length(),\n" 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::PARSE);\n"); 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizes(io::Printer* printer) const { 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (HasUtf8Verification(descriptor_->file()) && 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_->type() == FieldDescriptor::TYPE_STRING) { 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormat::VerifyUTF8String(\n" 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$().data(), this->$name$().length(),\n" 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::SERIALIZE);\n"); 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormatLite::Write$declared_type$(\n" 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $number$, this->$name$(), output);\n"); 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (HasUtf8Verification(descriptor_->file()) && 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_->type() == FieldDescriptor::TYPE_STRING) { 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormat::VerifyUTF8String(\n" 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$().data(), this->$name$().length(),\n" 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::SERIALIZE);\n"); 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "target =\n" 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::Write$declared_type$ToArray(\n" 251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $number$, this->$name$(), target);\n"); 252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid StringFieldGenerator:: 255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateByteSize(io::Printer* printer) const { 256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "total_size += $tag_size$ +\n" 258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::$declared_type$Size(\n" 259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$());\n"); 260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleRepeatedStringFieldGenerator:: 265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleRepeatedStringFieldGenerator(const FieldDescriptor* descriptor) 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville : descriptor_(descriptor) { 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville SetStringVariables(descriptor, &variables_); 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleRepeatedStringFieldGenerator::~RepeatedStringFieldGenerator() {} 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGeneratePrivateMembers(io::Printer* printer) const { 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::RepeatedPtrField< ::std::string> $name$_;\n"); 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateAccessorDeclarations(io::Printer* printer) const { 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // See comment above about unknown ctypes. 281d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (descriptor_->options().ctype() != FieldOptions::STRING) { 282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Outdent(); 283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print( 284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " private:\n" 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " // Hidden due to unknown ctype option.\n"); 286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Indent(); 287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline const ::std::string& $name$(int index) const$deprecation$;\n" 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline ::std::string* mutable_$name$(int index)$deprecation$;\n" 292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$(int index, const ::std::string& value)$deprecation$;\n" 293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void set_$name$(int index, const char* value)$deprecation$;\n" 294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline " 295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "void set_$name$(int index, const $pointer_type$* value, size_t size)" 296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$deprecation$;\n" 297fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline ::std::string* add_$name$()$deprecation$;\n" 298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void add_$name$(const ::std::string& value)$deprecation$;\n" 299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void add_$name$(const char* value)$deprecation$;\n" 300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void add_$name$(const $pointer_type$* value, size_t size)" 301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$deprecation$;\n"); 302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 303d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 304d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline const ::google::protobuf::RepeatedPtrField< ::std::string>& $name$() const" 305d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "$deprecation$;\n" 306d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_$name$()" 307d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "$deprecation$;\n"); 308d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 309d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (descriptor_->options().ctype() != FieldOptions::STRING) { 310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Outdent(); 311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(" public:\n"); 312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Indent(); 313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateInlineAccessorDefinitions(io::Printer* printer) const { 318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline const ::std::string& $classname$::$name$(int index) const {\n" 320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return $name$_.Get(index);\n" 321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline ::std::string* $classname$::mutable_$name$(int index) {\n" 323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return $name$_.Mutable(index);\n" 324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::set_$name$(int index, const ::std::string& value) {\n" 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Mutable(index)->assign(value);\n" 327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::set_$name$(int index, const char* value) {\n" 329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Mutable(index)->assign(value);\n" 330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void " 332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$classname$::set_$name$" 333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "(int index, const $pointer_type$* value, size_t size) {\n" 334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Mutable(index)->assign(\n" 335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " reinterpret_cast<const char*>(value), size);\n" 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline ::std::string* $classname$::add_$name$() {\n" 338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " return $name$_.Add();\n" 339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::add_$name$(const ::std::string& value) {\n" 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Add()->assign(value);\n" 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void $classname$::add_$name$(const char* value) {\n" 344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Add()->assign(value);\n" 345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n" 346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "inline void " 347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "$classname$::add_$name$(const $pointer_type$* value, size_t size) {\n" 348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $name$_.Add()->assign(reinterpret_cast<const char*>(value), size);\n" 349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 350d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville printer->Print(variables_, 351d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline const ::google::protobuf::RepeatedPtrField< ::std::string>&\n" 352d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "$classname$::$name$() const {\n" 353d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " return $name$_;\n" 354d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "}\n" 355d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "inline ::google::protobuf::RepeatedPtrField< ::std::string>*\n" 356d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "$classname$::mutable_$name$() {\n" 357d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville " return &$name$_;\n" 358d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "}\n"); 359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateClearingCode(io::Printer* printer) const { 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_.Clear();\n"); 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergingCode(io::Printer* printer) const { 368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_.MergeFrom(from.$name$_);\n"); 369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSwappingCode(io::Printer* printer) const { 373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, "$name$_.Swap(&other->$name$_);\n"); 374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateConstructorCode(io::Printer* printer) const { 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Not needed for repeated fields. 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateMergeFromCodedStream(io::Printer* printer) const { 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "DO_(::google::protobuf::internal::WireFormatLite::Read$declared_type$(\n" 385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " input, this->add_$name$()));\n"); 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (HasUtf8Verification(descriptor_->file()) && 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_->type() == FieldDescriptor::TYPE_STRING) { 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormat::VerifyUTF8String(\n" 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$(0).data(), this->$name$(0).length(),\n" 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::PARSE);\n"); 392fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizes(io::Printer* printer) const { 397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "for (int i = 0; i < this->$name$_size(); i++) {\n"); 399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (HasUtf8Verification(descriptor_->file()) && 400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_->type() == FieldDescriptor::TYPE_STRING) { 401fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "::google::protobuf::internal::WireFormat::VerifyUTF8String(\n" 403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$(i).data(), this->$name$(i).length(),\n" 404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::SERIALIZE);\n"); 405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormatLite::Write$declared_type$(\n" 408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " $number$, this->$name$(i), output);\n" 409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { 414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "for (int i = 0; i < this->$name$_size(); i++) {\n"); 416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (HasUtf8Verification(descriptor_->file()) && 417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_->type() == FieldDescriptor::TYPE_STRING) { 418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::VerifyUTF8String(\n" 420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$(i).data(), this->$name$(i).length(),\n" 421fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " ::google::protobuf::internal::WireFormat::SERIALIZE);\n"); 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " target = ::google::protobuf::internal::WireFormatLite::\n" 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " Write$declared_type$ToArray($number$, this->$name$(i), target);\n" 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 428fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 429fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid RepeatedStringFieldGenerator:: 430fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGenerateByteSize(io::Printer* printer) const { 431fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printer->Print(variables_, 432fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "total_size += $tag_size$ * this->$name$_size();\n" 433fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "for (int i = 0; i < this->$name$_size(); i++) {\n" 434fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " total_size += ::google::protobuf::internal::WireFormatLite::$declared_type$Size(\n" 435fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville " this->$name$(i));\n" 436fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "}\n"); 437fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 438fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 439fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace cpp 440fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace compiler 441fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 443