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// wink@google.com (Wink Saville) (refactored from wire_format.h) 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Based on original Protocol Buffers design by 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Sanjay Ghemawat, Jeff Dean, and others. 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <string> 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/common.h> 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/message_lite.h> 42d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#include <google/protobuf/repeated_field.h> 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/wire_format_lite.h> 44d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#include <google/protobuf/generated_message_util.h> 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/io/coded_stream.h> 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace google { 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace internal { 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 52d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville// Implementation details of ReadPrimitive. 53d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 54d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 55d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int32, WireFormatLite::TYPE_INT32>( 56d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 57d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int32* value) { 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 temp; 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&temp)) return false; 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = static_cast<int32>(temp); 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 63d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 64d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int64, WireFormatLite::TYPE_INT64>( 65d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 66d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int64* value) { 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint64 temp; 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint64(&temp)) return false; 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = static_cast<int64>(temp); 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 72d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 73d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<uint32, WireFormatLite::TYPE_UINT32>( 74d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 75d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32* value) { 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return input->ReadVarint32(value); 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 78d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 79d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<uint64, WireFormatLite::TYPE_UINT64>( 80d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 81d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint64* value) { 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return input->ReadVarint64(value); 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int32, WireFormatLite::TYPE_SINT32>( 86d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 87d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int32* value) { 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 temp; 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&temp)) return false; 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = ZigZagDecode32(temp); 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 93d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 94d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int64, WireFormatLite::TYPE_SINT64>( 95d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 96d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int64* value) { 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint64 temp; 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint64(&temp)) return false; 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = ZigZagDecode64(temp); 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 102d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 103d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<uint32, WireFormatLite::TYPE_FIXED32>( 104d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 105d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32* value) { 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return input->ReadLittleEndian32(value); 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 108d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 109d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<uint64, WireFormatLite::TYPE_FIXED64>( 110d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 111d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint64* value) { 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return input->ReadLittleEndian64(value); 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 114d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 115d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int32, WireFormatLite::TYPE_SFIXED32>( 116d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 117d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int32* value) { 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 temp; 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadLittleEndian32(&temp)) return false; 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = static_cast<int32>(temp); 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 123d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 124d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int64, WireFormatLite::TYPE_SFIXED64>( 125d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 126d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int64* value) { 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint64 temp; 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadLittleEndian64(&temp)) return false; 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = static_cast<int64>(temp); 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 132d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 133d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<float, WireFormatLite::TYPE_FLOAT>( 134d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 135d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville float* value) { 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 temp; 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadLittleEndian32(&temp)) return false; 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = DecodeFloat(temp); 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 141d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 142d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<double, WireFormatLite::TYPE_DOUBLE>( 143d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 144d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville double* value) { 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint64 temp; 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadLittleEndian64(&temp)) return false; 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = DecodeDouble(temp); 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 150d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 151d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<bool, WireFormatLite::TYPE_BOOL>( 152d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 153d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bool* value) { 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 temp; 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&temp)) return false; 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = temp != 0; 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 159d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 160d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPrimitive<int, WireFormatLite::TYPE_ENUM>( 161d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 162d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int* value) { 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 temp; 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&temp)) return false; 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville *value = static_cast<int>(temp); 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 169d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 170d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline const uint8* WireFormatLite::ReadPrimitiveFromArray< 171d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32, WireFormatLite::TYPE_FIXED32>( 172d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer, 173d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32* value) { 174d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return io::CodedInputStream::ReadLittleEndian32FromArray(buffer, value); 175d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 176d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 177d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline const uint8* WireFormatLite::ReadPrimitiveFromArray< 178d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint64, WireFormatLite::TYPE_FIXED64>( 179d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer, 180d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint64* value) { 181d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return io::CodedInputStream::ReadLittleEndian64FromArray(buffer, value); 182d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 183d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 184d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline const uint8* WireFormatLite::ReadPrimitiveFromArray< 185d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int32, WireFormatLite::TYPE_SFIXED32>( 186d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer, 187d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int32* value) { 188d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32 temp; 189d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville buffer = io::CodedInputStream::ReadLittleEndian32FromArray(buffer, &temp); 190d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville *value = static_cast<int32>(temp); 191d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return buffer; 192d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 193d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 194d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline const uint8* WireFormatLite::ReadPrimitiveFromArray< 195d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int64, WireFormatLite::TYPE_SFIXED64>( 196d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer, 197d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int64* value) { 198d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint64 temp; 199d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville buffer = io::CodedInputStream::ReadLittleEndian64FromArray(buffer, &temp); 200d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville *value = static_cast<int64>(temp); 201d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return buffer; 202d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 203d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 204d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline const uint8* WireFormatLite::ReadPrimitiveFromArray< 205d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville float, WireFormatLite::TYPE_FLOAT>( 206d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer, 207d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville float* value) { 208d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32 temp; 209d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville buffer = io::CodedInputStream::ReadLittleEndian32FromArray(buffer, &temp); 210d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville *value = DecodeFloat(temp); 211d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return buffer; 212d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 213d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> 214d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline const uint8* WireFormatLite::ReadPrimitiveFromArray< 215d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville double, WireFormatLite::TYPE_DOUBLE>( 216d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer, 217d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville double* value) { 218d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint64 temp; 219d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville buffer = io::CodedInputStream::ReadLittleEndian64FromArray(buffer, &temp); 220d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville *value = DecodeDouble(temp); 221d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return buffer; 222d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 223d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 224d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <typename CType, enum WireFormatLite::FieldType DeclaredType> 225cd0ff6eb0b178cc1c3ed4300cd4066ea3a5c180bKristian Monseninline bool WireFormatLite::ReadRepeatedPrimitive(int, // tag_size, unused 226d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32 tag, 227d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 228d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville RepeatedField<CType>* values) { 229d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville CType value; 230d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; 231d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville values->Add(value); 232d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int elements_already_reserved = values->Capacity() - values->size(); 233d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville while (elements_already_reserved > 0 && input->ExpectTag(tag)) { 234d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; 235d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville values->AddAlreadyReserved(value); 236d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville elements_already_reserved--; 237d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 238d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return true; 239d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 240d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 241d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <typename CType, enum WireFormatLite::FieldType DeclaredType> 242d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadRepeatedFixedSizePrimitive( 243d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int tag_size, 244d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32 tag, 245d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 246d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville RepeatedField<CType>* values) { 247d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville GOOGLE_DCHECK_EQ(UInt32Size(tag), tag_size); 248d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville CType value; 249d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (!ReadPrimitive<CType, DeclaredType>(input, &value)) 250d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return false; 251d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville values->Add(value); 252d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 253d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // For fixed size values, repeated values can be read more quickly by 254d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // reading directly from a raw array. 255d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // 256d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // We can get a tight loop by only reading as many elements as can be 257d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // added to the RepeatedField without having to do any resizing. Additionally, 258d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // we only try to read as many elements as are available from the current 259d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // buffer space. Doing so avoids having to perform boundary checks when 260d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // reading the value: the maximum number of elements that can be read is 261d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // known outside of the loop. 262d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const void* void_pointer; 263d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int size; 264d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville input->GetDirectBufferPointerInline(&void_pointer, &size); 265d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (size > 0) { 266d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const uint8* buffer = reinterpret_cast<const uint8*>(void_pointer); 267d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // The number of bytes each type occupies on the wire. 268d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const int per_value_size = tag_size + sizeof(value); 269d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 270d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int elements_available = min(values->Capacity() - values->size(), 271d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville size / per_value_size); 272d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int num_read = 0; 273d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville while (num_read < elements_available && 274d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (buffer = io::CodedInputStream::ExpectTagFromArray( 275d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville buffer, tag)) != NULL) { 276d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville buffer = ReadPrimitiveFromArray<CType, DeclaredType>(buffer, &value); 277d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville values->AddAlreadyReserved(value); 278d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ++num_read; 279d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 280d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const int read_bytes = num_read * per_value_size; 281d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (read_bytes > 0) { 282d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville input->Skip(read_bytes); 283d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 284d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 287d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 288d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville// Specializations of ReadRepeatedPrimitive for the fixed size types, which use 289d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville// the optimized code path. 290d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#define READ_REPEATED_FIXED_SIZE_PRIMITIVE(CPPTYPE, DECLARED_TYPE) \ 291d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <> \ 292d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadRepeatedPrimitive< \ 293d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ 294d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int tag_size, \ 295d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32 tag, \ 296d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, \ 297d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville RepeatedField<CPPTYPE>* values) { \ 298d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return ReadRepeatedFixedSizePrimitive< \ 299d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ 300d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville tag_size, tag, input, values); \ 301d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 302d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 303d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleREAD_REPEATED_FIXED_SIZE_PRIMITIVE(uint32, TYPE_FIXED32); 304d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleREAD_REPEATED_FIXED_SIZE_PRIMITIVE(uint64, TYPE_FIXED64); 305d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleREAD_REPEATED_FIXED_SIZE_PRIMITIVE(int32, TYPE_SFIXED32); 306d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleREAD_REPEATED_FIXED_SIZE_PRIMITIVE(int64, TYPE_SFIXED64); 307d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleREAD_REPEATED_FIXED_SIZE_PRIMITIVE(float, TYPE_FLOAT); 308d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleREAD_REPEATED_FIXED_SIZE_PRIMITIVE(double, TYPE_DOUBLE); 309d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 310d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#undef READ_REPEATED_FIXED_SIZE_PRIMITIVE 311d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 312d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <typename CType, enum WireFormatLite::FieldType DeclaredType> 313d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillebool WireFormatLite::ReadRepeatedPrimitiveNoInline( 314d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville int tag_size, 315d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville uint32 tag, 316d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream* input, 317d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville RepeatedField<CType>* value) { 318d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return ReadRepeatedPrimitive<CType, DeclaredType>( 319d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville tag_size, tag, input, value); 320d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 321d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 322d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <typename CType, enum WireFormatLite::FieldType DeclaredType> 323d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleinline bool WireFormatLite::ReadPackedPrimitive(io::CodedInputStream* input, 324d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville RepeatedField<CType>* values) { 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 length; 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&length)) return false; 327d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville io::CodedInputStream::Limit limit = input->PushLimit(length); 328d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville while (input->BytesUntilLimit() > 0) { 329d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville CType value; 330d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false; 331d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville values->Add(value); 332d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 333d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville input->PopLimit(limit); 334d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return true; 335d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville} 336d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 337d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilletemplate <typename CType, enum WireFormatLite::FieldType DeclaredType> 338d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillebool WireFormatLite::ReadPackedPrimitiveNoInline(io::CodedInputStream* input, 339d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville RepeatedField<CType>* values) { 340d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return ReadPackedPrimitive<CType, DeclaredType>(input, values); 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline bool WireFormatLite::ReadGroup(int field_number, 345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedInputStream* input, 346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MessageLite* value) { 347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->IncrementRecursionDepth()) return false; 348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!value->MergePartialFromCodedStream(input)) return false; 349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input->DecrementRecursionDepth(); 350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Make sure the last thing read was an end tag for this group. 351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->LastTagWas(MakeTag(field_number, WIRETYPE_END_GROUP))) { 352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return false; 353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline bool WireFormatLite::ReadMessage(io::CodedInputStream* input, 357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MessageLite* value) { 358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 length; 359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&length)) return false; 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->IncrementRecursionDepth()) return false; 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedInputStream::Limit limit = input->PushLimit(length); 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!value->MergePartialFromCodedStream(input)) return false; 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Make sure that parsing stopped when the limit was hit, not at an endgroup 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // tag. 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ConsumedEntireMessage()) return false; 366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input->PopLimit(limit); 367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input->DecrementRecursionDepth(); 368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline bool WireFormatLite::ReadGroupNoVirtual(int field_number, 373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedInputStream* input, 374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MessageType* value) { 375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->IncrementRecursionDepth()) return false; 376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!value->MessageType::MergePartialFromCodedStream(input)) return false; 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input->DecrementRecursionDepth(); 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Make sure the last thing read was an end tag for this group. 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->LastTagWas(MakeTag(field_number, WIRETYPE_END_GROUP))) { 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return false; 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline bool WireFormatLite::ReadMessageNoVirtual(io::CodedInputStream* input, 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MessageType* value) { 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 length; 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ReadVarint32(&length)) return false; 389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->IncrementRecursionDepth()) return false; 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedInputStream::Limit limit = input->PushLimit(length); 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!value->MessageType::MergePartialFromCodedStream(input)) return false; 392fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Make sure that parsing stopped when the limit was hit, not at an endgroup 393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // tag. 394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (!input->ConsumedEntireMessage()) return false; 395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input->PopLimit(limit); 396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input->DecrementRecursionDepth(); 397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return true; 398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 401fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteTag(int field_number, WireType type, 403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteTag(MakeTag(field_number, type)); 405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteInt32NoTag(int32 value, 408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint32SignExtended(value); 410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteInt64NoTag(int64 value, 412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint64(static_cast<uint64>(value)); 414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteUInt32NoTag(uint32 value, 416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint32(value); 418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteUInt64NoTag(uint64 value, 420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 421fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint64(value); 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteSInt32NoTag(int32 value, 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint32(ZigZagEncode32(value)); 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteSInt64NoTag(int64 value, 428fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 429fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint64(ZigZagEncode64(value)); 430fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 431fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteFixed32NoTag(uint32 value, 432fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 433fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteLittleEndian32(value); 434fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 435fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteFixed64NoTag(uint64 value, 436fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 437fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteLittleEndian64(value); 438fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 439fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteSFixed32NoTag(int32 value, 440fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 441fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteLittleEndian32(static_cast<uint32>(value)); 442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 443fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteSFixed64NoTag(int64 value, 444fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 445fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteLittleEndian64(static_cast<uint64>(value)); 446fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 447fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteFloatNoTag(float value, 448fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 449fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteLittleEndian32(EncodeFloat(value)); 450fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 451fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteDoubleNoTag(double value, 452fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 453fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteLittleEndian64(EncodeDouble(value)); 454fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 455fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteBoolNoTag(bool value, 456fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 457fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint32(value ? 1 : 0); 458fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 459fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteEnumNoTag(int value, 460fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 461fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint32SignExtended(value); 462fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 463fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 464fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 465fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteGroupNoVirtual(int field_number, 466fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const MessageType& value, 467fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 468fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville WriteTag(field_number, WIRETYPE_START_GROUP, output); 469fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.MessageType::SerializeWithCachedSizes(output); 470fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville WriteTag(field_number, WIRETYPE_END_GROUP, output); 471fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 472fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 473fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline void WireFormatLite::WriteMessageNoVirtual(int field_number, 474fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const MessageType& value, 475fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville io::CodedOutputStream* output) { 476fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville WriteTag(field_number, WIRETYPE_LENGTH_DELIMITED, output); 477fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output->WriteVarint32(value.MessageType::GetCachedSize()); 478fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.MessageType::SerializeWithCachedSizes(output); 479fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 480fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 481fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 482fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 483fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteTagToArray(int field_number, 484fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville WireType type, 485fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 486fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteTagToArray(MakeTag(field_number, type), 487fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target); 488fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 489fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 490fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteInt32NoTagToArray(int32 value, 491fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 492fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); 493fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 494fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteInt64NoTagToArray(int64 value, 495fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 496fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint64ToArray( 497fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static_cast<uint64>(value), target); 498fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 499fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteUInt32NoTagToArray(uint32 value, 500fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 501fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint32ToArray(value, target); 502fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 503fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteUInt64NoTagToArray(uint64 value, 504fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 505fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint64ToArray(value, target); 506fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 507fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSInt32NoTagToArray(int32 value, 508fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 509fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint32ToArray(ZigZagEncode32(value), 510fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target); 511fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 512fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSInt64NoTagToArray(int64 value, 513fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 514fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint64ToArray(ZigZagEncode64(value), 515fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target); 516fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 517fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteFixed32NoTagToArray(uint32 value, 518fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 519fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteLittleEndian32ToArray(value, target); 520fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 521fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteFixed64NoTagToArray(uint64 value, 522fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 523fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteLittleEndian64ToArray(value, target); 524fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 525fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSFixed32NoTagToArray(int32 value, 526fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 527fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteLittleEndian32ToArray( 528fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static_cast<uint32>(value), target); 529fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 530fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSFixed64NoTagToArray(int64 value, 531fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 532fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteLittleEndian64ToArray( 533fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static_cast<uint64>(value), target); 534fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 535fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteFloatNoTagToArray(float value, 536fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 537fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteLittleEndian32ToArray(EncodeFloat(value), 538fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target); 539fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 540fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteDoubleNoTagToArray(double value, 541fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 542fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteLittleEndian64ToArray(EncodeDouble(value), 543fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target); 544fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 545fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteBoolNoTagToArray(bool value, 546fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 547fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint32ToArray(value ? 1 : 0, target); 548fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 549fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteEnumNoTagToArray(int value, 550fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 551fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); 552fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 553fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 554fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteInt32ToArray(int field_number, 555fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int32 value, 556fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 557fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 558fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteInt32NoTagToArray(value, target); 559fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 560fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteInt64ToArray(int field_number, 561fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int64 value, 562fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 563fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 564fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteInt64NoTagToArray(value, target); 565fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 566fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteUInt32ToArray(int field_number, 567fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 value, 568fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 569fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 570fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteUInt32NoTagToArray(value, target); 571fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 572fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteUInt64ToArray(int field_number, 573fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint64 value, 574fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 575fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 576fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteUInt64NoTagToArray(value, target); 577fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 578fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSInt32ToArray(int field_number, 579fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int32 value, 580fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 581fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 582fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteSInt32NoTagToArray(value, target); 583fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 584fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSInt64ToArray(int field_number, 585fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int64 value, 586fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 587fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 588fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteSInt64NoTagToArray(value, target); 589fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 590fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteFixed32ToArray(int field_number, 591fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint32 value, 592fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 593fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); 594fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteFixed32NoTagToArray(value, target); 595fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 596fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteFixed64ToArray(int field_number, 597fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint64 value, 598fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 599fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); 600fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteFixed64NoTagToArray(value, target); 601fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 602fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSFixed32ToArray(int field_number, 603fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int32 value, 604fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 605fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); 606fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteSFixed32NoTagToArray(value, target); 607fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 608fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteSFixed64ToArray(int field_number, 609fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int64 value, 610fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 611fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); 612fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteSFixed64NoTagToArray(value, target); 613fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 614fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteFloatToArray(int field_number, 615fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville float value, 616fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 617fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); 618fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteFloatNoTagToArray(value, target); 619fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 620fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteDoubleToArray(int field_number, 621fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville double value, 622fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 623fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); 624fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteDoubleNoTagToArray(value, target); 625fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 626fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteBoolToArray(int field_number, 627fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville bool value, 628fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 629fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 630fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteBoolNoTagToArray(value, target); 631fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 632fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteEnumToArray(int field_number, 633fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int value, 634fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 635fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); 636fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteEnumNoTagToArray(value, target); 637fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 638fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 639fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteStringToArray(int field_number, 640fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const string& value, 641fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 642fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // String is for UTF-8 text only 643fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // WARNING: In wire_format.cc, both strings and bytes are handled by 644fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // WriteString() to avoid code duplication. If the implementations become 645fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // different, you will need to update that usage. 646fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); 647fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = io::CodedOutputStream::WriteVarint32ToArray(value.size(), target); 648fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteStringToArray(value, target); 649fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 650fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteBytesToArray(int field_number, 651fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const string& value, 652fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 653fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); 654fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = io::CodedOutputStream::WriteVarint32ToArray(value.size(), target); 655fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::WriteStringToArray(value, target); 656fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 657fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 658fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 659fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteGroupToArray(int field_number, 660fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const MessageLite& value, 661fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 662fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_START_GROUP, target); 663fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = value.SerializeWithCachedSizesToArray(target); 664fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteTagToArray(field_number, WIRETYPE_END_GROUP, target); 665fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 666fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteMessageToArray(int field_number, 667fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const MessageLite& value, 668fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uint8* target) { 669fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); 670fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = io::CodedOutputStream::WriteVarint32ToArray( 671fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.GetCachedSize(), target); 672fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return value.SerializeWithCachedSizesToArray(target); 673fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 674fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 675fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 676fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteGroupNoVirtualToArray( 677fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int field_number, const MessageType& value, uint8* target) { 678fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_START_GROUP, target); 679fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = value.MessageType::SerializeWithCachedSizesToArray(target); 680fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return WriteTagToArray(field_number, WIRETYPE_END_GROUP, target); 681fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 682fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 683fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline uint8* WireFormatLite::WriteMessageNoVirtualToArray( 684fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int field_number, const MessageType& value, uint8* target) { 685fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); 686fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville target = io::CodedOutputStream::WriteVarint32ToArray( 687fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.MessageType::GetCachedSize(), target); 688fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return value.MessageType::SerializeWithCachedSizesToArray(target); 689fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 690fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 691fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// =================================================================== 692fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 693fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::Int32Size(int32 value) { 694fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32SignExtended(value); 695fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 696fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::Int64Size(int64 value) { 697fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize64(static_cast<uint64>(value)); 698fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 699fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::UInt32Size(uint32 value) { 700fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32(value); 701fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 702fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::UInt64Size(uint64 value) { 703fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize64(value); 704fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 705fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::SInt32Size(int32 value) { 706fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32(ZigZagEncode32(value)); 707fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 708fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::SInt64Size(int64 value) { 709fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize64(ZigZagEncode64(value)); 710fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 711fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::EnumSize(int value) { 712fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32SignExtended(value); 713fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 714fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 715fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::StringSize(const string& value) { 716fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32(value.size()) + 717fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.size(); 718fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 719fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::BytesSize(const string& value) { 720fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32(value.size()) + 721fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville value.size(); 722fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 723fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 724fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 725fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::GroupSize(const MessageLite& value) { 726fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return value.ByteSize(); 727fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 728fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::MessageSize(const MessageLite& value) { 729fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int size = value.ByteSize(); 730fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32(size) + size; 731fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 732fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 733fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 734fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::GroupSizeNoVirtual(const MessageType& value) { 735fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return value.MessageType::ByteSize(); 736fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 737fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename MessageType> 738fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinline int WireFormatLite::MessageSizeNoVirtual(const MessageType& value) { 739fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int size = value.MessageType::ByteSize(); 740fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return io::CodedOutputStream::VarintSize32(size) + size; 741fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 742fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 743fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace internal 744fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 745fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 746fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 747fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif // GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ 748