1*1b3f573fSAndroid Build Coastguard Worker// Protocol Buffers - Google's data interchange format 2*1b3f573fSAndroid Build Coastguard Worker// Copyright 2008 Google Inc. All rights reserved. 3*1b3f573fSAndroid Build Coastguard Worker// https://developers.google.com/protocol-buffers/ 4*1b3f573fSAndroid Build Coastguard Worker// 5*1b3f573fSAndroid Build Coastguard Worker// Redistribution and use in source and binary forms, with or without 6*1b3f573fSAndroid Build Coastguard Worker// modification, are permitted provided that the following conditions are 7*1b3f573fSAndroid Build Coastguard Worker// met: 8*1b3f573fSAndroid Build Coastguard Worker// 9*1b3f573fSAndroid Build Coastguard Worker// * Redistributions of source code must retain the above copyright 10*1b3f573fSAndroid Build Coastguard Worker// notice, this list of conditions and the following disclaimer. 11*1b3f573fSAndroid Build Coastguard Worker// * Redistributions in binary form must reproduce the above 12*1b3f573fSAndroid Build Coastguard Worker// copyright notice, this list of conditions and the following disclaimer 13*1b3f573fSAndroid Build Coastguard Worker// in the documentation and/or other materials provided with the 14*1b3f573fSAndroid Build Coastguard Worker// distribution. 15*1b3f573fSAndroid Build Coastguard Worker// * Neither the name of Google Inc. nor the names of its 16*1b3f573fSAndroid Build Coastguard Worker// contributors may be used to endorse or promote products derived from 17*1b3f573fSAndroid Build Coastguard Worker// this software without specific prior written permission. 18*1b3f573fSAndroid Build Coastguard Worker// 19*1b3f573fSAndroid Build Coastguard Worker// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*1b3f573fSAndroid Build Coastguard Worker// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*1b3f573fSAndroid Build Coastguard Worker// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*1b3f573fSAndroid Build Coastguard Worker// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*1b3f573fSAndroid Build Coastguard Worker// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*1b3f573fSAndroid Build Coastguard Worker// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*1b3f573fSAndroid Build Coastguard Worker// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*1b3f573fSAndroid Build Coastguard Worker// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*1b3f573fSAndroid Build Coastguard Worker// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*1b3f573fSAndroid Build Coastguard Worker// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*1b3f573fSAndroid Build Coastguard Worker// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*1b3f573fSAndroid Build Coastguard Worker 31*1b3f573fSAndroid Build Coastguard Worker#import "GPBCodedOutputStream_PackagePrivate.h" 32*1b3f573fSAndroid Build Coastguard Worker 33*1b3f573fSAndroid Build Coastguard Worker#import <mach/vm_param.h> 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker#import "GPBArray.h" 36*1b3f573fSAndroid Build Coastguard Worker#import "GPBUnknownFieldSet_PackagePrivate.h" 37*1b3f573fSAndroid Build Coastguard Worker#import "GPBUtilities_PackagePrivate.h" 38*1b3f573fSAndroid Build Coastguard Worker 39*1b3f573fSAndroid Build Coastguard Worker// These values are the existing values so as not to break any code that might 40*1b3f573fSAndroid Build Coastguard Worker// have already been inspecting them when they weren't documented/exposed. 41*1b3f573fSAndroid Build Coastguard WorkerNSString *const GPBCodedOutputStreamException_OutOfSpace = @"OutOfSpace"; 42*1b3f573fSAndroid Build Coastguard WorkerNSString *const GPBCodedOutputStreamException_WriteFailed = @"WriteFailed"; 43*1b3f573fSAndroid Build Coastguard Worker 44*1b3f573fSAndroid Build Coastguard Worker// Structure for containing state of a GPBCodedInputStream. Brought out into 45*1b3f573fSAndroid Build Coastguard Worker// a struct so that we can inline several common functions instead of dealing 46*1b3f573fSAndroid Build Coastguard Worker// with overhead of ObjC dispatch. 47*1b3f573fSAndroid Build Coastguard Workertypedef struct GPBOutputBufferState { 48*1b3f573fSAndroid Build Coastguard Worker uint8_t *bytes; 49*1b3f573fSAndroid Build Coastguard Worker size_t size; 50*1b3f573fSAndroid Build Coastguard Worker size_t position; 51*1b3f573fSAndroid Build Coastguard Worker NSOutputStream *output; 52*1b3f573fSAndroid Build Coastguard Worker} GPBOutputBufferState; 53*1b3f573fSAndroid Build Coastguard Worker 54*1b3f573fSAndroid Build Coastguard Worker@implementation GPBCodedOutputStream { 55*1b3f573fSAndroid Build Coastguard Worker GPBOutputBufferState state_; 56*1b3f573fSAndroid Build Coastguard Worker NSMutableData *buffer_; 57*1b3f573fSAndroid Build Coastguard Worker} 58*1b3f573fSAndroid Build Coastguard Worker 59*1b3f573fSAndroid Build Coastguard Workerstatic const int32_t LITTLE_ENDIAN_32_SIZE = sizeof(uint32_t); 60*1b3f573fSAndroid Build Coastguard Workerstatic const int32_t LITTLE_ENDIAN_64_SIZE = sizeof(uint64_t); 61*1b3f573fSAndroid Build Coastguard Worker 62*1b3f573fSAndroid Build Coastguard Worker// Internal helper that writes the current buffer to the output. The 63*1b3f573fSAndroid Build Coastguard Worker// buffer position is reset to its initial value when this returns. 64*1b3f573fSAndroid Build Coastguard Workerstatic void GPBRefreshBuffer(GPBOutputBufferState *state) { 65*1b3f573fSAndroid Build Coastguard Worker if (state->output == nil) { 66*1b3f573fSAndroid Build Coastguard Worker // We're writing to a single buffer. 67*1b3f573fSAndroid Build Coastguard Worker [NSException raise:GPBCodedOutputStreamException_OutOfSpace format:@""]; 68*1b3f573fSAndroid Build Coastguard Worker } 69*1b3f573fSAndroid Build Coastguard Worker if (state->position != 0) { 70*1b3f573fSAndroid Build Coastguard Worker NSInteger written = 71*1b3f573fSAndroid Build Coastguard Worker [state->output write:state->bytes maxLength:state->position]; 72*1b3f573fSAndroid Build Coastguard Worker if (written != (NSInteger)state->position) { 73*1b3f573fSAndroid Build Coastguard Worker [NSException raise:GPBCodedOutputStreamException_WriteFailed format:@""]; 74*1b3f573fSAndroid Build Coastguard Worker } 75*1b3f573fSAndroid Build Coastguard Worker state->position = 0; 76*1b3f573fSAndroid Build Coastguard Worker } 77*1b3f573fSAndroid Build Coastguard Worker} 78*1b3f573fSAndroid Build Coastguard Worker 79*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteRawByte(GPBOutputBufferState *state, uint8_t value) { 80*1b3f573fSAndroid Build Coastguard Worker if (state->position == state->size) { 81*1b3f573fSAndroid Build Coastguard Worker GPBRefreshBuffer(state); 82*1b3f573fSAndroid Build Coastguard Worker } 83*1b3f573fSAndroid Build Coastguard Worker state->bytes[state->position++] = value; 84*1b3f573fSAndroid Build Coastguard Worker} 85*1b3f573fSAndroid Build Coastguard Worker 86*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteRawVarint32(GPBOutputBufferState *state, int32_t value) { 87*1b3f573fSAndroid Build Coastguard Worker while (YES) { 88*1b3f573fSAndroid Build Coastguard Worker if ((value & ~0x7F) == 0) { 89*1b3f573fSAndroid Build Coastguard Worker uint8_t val = (uint8_t)value; 90*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, val); 91*1b3f573fSAndroid Build Coastguard Worker return; 92*1b3f573fSAndroid Build Coastguard Worker } else { 93*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (value & 0x7F) | 0x80); 94*1b3f573fSAndroid Build Coastguard Worker value = GPBLogicalRightShift32(value, 7); 95*1b3f573fSAndroid Build Coastguard Worker } 96*1b3f573fSAndroid Build Coastguard Worker } 97*1b3f573fSAndroid Build Coastguard Worker} 98*1b3f573fSAndroid Build Coastguard Worker 99*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteRawVarint64(GPBOutputBufferState *state, int64_t value) { 100*1b3f573fSAndroid Build Coastguard Worker while (YES) { 101*1b3f573fSAndroid Build Coastguard Worker if ((value & ~0x7FL) == 0) { 102*1b3f573fSAndroid Build Coastguard Worker uint8_t val = (uint8_t)value; 103*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, val); 104*1b3f573fSAndroid Build Coastguard Worker return; 105*1b3f573fSAndroid Build Coastguard Worker } else { 106*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, ((int32_t)value & 0x7F) | 0x80); 107*1b3f573fSAndroid Build Coastguard Worker value = GPBLogicalRightShift64(value, 7); 108*1b3f573fSAndroid Build Coastguard Worker } 109*1b3f573fSAndroid Build Coastguard Worker } 110*1b3f573fSAndroid Build Coastguard Worker} 111*1b3f573fSAndroid Build Coastguard Worker 112*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteInt32NoTag(GPBOutputBufferState *state, int32_t value) { 113*1b3f573fSAndroid Build Coastguard Worker if (value >= 0) { 114*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(state, value); 115*1b3f573fSAndroid Build Coastguard Worker } else { 116*1b3f573fSAndroid Build Coastguard Worker // Must sign-extend 117*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(state, value); 118*1b3f573fSAndroid Build Coastguard Worker } 119*1b3f573fSAndroid Build Coastguard Worker} 120*1b3f573fSAndroid Build Coastguard Worker 121*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteUInt32(GPBOutputBufferState *state, int32_t fieldNumber, 122*1b3f573fSAndroid Build Coastguard Worker uint32_t value) { 123*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(state, fieldNumber, GPBWireFormatVarint); 124*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(state, value); 125*1b3f573fSAndroid Build Coastguard Worker} 126*1b3f573fSAndroid Build Coastguard Worker 127*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteTagWithFormat(GPBOutputBufferState *state, 128*1b3f573fSAndroid Build Coastguard Worker uint32_t fieldNumber, GPBWireFormat format) { 129*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(state, GPBWireFormatMakeTag(fieldNumber, format)); 130*1b3f573fSAndroid Build Coastguard Worker} 131*1b3f573fSAndroid Build Coastguard Worker 132*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteRawLittleEndian32(GPBOutputBufferState *state, 133*1b3f573fSAndroid Build Coastguard Worker int32_t value) { 134*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (value)&0xFF); 135*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (value >> 8) & 0xFF); 136*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (value >> 16) & 0xFF); 137*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (value >> 24) & 0xFF); 138*1b3f573fSAndroid Build Coastguard Worker} 139*1b3f573fSAndroid Build Coastguard Worker 140*1b3f573fSAndroid Build Coastguard Workerstatic void GPBWriteRawLittleEndian64(GPBOutputBufferState *state, 141*1b3f573fSAndroid Build Coastguard Worker int64_t value) { 142*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value)&0xFF); 143*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 8) & 0xFF); 144*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 16) & 0xFF); 145*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 24) & 0xFF); 146*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 32) & 0xFF); 147*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 40) & 0xFF); 148*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 48) & 0xFF); 149*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(state, (int32_t)(value >> 56) & 0xFF); 150*1b3f573fSAndroid Build Coastguard Worker} 151*1b3f573fSAndroid Build Coastguard Worker 152*1b3f573fSAndroid Build Coastguard Worker- (void)dealloc { 153*1b3f573fSAndroid Build Coastguard Worker [self flush]; 154*1b3f573fSAndroid Build Coastguard Worker [state_.output close]; 155*1b3f573fSAndroid Build Coastguard Worker [state_.output release]; 156*1b3f573fSAndroid Build Coastguard Worker [buffer_ release]; 157*1b3f573fSAndroid Build Coastguard Worker 158*1b3f573fSAndroid Build Coastguard Worker [super dealloc]; 159*1b3f573fSAndroid Build Coastguard Worker} 160*1b3f573fSAndroid Build Coastguard Worker 161*1b3f573fSAndroid Build Coastguard Worker- (instancetype)initWithOutputStream:(NSOutputStream *)output { 162*1b3f573fSAndroid Build Coastguard Worker NSMutableData *data = [NSMutableData dataWithLength:PAGE_SIZE]; 163*1b3f573fSAndroid Build Coastguard Worker return [self initWithOutputStream:output data:data]; 164*1b3f573fSAndroid Build Coastguard Worker} 165*1b3f573fSAndroid Build Coastguard Worker 166*1b3f573fSAndroid Build Coastguard Worker- (instancetype)initWithData:(NSMutableData *)data { 167*1b3f573fSAndroid Build Coastguard Worker return [self initWithOutputStream:nil data:data]; 168*1b3f573fSAndroid Build Coastguard Worker} 169*1b3f573fSAndroid Build Coastguard Worker 170*1b3f573fSAndroid Build Coastguard Worker// This initializer isn't exposed, but it is the designated initializer. 171*1b3f573fSAndroid Build Coastguard Worker// Setting OutputStream and NSData is to control the buffering behavior/size 172*1b3f573fSAndroid Build Coastguard Worker// of the work, but that is more obvious via the bufferSize: version. 173*1b3f573fSAndroid Build Coastguard Worker- (instancetype)initWithOutputStream:(NSOutputStream *)output 174*1b3f573fSAndroid Build Coastguard Worker data:(NSMutableData *)data { 175*1b3f573fSAndroid Build Coastguard Worker if ((self = [super init])) { 176*1b3f573fSAndroid Build Coastguard Worker buffer_ = [data retain]; 177*1b3f573fSAndroid Build Coastguard Worker state_.bytes = [data mutableBytes]; 178*1b3f573fSAndroid Build Coastguard Worker state_.size = [data length]; 179*1b3f573fSAndroid Build Coastguard Worker state_.output = [output retain]; 180*1b3f573fSAndroid Build Coastguard Worker [state_.output open]; 181*1b3f573fSAndroid Build Coastguard Worker } 182*1b3f573fSAndroid Build Coastguard Worker return self; 183*1b3f573fSAndroid Build Coastguard Worker} 184*1b3f573fSAndroid Build Coastguard Worker 185*1b3f573fSAndroid Build Coastguard Worker+ (instancetype)streamWithOutputStream:(NSOutputStream *)output { 186*1b3f573fSAndroid Build Coastguard Worker NSMutableData *data = [NSMutableData dataWithLength:PAGE_SIZE]; 187*1b3f573fSAndroid Build Coastguard Worker return [[[self alloc] initWithOutputStream:output 188*1b3f573fSAndroid Build Coastguard Worker data:data] autorelease]; 189*1b3f573fSAndroid Build Coastguard Worker} 190*1b3f573fSAndroid Build Coastguard Worker 191*1b3f573fSAndroid Build Coastguard Worker+ (instancetype)streamWithData:(NSMutableData *)data { 192*1b3f573fSAndroid Build Coastguard Worker return [[[self alloc] initWithData:data] autorelease]; 193*1b3f573fSAndroid Build Coastguard Worker} 194*1b3f573fSAndroid Build Coastguard Worker 195*1b3f573fSAndroid Build Coastguard Worker// Direct access is use for speed, to avoid even internally declaring things 196*1b3f573fSAndroid Build Coastguard Worker// read/write, etc. The warning is enabled in the project to ensure code calling 197*1b3f573fSAndroid Build Coastguard Worker// protos can turn on -Wdirect-ivar-access without issues. 198*1b3f573fSAndroid Build Coastguard Worker#pragma clang diagnostic push 199*1b3f573fSAndroid Build Coastguard Worker#pragma clang diagnostic ignored "-Wdirect-ivar-access" 200*1b3f573fSAndroid Build Coastguard Worker 201*1b3f573fSAndroid Build Coastguard Worker- (void)writeDoubleNoTag:(double)value { 202*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value)); 203*1b3f573fSAndroid Build Coastguard Worker} 204*1b3f573fSAndroid Build Coastguard Worker 205*1b3f573fSAndroid Build Coastguard Worker- (void)writeDouble:(int32_t)fieldNumber value:(double)value { 206*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); 207*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, GPBConvertDoubleToInt64(value)); 208*1b3f573fSAndroid Build Coastguard Worker} 209*1b3f573fSAndroid Build Coastguard Worker 210*1b3f573fSAndroid Build Coastguard Worker- (void)writeFloatNoTag:(float)value { 211*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, GPBConvertFloatToInt32(value)); 212*1b3f573fSAndroid Build Coastguard Worker} 213*1b3f573fSAndroid Build Coastguard Worker 214*1b3f573fSAndroid Build Coastguard Worker- (void)writeFloat:(int32_t)fieldNumber value:(float)value { 215*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed32); 216*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, GPBConvertFloatToInt32(value)); 217*1b3f573fSAndroid Build Coastguard Worker} 218*1b3f573fSAndroid Build Coastguard Worker 219*1b3f573fSAndroid Build Coastguard Worker- (void)writeUInt64NoTag:(uint64_t)value { 220*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, value); 221*1b3f573fSAndroid Build Coastguard Worker} 222*1b3f573fSAndroid Build Coastguard Worker 223*1b3f573fSAndroid Build Coastguard Worker- (void)writeUInt64:(int32_t)fieldNumber value:(uint64_t)value { 224*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 225*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, value); 226*1b3f573fSAndroid Build Coastguard Worker} 227*1b3f573fSAndroid Build Coastguard Worker 228*1b3f573fSAndroid Build Coastguard Worker- (void)writeInt64NoTag:(int64_t)value { 229*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, value); 230*1b3f573fSAndroid Build Coastguard Worker} 231*1b3f573fSAndroid Build Coastguard Worker 232*1b3f573fSAndroid Build Coastguard Worker- (void)writeInt64:(int32_t)fieldNumber value:(int64_t)value { 233*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 234*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, value); 235*1b3f573fSAndroid Build Coastguard Worker} 236*1b3f573fSAndroid Build Coastguard Worker 237*1b3f573fSAndroid Build Coastguard Worker- (void)writeInt32NoTag:(int32_t)value { 238*1b3f573fSAndroid Build Coastguard Worker GPBWriteInt32NoTag(&state_, value); 239*1b3f573fSAndroid Build Coastguard Worker} 240*1b3f573fSAndroid Build Coastguard Worker 241*1b3f573fSAndroid Build Coastguard Worker- (void)writeInt32:(int32_t)fieldNumber value:(int32_t)value { 242*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 243*1b3f573fSAndroid Build Coastguard Worker GPBWriteInt32NoTag(&state_, value); 244*1b3f573fSAndroid Build Coastguard Worker} 245*1b3f573fSAndroid Build Coastguard Worker 246*1b3f573fSAndroid Build Coastguard Worker- (void)writeFixed64NoTag:(uint64_t)value { 247*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, value); 248*1b3f573fSAndroid Build Coastguard Worker} 249*1b3f573fSAndroid Build Coastguard Worker 250*1b3f573fSAndroid Build Coastguard Worker- (void)writeFixed64:(int32_t)fieldNumber value:(uint64_t)value { 251*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); 252*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, value); 253*1b3f573fSAndroid Build Coastguard Worker} 254*1b3f573fSAndroid Build Coastguard Worker 255*1b3f573fSAndroid Build Coastguard Worker- (void)writeFixed32NoTag:(uint32_t)value { 256*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, value); 257*1b3f573fSAndroid Build Coastguard Worker} 258*1b3f573fSAndroid Build Coastguard Worker 259*1b3f573fSAndroid Build Coastguard Worker- (void)writeFixed32:(int32_t)fieldNumber value:(uint32_t)value { 260*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed32); 261*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, value); 262*1b3f573fSAndroid Build Coastguard Worker} 263*1b3f573fSAndroid Build Coastguard Worker 264*1b3f573fSAndroid Build Coastguard Worker- (void)writeBoolNoTag:(BOOL)value { 265*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(&state_, (value ? 1 : 0)); 266*1b3f573fSAndroid Build Coastguard Worker} 267*1b3f573fSAndroid Build Coastguard Worker 268*1b3f573fSAndroid Build Coastguard Worker- (void)writeBool:(int32_t)fieldNumber value:(BOOL)value { 269*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 270*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(&state_, (value ? 1 : 0)); 271*1b3f573fSAndroid Build Coastguard Worker} 272*1b3f573fSAndroid Build Coastguard Worker 273*1b3f573fSAndroid Build Coastguard Worker- (void)writeStringNoTag:(const NSString *)value { 274*1b3f573fSAndroid Build Coastguard Worker size_t length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 275*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)length); 276*1b3f573fSAndroid Build Coastguard Worker if (length == 0) { 277*1b3f573fSAndroid Build Coastguard Worker return; 278*1b3f573fSAndroid Build Coastguard Worker } 279*1b3f573fSAndroid Build Coastguard Worker 280*1b3f573fSAndroid Build Coastguard Worker const char *quickString = 281*1b3f573fSAndroid Build Coastguard Worker CFStringGetCStringPtr((CFStringRef)value, kCFStringEncodingUTF8); 282*1b3f573fSAndroid Build Coastguard Worker 283*1b3f573fSAndroid Build Coastguard Worker // Fast path: Most strings are short, if the buffer already has space, 284*1b3f573fSAndroid Build Coastguard Worker // add to it directly. 285*1b3f573fSAndroid Build Coastguard Worker NSUInteger bufferBytesLeft = state_.size - state_.position; 286*1b3f573fSAndroid Build Coastguard Worker if (bufferBytesLeft >= length) { 287*1b3f573fSAndroid Build Coastguard Worker NSUInteger usedBufferLength = 0; 288*1b3f573fSAndroid Build Coastguard Worker BOOL result; 289*1b3f573fSAndroid Build Coastguard Worker if (quickString != NULL) { 290*1b3f573fSAndroid Build Coastguard Worker memcpy(state_.bytes + state_.position, quickString, length); 291*1b3f573fSAndroid Build Coastguard Worker usedBufferLength = length; 292*1b3f573fSAndroid Build Coastguard Worker result = YES; 293*1b3f573fSAndroid Build Coastguard Worker } else { 294*1b3f573fSAndroid Build Coastguard Worker result = [value getBytes:state_.bytes + state_.position 295*1b3f573fSAndroid Build Coastguard Worker maxLength:bufferBytesLeft 296*1b3f573fSAndroid Build Coastguard Worker usedLength:&usedBufferLength 297*1b3f573fSAndroid Build Coastguard Worker encoding:NSUTF8StringEncoding 298*1b3f573fSAndroid Build Coastguard Worker options:(NSStringEncodingConversionOptions)0 299*1b3f573fSAndroid Build Coastguard Worker range:NSMakeRange(0, [value length]) 300*1b3f573fSAndroid Build Coastguard Worker remainingRange:NULL]; 301*1b3f573fSAndroid Build Coastguard Worker } 302*1b3f573fSAndroid Build Coastguard Worker if (result) { 303*1b3f573fSAndroid Build Coastguard Worker NSAssert2((usedBufferLength == length), 304*1b3f573fSAndroid Build Coastguard Worker @"Our UTF8 calc was wrong? %tu vs %zd", usedBufferLength, 305*1b3f573fSAndroid Build Coastguard Worker length); 306*1b3f573fSAndroid Build Coastguard Worker state_.position += usedBufferLength; 307*1b3f573fSAndroid Build Coastguard Worker return; 308*1b3f573fSAndroid Build Coastguard Worker } 309*1b3f573fSAndroid Build Coastguard Worker } else if (quickString != NULL) { 310*1b3f573fSAndroid Build Coastguard Worker [self writeRawPtr:quickString offset:0 length:length]; 311*1b3f573fSAndroid Build Coastguard Worker } else { 312*1b3f573fSAndroid Build Coastguard Worker // Slow path: just get it as data and write it out. 313*1b3f573fSAndroid Build Coastguard Worker NSData *utf8Data = [value dataUsingEncoding:NSUTF8StringEncoding]; 314*1b3f573fSAndroid Build Coastguard Worker NSAssert2(([utf8Data length] == length), 315*1b3f573fSAndroid Build Coastguard Worker @"Strings UTF8 length was wrong? %tu vs %zd", [utf8Data length], 316*1b3f573fSAndroid Build Coastguard Worker length); 317*1b3f573fSAndroid Build Coastguard Worker [self writeRawData:utf8Data]; 318*1b3f573fSAndroid Build Coastguard Worker } 319*1b3f573fSAndroid Build Coastguard Worker} 320*1b3f573fSAndroid Build Coastguard Worker 321*1b3f573fSAndroid Build Coastguard Worker- (void)writeString:(int32_t)fieldNumber value:(NSString *)value { 322*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited); 323*1b3f573fSAndroid Build Coastguard Worker [self writeStringNoTag:value]; 324*1b3f573fSAndroid Build Coastguard Worker} 325*1b3f573fSAndroid Build Coastguard Worker 326*1b3f573fSAndroid Build Coastguard Worker- (void)writeGroupNoTag:(int32_t)fieldNumber value:(GPBMessage *)value { 327*1b3f573fSAndroid Build Coastguard Worker [value writeToCodedOutputStream:self]; 328*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatEndGroup); 329*1b3f573fSAndroid Build Coastguard Worker} 330*1b3f573fSAndroid Build Coastguard Worker 331*1b3f573fSAndroid Build Coastguard Worker- (void)writeGroup:(int32_t)fieldNumber value:(GPBMessage *)value { 332*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatStartGroup); 333*1b3f573fSAndroid Build Coastguard Worker [self writeGroupNoTag:fieldNumber value:value]; 334*1b3f573fSAndroid Build Coastguard Worker} 335*1b3f573fSAndroid Build Coastguard Worker 336*1b3f573fSAndroid Build Coastguard Worker- (void)writeUnknownGroupNoTag:(int32_t)fieldNumber 337*1b3f573fSAndroid Build Coastguard Worker value:(const GPBUnknownFieldSet *)value { 338*1b3f573fSAndroid Build Coastguard Worker [value writeToCodedOutputStream:self]; 339*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatEndGroup); 340*1b3f573fSAndroid Build Coastguard Worker} 341*1b3f573fSAndroid Build Coastguard Worker 342*1b3f573fSAndroid Build Coastguard Worker- (void)writeUnknownGroup:(int32_t)fieldNumber 343*1b3f573fSAndroid Build Coastguard Worker value:(GPBUnknownFieldSet *)value { 344*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatStartGroup); 345*1b3f573fSAndroid Build Coastguard Worker [self writeUnknownGroupNoTag:fieldNumber value:value]; 346*1b3f573fSAndroid Build Coastguard Worker} 347*1b3f573fSAndroid Build Coastguard Worker 348*1b3f573fSAndroid Build Coastguard Worker- (void)writeMessageNoTag:(GPBMessage *)value { 349*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)[value serializedSize]); 350*1b3f573fSAndroid Build Coastguard Worker [value writeToCodedOutputStream:self]; 351*1b3f573fSAndroid Build Coastguard Worker} 352*1b3f573fSAndroid Build Coastguard Worker 353*1b3f573fSAndroid Build Coastguard Worker- (void)writeMessage:(int32_t)fieldNumber value:(GPBMessage *)value { 354*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited); 355*1b3f573fSAndroid Build Coastguard Worker [self writeMessageNoTag:value]; 356*1b3f573fSAndroid Build Coastguard Worker} 357*1b3f573fSAndroid Build Coastguard Worker 358*1b3f573fSAndroid Build Coastguard Worker- (void)writeBytesNoTag:(NSData *)value { 359*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)[value length]); 360*1b3f573fSAndroid Build Coastguard Worker [self writeRawData:value]; 361*1b3f573fSAndroid Build Coastguard Worker} 362*1b3f573fSAndroid Build Coastguard Worker 363*1b3f573fSAndroid Build Coastguard Worker- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value { 364*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited); 365*1b3f573fSAndroid Build Coastguard Worker [self writeBytesNoTag:value]; 366*1b3f573fSAndroid Build Coastguard Worker} 367*1b3f573fSAndroid Build Coastguard Worker 368*1b3f573fSAndroid Build Coastguard Worker- (void)writeUInt32NoTag:(uint32_t)value { 369*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, value); 370*1b3f573fSAndroid Build Coastguard Worker} 371*1b3f573fSAndroid Build Coastguard Worker 372*1b3f573fSAndroid Build Coastguard Worker- (void)writeUInt32:(int32_t)fieldNumber value:(uint32_t)value { 373*1b3f573fSAndroid Build Coastguard Worker GPBWriteUInt32(&state_, fieldNumber, value); 374*1b3f573fSAndroid Build Coastguard Worker} 375*1b3f573fSAndroid Build Coastguard Worker 376*1b3f573fSAndroid Build Coastguard Worker- (void)writeEnumNoTag:(int32_t)value { 377*1b3f573fSAndroid Build Coastguard Worker GPBWriteInt32NoTag(&state_, value); 378*1b3f573fSAndroid Build Coastguard Worker} 379*1b3f573fSAndroid Build Coastguard Worker 380*1b3f573fSAndroid Build Coastguard Worker- (void)writeEnum:(int32_t)fieldNumber value:(int32_t)value { 381*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 382*1b3f573fSAndroid Build Coastguard Worker GPBWriteInt32NoTag(&state_, value); 383*1b3f573fSAndroid Build Coastguard Worker} 384*1b3f573fSAndroid Build Coastguard Worker 385*1b3f573fSAndroid Build Coastguard Worker- (void)writeSFixed32NoTag:(int32_t)value { 386*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, value); 387*1b3f573fSAndroid Build Coastguard Worker} 388*1b3f573fSAndroid Build Coastguard Worker 389*1b3f573fSAndroid Build Coastguard Worker- (void)writeSFixed32:(int32_t)fieldNumber value:(int32_t)value { 390*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed32); 391*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, value); 392*1b3f573fSAndroid Build Coastguard Worker} 393*1b3f573fSAndroid Build Coastguard Worker 394*1b3f573fSAndroid Build Coastguard Worker- (void)writeSFixed64NoTag:(int64_t)value { 395*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, value); 396*1b3f573fSAndroid Build Coastguard Worker} 397*1b3f573fSAndroid Build Coastguard Worker 398*1b3f573fSAndroid Build Coastguard Worker- (void)writeSFixed64:(int32_t)fieldNumber value:(int64_t)value { 399*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatFixed64); 400*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, value); 401*1b3f573fSAndroid Build Coastguard Worker} 402*1b3f573fSAndroid Build Coastguard Worker 403*1b3f573fSAndroid Build Coastguard Worker- (void)writeSInt32NoTag:(int32_t)value { 404*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, GPBEncodeZigZag32(value)); 405*1b3f573fSAndroid Build Coastguard Worker} 406*1b3f573fSAndroid Build Coastguard Worker 407*1b3f573fSAndroid Build Coastguard Worker- (void)writeSInt32:(int32_t)fieldNumber value:(int32_t)value { 408*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 409*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, GPBEncodeZigZag32(value)); 410*1b3f573fSAndroid Build Coastguard Worker} 411*1b3f573fSAndroid Build Coastguard Worker 412*1b3f573fSAndroid Build Coastguard Worker- (void)writeSInt64NoTag:(int64_t)value { 413*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, GPBEncodeZigZag64(value)); 414*1b3f573fSAndroid Build Coastguard Worker} 415*1b3f573fSAndroid Build Coastguard Worker 416*1b3f573fSAndroid Build Coastguard Worker- (void)writeSInt64:(int32_t)fieldNumber value:(int64_t)value { 417*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatVarint); 418*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, GPBEncodeZigZag64(value)); 419*1b3f573fSAndroid Build Coastguard Worker} 420*1b3f573fSAndroid Build Coastguard Worker 421*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE WRITE_PACKABLE_DEFNS(NAME, ARRAY_TYPE, TYPE, ACCESSOR_NAME) 422*1b3f573fSAndroid Build Coastguard Worker//%- (void)write##NAME##Array:(int32_t)fieldNumber 423*1b3f573fSAndroid Build Coastguard Worker//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values 424*1b3f573fSAndroid Build Coastguard Worker//% NAME$S tag:(uint32_t)tag { 425*1b3f573fSAndroid Build Coastguard Worker//% if (tag != 0) { 426*1b3f573fSAndroid Build Coastguard Worker//% if (values.count == 0) return; 427*1b3f573fSAndroid Build Coastguard Worker//% __block size_t dataSize = 0; 428*1b3f573fSAndroid Build Coastguard Worker//% [values enumerate##ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { 429*1b3f573fSAndroid Build Coastguard Worker//%#pragma unused(idx, stop) 430*1b3f573fSAndroid Build Coastguard Worker//% dataSize += GPBCompute##NAME##SizeNoTag(value); 431*1b3f573fSAndroid Build Coastguard Worker//% }]; 432*1b3f573fSAndroid Build Coastguard Worker//% GPBWriteRawVarint32(&state_, tag); 433*1b3f573fSAndroid Build Coastguard Worker//% GPBWriteRawVarint32(&state_, (int32_t)dataSize); 434*1b3f573fSAndroid Build Coastguard Worker//% [values enumerate##ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { 435*1b3f573fSAndroid Build Coastguard Worker//%#pragma unused(idx, stop) 436*1b3f573fSAndroid Build Coastguard Worker//% [self write##NAME##NoTag:value]; 437*1b3f573fSAndroid Build Coastguard Worker//% }]; 438*1b3f573fSAndroid Build Coastguard Worker//% } else { 439*1b3f573fSAndroid Build Coastguard Worker//% [values enumerate##ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { 440*1b3f573fSAndroid Build Coastguard Worker//%#pragma unused(idx, stop) 441*1b3f573fSAndroid Build Coastguard Worker//% [self write##NAME:fieldNumber value:value]; 442*1b3f573fSAndroid Build Coastguard Worker//% }]; 443*1b3f573fSAndroid Build Coastguard Worker//% } 444*1b3f573fSAndroid Build Coastguard Worker//%} 445*1b3f573fSAndroid Build Coastguard Worker//% 446*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE WRITE_UNPACKABLE_DEFNS(NAME, TYPE) 447*1b3f573fSAndroid Build Coastguard Worker//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values { 448*1b3f573fSAndroid Build Coastguard Worker//% for (TYPE *value in values) { 449*1b3f573fSAndroid Build Coastguard Worker//% [self write##NAME:fieldNumber value:value]; 450*1b3f573fSAndroid Build Coastguard Worker//% } 451*1b3f573fSAndroid Build Coastguard Worker//%} 452*1b3f573fSAndroid Build Coastguard Worker//% 453*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Double, Double, double, ) 454*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 455*1b3f573fSAndroid Build Coastguard Worker// clang-format off 456*1b3f573fSAndroid Build Coastguard Worker 457*1b3f573fSAndroid Build Coastguard Worker- (void)writeDoubleArray:(int32_t)fieldNumber 458*1b3f573fSAndroid Build Coastguard Worker values:(GPBDoubleArray *)values 459*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 460*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 461*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 462*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 463*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) { 464*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 465*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeDoubleSizeNoTag(value); 466*1b3f573fSAndroid Build Coastguard Worker }]; 467*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 468*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 469*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) { 470*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 471*1b3f573fSAndroid Build Coastguard Worker [self writeDoubleNoTag:value]; 472*1b3f573fSAndroid Build Coastguard Worker }]; 473*1b3f573fSAndroid Build Coastguard Worker } else { 474*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) { 475*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 476*1b3f573fSAndroid Build Coastguard Worker [self writeDouble:fieldNumber value:value]; 477*1b3f573fSAndroid Build Coastguard Worker }]; 478*1b3f573fSAndroid Build Coastguard Worker } 479*1b3f573fSAndroid Build Coastguard Worker} 480*1b3f573fSAndroid Build Coastguard Worker 481*1b3f573fSAndroid Build Coastguard Worker// clang-format on 482*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Float, Float, float, ) 483*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 484*1b3f573fSAndroid Build Coastguard Worker// clang-format off 485*1b3f573fSAndroid Build Coastguard Worker 486*1b3f573fSAndroid Build Coastguard Worker- (void)writeFloatArray:(int32_t)fieldNumber 487*1b3f573fSAndroid Build Coastguard Worker values:(GPBFloatArray *)values 488*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 489*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 490*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 491*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 492*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) { 493*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 494*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeFloatSizeNoTag(value); 495*1b3f573fSAndroid Build Coastguard Worker }]; 496*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 497*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 498*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) { 499*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 500*1b3f573fSAndroid Build Coastguard Worker [self writeFloatNoTag:value]; 501*1b3f573fSAndroid Build Coastguard Worker }]; 502*1b3f573fSAndroid Build Coastguard Worker } else { 503*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) { 504*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 505*1b3f573fSAndroid Build Coastguard Worker [self writeFloat:fieldNumber value:value]; 506*1b3f573fSAndroid Build Coastguard Worker }]; 507*1b3f573fSAndroid Build Coastguard Worker } 508*1b3f573fSAndroid Build Coastguard Worker} 509*1b3f573fSAndroid Build Coastguard Worker 510*1b3f573fSAndroid Build Coastguard Worker// clang-format on 511*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt64, UInt64, uint64_t, ) 512*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 513*1b3f573fSAndroid Build Coastguard Worker// clang-format off 514*1b3f573fSAndroid Build Coastguard Worker 515*1b3f573fSAndroid Build Coastguard Worker- (void)writeUInt64Array:(int32_t)fieldNumber 516*1b3f573fSAndroid Build Coastguard Worker values:(GPBUInt64Array *)values 517*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 518*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 519*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 520*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 521*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { 522*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 523*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeUInt64SizeNoTag(value); 524*1b3f573fSAndroid Build Coastguard Worker }]; 525*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 526*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 527*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { 528*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 529*1b3f573fSAndroid Build Coastguard Worker [self writeUInt64NoTag:value]; 530*1b3f573fSAndroid Build Coastguard Worker }]; 531*1b3f573fSAndroid Build Coastguard Worker } else { 532*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { 533*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 534*1b3f573fSAndroid Build Coastguard Worker [self writeUInt64:fieldNumber value:value]; 535*1b3f573fSAndroid Build Coastguard Worker }]; 536*1b3f573fSAndroid Build Coastguard Worker } 537*1b3f573fSAndroid Build Coastguard Worker} 538*1b3f573fSAndroid Build Coastguard Worker 539*1b3f573fSAndroid Build Coastguard Worker// clang-format on 540*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int64, Int64, int64_t, ) 541*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 542*1b3f573fSAndroid Build Coastguard Worker// clang-format off 543*1b3f573fSAndroid Build Coastguard Worker 544*1b3f573fSAndroid Build Coastguard Worker- (void)writeInt64Array:(int32_t)fieldNumber 545*1b3f573fSAndroid Build Coastguard Worker values:(GPBInt64Array *)values 546*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 547*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 548*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 549*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 550*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 551*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 552*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeInt64SizeNoTag(value); 553*1b3f573fSAndroid Build Coastguard Worker }]; 554*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 555*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 556*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 557*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 558*1b3f573fSAndroid Build Coastguard Worker [self writeInt64NoTag:value]; 559*1b3f573fSAndroid Build Coastguard Worker }]; 560*1b3f573fSAndroid Build Coastguard Worker } else { 561*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 562*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 563*1b3f573fSAndroid Build Coastguard Worker [self writeInt64:fieldNumber value:value]; 564*1b3f573fSAndroid Build Coastguard Worker }]; 565*1b3f573fSAndroid Build Coastguard Worker } 566*1b3f573fSAndroid Build Coastguard Worker} 567*1b3f573fSAndroid Build Coastguard Worker 568*1b3f573fSAndroid Build Coastguard Worker// clang-format on 569*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int32, Int32, int32_t, ) 570*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 571*1b3f573fSAndroid Build Coastguard Worker// clang-format off 572*1b3f573fSAndroid Build Coastguard Worker 573*1b3f573fSAndroid Build Coastguard Worker- (void)writeInt32Array:(int32_t)fieldNumber 574*1b3f573fSAndroid Build Coastguard Worker values:(GPBInt32Array *)values 575*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 576*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 577*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 578*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 579*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 580*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 581*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeInt32SizeNoTag(value); 582*1b3f573fSAndroid Build Coastguard Worker }]; 583*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 584*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 585*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 586*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 587*1b3f573fSAndroid Build Coastguard Worker [self writeInt32NoTag:value]; 588*1b3f573fSAndroid Build Coastguard Worker }]; 589*1b3f573fSAndroid Build Coastguard Worker } else { 590*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 591*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 592*1b3f573fSAndroid Build Coastguard Worker [self writeInt32:fieldNumber value:value]; 593*1b3f573fSAndroid Build Coastguard Worker }]; 594*1b3f573fSAndroid Build Coastguard Worker } 595*1b3f573fSAndroid Build Coastguard Worker} 596*1b3f573fSAndroid Build Coastguard Worker 597*1b3f573fSAndroid Build Coastguard Worker// clang-format on 598*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt32, UInt32, uint32_t, ) 599*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 600*1b3f573fSAndroid Build Coastguard Worker// clang-format off 601*1b3f573fSAndroid Build Coastguard Worker 602*1b3f573fSAndroid Build Coastguard Worker- (void)writeUInt32Array:(int32_t)fieldNumber 603*1b3f573fSAndroid Build Coastguard Worker values:(GPBUInt32Array *)values 604*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 605*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 606*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 607*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 608*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { 609*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 610*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeUInt32SizeNoTag(value); 611*1b3f573fSAndroid Build Coastguard Worker }]; 612*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 613*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 614*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { 615*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 616*1b3f573fSAndroid Build Coastguard Worker [self writeUInt32NoTag:value]; 617*1b3f573fSAndroid Build Coastguard Worker }]; 618*1b3f573fSAndroid Build Coastguard Worker } else { 619*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { 620*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 621*1b3f573fSAndroid Build Coastguard Worker [self writeUInt32:fieldNumber value:value]; 622*1b3f573fSAndroid Build Coastguard Worker }]; 623*1b3f573fSAndroid Build Coastguard Worker } 624*1b3f573fSAndroid Build Coastguard Worker} 625*1b3f573fSAndroid Build Coastguard Worker 626*1b3f573fSAndroid Build Coastguard Worker// clang-format on 627*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed64, UInt64, uint64_t, ) 628*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 629*1b3f573fSAndroid Build Coastguard Worker// clang-format off 630*1b3f573fSAndroid Build Coastguard Worker 631*1b3f573fSAndroid Build Coastguard Worker- (void)writeFixed64Array:(int32_t)fieldNumber 632*1b3f573fSAndroid Build Coastguard Worker values:(GPBUInt64Array *)values 633*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 634*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 635*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 636*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 637*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { 638*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 639*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeFixed64SizeNoTag(value); 640*1b3f573fSAndroid Build Coastguard Worker }]; 641*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 642*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 643*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { 644*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 645*1b3f573fSAndroid Build Coastguard Worker [self writeFixed64NoTag:value]; 646*1b3f573fSAndroid Build Coastguard Worker }]; 647*1b3f573fSAndroid Build Coastguard Worker } else { 648*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) { 649*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 650*1b3f573fSAndroid Build Coastguard Worker [self writeFixed64:fieldNumber value:value]; 651*1b3f573fSAndroid Build Coastguard Worker }]; 652*1b3f573fSAndroid Build Coastguard Worker } 653*1b3f573fSAndroid Build Coastguard Worker} 654*1b3f573fSAndroid Build Coastguard Worker 655*1b3f573fSAndroid Build Coastguard Worker// clang-format on 656*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed32, UInt32, uint32_t, ) 657*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 658*1b3f573fSAndroid Build Coastguard Worker// clang-format off 659*1b3f573fSAndroid Build Coastguard Worker 660*1b3f573fSAndroid Build Coastguard Worker- (void)writeFixed32Array:(int32_t)fieldNumber 661*1b3f573fSAndroid Build Coastguard Worker values:(GPBUInt32Array *)values 662*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 663*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 664*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 665*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 666*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { 667*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 668*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeFixed32SizeNoTag(value); 669*1b3f573fSAndroid Build Coastguard Worker }]; 670*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 671*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 672*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { 673*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 674*1b3f573fSAndroid Build Coastguard Worker [self writeFixed32NoTag:value]; 675*1b3f573fSAndroid Build Coastguard Worker }]; 676*1b3f573fSAndroid Build Coastguard Worker } else { 677*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) { 678*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 679*1b3f573fSAndroid Build Coastguard Worker [self writeFixed32:fieldNumber value:value]; 680*1b3f573fSAndroid Build Coastguard Worker }]; 681*1b3f573fSAndroid Build Coastguard Worker } 682*1b3f573fSAndroid Build Coastguard Worker} 683*1b3f573fSAndroid Build Coastguard Worker 684*1b3f573fSAndroid Build Coastguard Worker// clang-format on 685*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt32, Int32, int32_t, ) 686*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 687*1b3f573fSAndroid Build Coastguard Worker// clang-format off 688*1b3f573fSAndroid Build Coastguard Worker 689*1b3f573fSAndroid Build Coastguard Worker- (void)writeSInt32Array:(int32_t)fieldNumber 690*1b3f573fSAndroid Build Coastguard Worker values:(GPBInt32Array *)values 691*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 692*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 693*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 694*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 695*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 696*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 697*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeSInt32SizeNoTag(value); 698*1b3f573fSAndroid Build Coastguard Worker }]; 699*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 700*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 701*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 702*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 703*1b3f573fSAndroid Build Coastguard Worker [self writeSInt32NoTag:value]; 704*1b3f573fSAndroid Build Coastguard Worker }]; 705*1b3f573fSAndroid Build Coastguard Worker } else { 706*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 707*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 708*1b3f573fSAndroid Build Coastguard Worker [self writeSInt32:fieldNumber value:value]; 709*1b3f573fSAndroid Build Coastguard Worker }]; 710*1b3f573fSAndroid Build Coastguard Worker } 711*1b3f573fSAndroid Build Coastguard Worker} 712*1b3f573fSAndroid Build Coastguard Worker 713*1b3f573fSAndroid Build Coastguard Worker// clang-format on 714*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt64, Int64, int64_t, ) 715*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 716*1b3f573fSAndroid Build Coastguard Worker// clang-format off 717*1b3f573fSAndroid Build Coastguard Worker 718*1b3f573fSAndroid Build Coastguard Worker- (void)writeSInt64Array:(int32_t)fieldNumber 719*1b3f573fSAndroid Build Coastguard Worker values:(GPBInt64Array *)values 720*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 721*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 722*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 723*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 724*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 725*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 726*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeSInt64SizeNoTag(value); 727*1b3f573fSAndroid Build Coastguard Worker }]; 728*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 729*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 730*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 731*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 732*1b3f573fSAndroid Build Coastguard Worker [self writeSInt64NoTag:value]; 733*1b3f573fSAndroid Build Coastguard Worker }]; 734*1b3f573fSAndroid Build Coastguard Worker } else { 735*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 736*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 737*1b3f573fSAndroid Build Coastguard Worker [self writeSInt64:fieldNumber value:value]; 738*1b3f573fSAndroid Build Coastguard Worker }]; 739*1b3f573fSAndroid Build Coastguard Worker } 740*1b3f573fSAndroid Build Coastguard Worker} 741*1b3f573fSAndroid Build Coastguard Worker 742*1b3f573fSAndroid Build Coastguard Worker// clang-format on 743*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed64, Int64, int64_t, ) 744*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 745*1b3f573fSAndroid Build Coastguard Worker// clang-format off 746*1b3f573fSAndroid Build Coastguard Worker 747*1b3f573fSAndroid Build Coastguard Worker- (void)writeSFixed64Array:(int32_t)fieldNumber 748*1b3f573fSAndroid Build Coastguard Worker values:(GPBInt64Array *)values 749*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 750*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 751*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 752*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 753*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 754*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 755*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeSFixed64SizeNoTag(value); 756*1b3f573fSAndroid Build Coastguard Worker }]; 757*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 758*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 759*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 760*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 761*1b3f573fSAndroid Build Coastguard Worker [self writeSFixed64NoTag:value]; 762*1b3f573fSAndroid Build Coastguard Worker }]; 763*1b3f573fSAndroid Build Coastguard Worker } else { 764*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) { 765*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 766*1b3f573fSAndroid Build Coastguard Worker [self writeSFixed64:fieldNumber value:value]; 767*1b3f573fSAndroid Build Coastguard Worker }]; 768*1b3f573fSAndroid Build Coastguard Worker } 769*1b3f573fSAndroid Build Coastguard Worker} 770*1b3f573fSAndroid Build Coastguard Worker 771*1b3f573fSAndroid Build Coastguard Worker// clang-format on 772*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed32, Int32, int32_t, ) 773*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 774*1b3f573fSAndroid Build Coastguard Worker// clang-format off 775*1b3f573fSAndroid Build Coastguard Worker 776*1b3f573fSAndroid Build Coastguard Worker- (void)writeSFixed32Array:(int32_t)fieldNumber 777*1b3f573fSAndroid Build Coastguard Worker values:(GPBInt32Array *)values 778*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 779*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 780*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 781*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 782*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 783*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 784*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeSFixed32SizeNoTag(value); 785*1b3f573fSAndroid Build Coastguard Worker }]; 786*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 787*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 788*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 789*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 790*1b3f573fSAndroid Build Coastguard Worker [self writeSFixed32NoTag:value]; 791*1b3f573fSAndroid Build Coastguard Worker }]; 792*1b3f573fSAndroid Build Coastguard Worker } else { 793*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 794*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 795*1b3f573fSAndroid Build Coastguard Worker [self writeSFixed32:fieldNumber value:value]; 796*1b3f573fSAndroid Build Coastguard Worker }]; 797*1b3f573fSAndroid Build Coastguard Worker } 798*1b3f573fSAndroid Build Coastguard Worker} 799*1b3f573fSAndroid Build Coastguard Worker 800*1b3f573fSAndroid Build Coastguard Worker// clang-format on 801*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Bool, Bool, BOOL, ) 802*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 803*1b3f573fSAndroid Build Coastguard Worker// clang-format off 804*1b3f573fSAndroid Build Coastguard Worker 805*1b3f573fSAndroid Build Coastguard Worker- (void)writeBoolArray:(int32_t)fieldNumber 806*1b3f573fSAndroid Build Coastguard Worker values:(GPBBoolArray *)values 807*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 808*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 809*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 810*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 811*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) { 812*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 813*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeBoolSizeNoTag(value); 814*1b3f573fSAndroid Build Coastguard Worker }]; 815*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 816*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 817*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) { 818*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 819*1b3f573fSAndroid Build Coastguard Worker [self writeBoolNoTag:value]; 820*1b3f573fSAndroid Build Coastguard Worker }]; 821*1b3f573fSAndroid Build Coastguard Worker } else { 822*1b3f573fSAndroid Build Coastguard Worker [values enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) { 823*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 824*1b3f573fSAndroid Build Coastguard Worker [self writeBool:fieldNumber value:value]; 825*1b3f573fSAndroid Build Coastguard Worker }]; 826*1b3f573fSAndroid Build Coastguard Worker } 827*1b3f573fSAndroid Build Coastguard Worker} 828*1b3f573fSAndroid Build Coastguard Worker 829*1b3f573fSAndroid Build Coastguard Worker// clang-format on 830*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Enum, Enum, int32_t, Raw) 831*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 832*1b3f573fSAndroid Build Coastguard Worker// clang-format off 833*1b3f573fSAndroid Build Coastguard Worker 834*1b3f573fSAndroid Build Coastguard Worker- (void)writeEnumArray:(int32_t)fieldNumber 835*1b3f573fSAndroid Build Coastguard Worker values:(GPBEnumArray *)values 836*1b3f573fSAndroid Build Coastguard Worker tag:(uint32_t)tag { 837*1b3f573fSAndroid Build Coastguard Worker if (tag != 0) { 838*1b3f573fSAndroid Build Coastguard Worker if (values.count == 0) return; 839*1b3f573fSAndroid Build Coastguard Worker __block size_t dataSize = 0; 840*1b3f573fSAndroid Build Coastguard Worker [values enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 841*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 842*1b3f573fSAndroid Build Coastguard Worker dataSize += GPBComputeEnumSizeNoTag(value); 843*1b3f573fSAndroid Build Coastguard Worker }]; 844*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, tag); 845*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)dataSize); 846*1b3f573fSAndroid Build Coastguard Worker [values enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 847*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 848*1b3f573fSAndroid Build Coastguard Worker [self writeEnumNoTag:value]; 849*1b3f573fSAndroid Build Coastguard Worker }]; 850*1b3f573fSAndroid Build Coastguard Worker } else { 851*1b3f573fSAndroid Build Coastguard Worker [values enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) { 852*1b3f573fSAndroid Build Coastguard Worker#pragma unused(idx, stop) 853*1b3f573fSAndroid Build Coastguard Worker [self writeEnum:fieldNumber value:value]; 854*1b3f573fSAndroid Build Coastguard Worker }]; 855*1b3f573fSAndroid Build Coastguard Worker } 856*1b3f573fSAndroid Build Coastguard Worker} 857*1b3f573fSAndroid Build Coastguard Worker 858*1b3f573fSAndroid Build Coastguard Worker// clang-format on 859*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(String, NSString) 860*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 861*1b3f573fSAndroid Build Coastguard Worker// clang-format off 862*1b3f573fSAndroid Build Coastguard Worker 863*1b3f573fSAndroid Build Coastguard Worker- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray *)values { 864*1b3f573fSAndroid Build Coastguard Worker for (NSString *value in values) { 865*1b3f573fSAndroid Build Coastguard Worker [self writeString:fieldNumber value:value]; 866*1b3f573fSAndroid Build Coastguard Worker } 867*1b3f573fSAndroid Build Coastguard Worker} 868*1b3f573fSAndroid Build Coastguard Worker 869*1b3f573fSAndroid Build Coastguard Worker// clang-format on 870*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Message, GPBMessage) 871*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 872*1b3f573fSAndroid Build Coastguard Worker// clang-format off 873*1b3f573fSAndroid Build Coastguard Worker 874*1b3f573fSAndroid Build Coastguard Worker- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray *)values { 875*1b3f573fSAndroid Build Coastguard Worker for (GPBMessage *value in values) { 876*1b3f573fSAndroid Build Coastguard Worker [self writeMessage:fieldNumber value:value]; 877*1b3f573fSAndroid Build Coastguard Worker } 878*1b3f573fSAndroid Build Coastguard Worker} 879*1b3f573fSAndroid Build Coastguard Worker 880*1b3f573fSAndroid Build Coastguard Worker// clang-format on 881*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Bytes, NSData) 882*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 883*1b3f573fSAndroid Build Coastguard Worker// clang-format off 884*1b3f573fSAndroid Build Coastguard Worker 885*1b3f573fSAndroid Build Coastguard Worker- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray *)values { 886*1b3f573fSAndroid Build Coastguard Worker for (NSData *value in values) { 887*1b3f573fSAndroid Build Coastguard Worker [self writeBytes:fieldNumber value:value]; 888*1b3f573fSAndroid Build Coastguard Worker } 889*1b3f573fSAndroid Build Coastguard Worker} 890*1b3f573fSAndroid Build Coastguard Worker 891*1b3f573fSAndroid Build Coastguard Worker// clang-format on 892*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Group, GPBMessage) 893*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 894*1b3f573fSAndroid Build Coastguard Worker// clang-format off 895*1b3f573fSAndroid Build Coastguard Worker 896*1b3f573fSAndroid Build Coastguard Worker- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray *)values { 897*1b3f573fSAndroid Build Coastguard Worker for (GPBMessage *value in values) { 898*1b3f573fSAndroid Build Coastguard Worker [self writeGroup:fieldNumber value:value]; 899*1b3f573fSAndroid Build Coastguard Worker } 900*1b3f573fSAndroid Build Coastguard Worker} 901*1b3f573fSAndroid Build Coastguard Worker 902*1b3f573fSAndroid Build Coastguard Worker// clang-format on 903*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(UnknownGroup, GPBUnknownFieldSet) 904*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 905*1b3f573fSAndroid Build Coastguard Worker// clang-format off 906*1b3f573fSAndroid Build Coastguard Worker 907*1b3f573fSAndroid Build Coastguard Worker- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray *)values { 908*1b3f573fSAndroid Build Coastguard Worker for (GPBUnknownFieldSet *value in values) { 909*1b3f573fSAndroid Build Coastguard Worker [self writeUnknownGroup:fieldNumber value:value]; 910*1b3f573fSAndroid Build Coastguard Worker } 911*1b3f573fSAndroid Build Coastguard Worker} 912*1b3f573fSAndroid Build Coastguard Worker 913*1b3f573fSAndroid Build Coastguard Worker// clang-format on 914*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND-END (19 expansions) 915*1b3f573fSAndroid Build Coastguard Worker 916*1b3f573fSAndroid Build Coastguard Worker- (void)writeMessageSetExtension:(int32_t)fieldNumber 917*1b3f573fSAndroid Build Coastguard Worker value:(GPBMessage *)value { 918*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, 919*1b3f573fSAndroid Build Coastguard Worker GPBWireFormatStartGroup); 920*1b3f573fSAndroid Build Coastguard Worker GPBWriteUInt32(&state_, GPBWireFormatMessageSetTypeId, fieldNumber); 921*1b3f573fSAndroid Build Coastguard Worker [self writeMessage:GPBWireFormatMessageSetMessage value:value]; 922*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, 923*1b3f573fSAndroid Build Coastguard Worker GPBWireFormatEndGroup); 924*1b3f573fSAndroid Build Coastguard Worker} 925*1b3f573fSAndroid Build Coastguard Worker 926*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawMessageSetExtension:(int32_t)fieldNumber value:(NSData *)value { 927*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, 928*1b3f573fSAndroid Build Coastguard Worker GPBWireFormatStartGroup); 929*1b3f573fSAndroid Build Coastguard Worker GPBWriteUInt32(&state_, GPBWireFormatMessageSetTypeId, fieldNumber); 930*1b3f573fSAndroid Build Coastguard Worker [self writeBytes:GPBWireFormatMessageSetMessage value:value]; 931*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem, 932*1b3f573fSAndroid Build Coastguard Worker GPBWireFormatEndGroup); 933*1b3f573fSAndroid Build Coastguard Worker} 934*1b3f573fSAndroid Build Coastguard Worker 935*1b3f573fSAndroid Build Coastguard Worker- (void)flush { 936*1b3f573fSAndroid Build Coastguard Worker if (state_.output != nil) { 937*1b3f573fSAndroid Build Coastguard Worker GPBRefreshBuffer(&state_); 938*1b3f573fSAndroid Build Coastguard Worker } 939*1b3f573fSAndroid Build Coastguard Worker} 940*1b3f573fSAndroid Build Coastguard Worker 941*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawByte:(uint8_t)value { 942*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawByte(&state_, value); 943*1b3f573fSAndroid Build Coastguard Worker} 944*1b3f573fSAndroid Build Coastguard Worker 945*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawData:(const NSData *)data { 946*1b3f573fSAndroid Build Coastguard Worker [self writeRawPtr:[data bytes] offset:0 length:[data length]]; 947*1b3f573fSAndroid Build Coastguard Worker} 948*1b3f573fSAndroid Build Coastguard Worker 949*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawPtr:(const void *)value 950*1b3f573fSAndroid Build Coastguard Worker offset:(size_t)offset 951*1b3f573fSAndroid Build Coastguard Worker length:(size_t)length { 952*1b3f573fSAndroid Build Coastguard Worker if (value == nil || length == 0) { 953*1b3f573fSAndroid Build Coastguard Worker return; 954*1b3f573fSAndroid Build Coastguard Worker } 955*1b3f573fSAndroid Build Coastguard Worker 956*1b3f573fSAndroid Build Coastguard Worker NSUInteger bufferLength = state_.size; 957*1b3f573fSAndroid Build Coastguard Worker NSUInteger bufferBytesLeft = bufferLength - state_.position; 958*1b3f573fSAndroid Build Coastguard Worker if (bufferBytesLeft >= length) { 959*1b3f573fSAndroid Build Coastguard Worker // We have room in the current buffer. 960*1b3f573fSAndroid Build Coastguard Worker memcpy(state_.bytes + state_.position, ((uint8_t *)value) + offset, length); 961*1b3f573fSAndroid Build Coastguard Worker state_.position += length; 962*1b3f573fSAndroid Build Coastguard Worker } else { 963*1b3f573fSAndroid Build Coastguard Worker // Write extends past current buffer. Fill the rest of this buffer and 964*1b3f573fSAndroid Build Coastguard Worker // flush. 965*1b3f573fSAndroid Build Coastguard Worker size_t bytesWritten = bufferBytesLeft; 966*1b3f573fSAndroid Build Coastguard Worker memcpy(state_.bytes + state_.position, ((uint8_t *)value) + offset, 967*1b3f573fSAndroid Build Coastguard Worker bytesWritten); 968*1b3f573fSAndroid Build Coastguard Worker offset += bytesWritten; 969*1b3f573fSAndroid Build Coastguard Worker length -= bytesWritten; 970*1b3f573fSAndroid Build Coastguard Worker state_.position = bufferLength; 971*1b3f573fSAndroid Build Coastguard Worker GPBRefreshBuffer(&state_); 972*1b3f573fSAndroid Build Coastguard Worker bufferLength = state_.size; 973*1b3f573fSAndroid Build Coastguard Worker 974*1b3f573fSAndroid Build Coastguard Worker // Now deal with the rest. 975*1b3f573fSAndroid Build Coastguard Worker // Since we have an output stream, this is our buffer 976*1b3f573fSAndroid Build Coastguard Worker // and buffer offset == 0 977*1b3f573fSAndroid Build Coastguard Worker if (length <= bufferLength) { 978*1b3f573fSAndroid Build Coastguard Worker // Fits in new buffer. 979*1b3f573fSAndroid Build Coastguard Worker memcpy(state_.bytes, ((uint8_t *)value) + offset, length); 980*1b3f573fSAndroid Build Coastguard Worker state_.position = length; 981*1b3f573fSAndroid Build Coastguard Worker } else { 982*1b3f573fSAndroid Build Coastguard Worker // Write is very big. Let's do it all at once. 983*1b3f573fSAndroid Build Coastguard Worker NSInteger written = [state_.output write:((uint8_t *)value) + offset maxLength:length]; 984*1b3f573fSAndroid Build Coastguard Worker if (written != (NSInteger)length) { 985*1b3f573fSAndroid Build Coastguard Worker [NSException raise:GPBCodedOutputStreamException_WriteFailed format:@""]; 986*1b3f573fSAndroid Build Coastguard Worker } 987*1b3f573fSAndroid Build Coastguard Worker } 988*1b3f573fSAndroid Build Coastguard Worker } 989*1b3f573fSAndroid Build Coastguard Worker} 990*1b3f573fSAndroid Build Coastguard Worker 991*1b3f573fSAndroid Build Coastguard Worker- (void)writeTag:(uint32_t)fieldNumber format:(GPBWireFormat)format { 992*1b3f573fSAndroid Build Coastguard Worker GPBWriteTagWithFormat(&state_, fieldNumber, format); 993*1b3f573fSAndroid Build Coastguard Worker} 994*1b3f573fSAndroid Build Coastguard Worker 995*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawVarint32:(int32_t)value { 996*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, value); 997*1b3f573fSAndroid Build Coastguard Worker} 998*1b3f573fSAndroid Build Coastguard Worker 999*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawVarintSizeTAs32:(size_t)value { 1000*1b3f573fSAndroid Build Coastguard Worker // Note the truncation. 1001*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint32(&state_, (int32_t)value); 1002*1b3f573fSAndroid Build Coastguard Worker} 1003*1b3f573fSAndroid Build Coastguard Worker 1004*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawVarint64:(int64_t)value { 1005*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawVarint64(&state_, value); 1006*1b3f573fSAndroid Build Coastguard Worker} 1007*1b3f573fSAndroid Build Coastguard Worker 1008*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawLittleEndian32:(int32_t)value { 1009*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian32(&state_, value); 1010*1b3f573fSAndroid Build Coastguard Worker} 1011*1b3f573fSAndroid Build Coastguard Worker 1012*1b3f573fSAndroid Build Coastguard Worker- (void)writeRawLittleEndian64:(int64_t)value { 1013*1b3f573fSAndroid Build Coastguard Worker GPBWriteRawLittleEndian64(&state_, value); 1014*1b3f573fSAndroid Build Coastguard Worker} 1015*1b3f573fSAndroid Build Coastguard Worker 1016*1b3f573fSAndroid Build Coastguard Worker#pragma clang diagnostic pop 1017*1b3f573fSAndroid Build Coastguard Worker 1018*1b3f573fSAndroid Build Coastguard Worker@end 1019*1b3f573fSAndroid Build Coastguard Worker 1020*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeDoubleSizeNoTag(Float64 value) { 1021*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1022*1b3f573fSAndroid Build Coastguard Worker return LITTLE_ENDIAN_64_SIZE; 1023*1b3f573fSAndroid Build Coastguard Worker} 1024*1b3f573fSAndroid Build Coastguard Worker 1025*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeFloatSizeNoTag(Float32 value) { 1026*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1027*1b3f573fSAndroid Build Coastguard Worker return LITTLE_ENDIAN_32_SIZE; 1028*1b3f573fSAndroid Build Coastguard Worker} 1029*1b3f573fSAndroid Build Coastguard Worker 1030*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeUInt64SizeNoTag(uint64_t value) { 1031*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint64Size(value); 1032*1b3f573fSAndroid Build Coastguard Worker} 1033*1b3f573fSAndroid Build Coastguard Worker 1034*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeInt64SizeNoTag(int64_t value) { 1035*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint64Size(value); 1036*1b3f573fSAndroid Build Coastguard Worker} 1037*1b3f573fSAndroid Build Coastguard Worker 1038*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeInt32SizeNoTag(int32_t value) { 1039*1b3f573fSAndroid Build Coastguard Worker if (value >= 0) { 1040*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32Size(value); 1041*1b3f573fSAndroid Build Coastguard Worker } else { 1042*1b3f573fSAndroid Build Coastguard Worker // Must sign-extend. 1043*1b3f573fSAndroid Build Coastguard Worker return 10; 1044*1b3f573fSAndroid Build Coastguard Worker } 1045*1b3f573fSAndroid Build Coastguard Worker} 1046*1b3f573fSAndroid Build Coastguard Worker 1047*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSizeTSizeAsInt32NoTag(size_t value) { 1048*1b3f573fSAndroid Build Coastguard Worker return GPBComputeInt32SizeNoTag((int32_t)value); 1049*1b3f573fSAndroid Build Coastguard Worker} 1050*1b3f573fSAndroid Build Coastguard Worker 1051*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeFixed64SizeNoTag(uint64_t value) { 1052*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1053*1b3f573fSAndroid Build Coastguard Worker return LITTLE_ENDIAN_64_SIZE; 1054*1b3f573fSAndroid Build Coastguard Worker} 1055*1b3f573fSAndroid Build Coastguard Worker 1056*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeFixed32SizeNoTag(uint32_t value) { 1057*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1058*1b3f573fSAndroid Build Coastguard Worker return LITTLE_ENDIAN_32_SIZE; 1059*1b3f573fSAndroid Build Coastguard Worker} 1060*1b3f573fSAndroid Build Coastguard Worker 1061*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeBoolSizeNoTag(BOOL value) { 1062*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1063*1b3f573fSAndroid Build Coastguard Worker return 1; 1064*1b3f573fSAndroid Build Coastguard Worker} 1065*1b3f573fSAndroid Build Coastguard Worker 1066*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeStringSizeNoTag(NSString *value) { 1067*1b3f573fSAndroid Build Coastguard Worker NSUInteger length = [value lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 1068*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32SizeForInteger(length) + length; 1069*1b3f573fSAndroid Build Coastguard Worker} 1070*1b3f573fSAndroid Build Coastguard Worker 1071*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeGroupSizeNoTag(GPBMessage *value) { 1072*1b3f573fSAndroid Build Coastguard Worker return [value serializedSize]; 1073*1b3f573fSAndroid Build Coastguard Worker} 1074*1b3f573fSAndroid Build Coastguard Worker 1075*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value) { 1076*1b3f573fSAndroid Build Coastguard Worker return value.serializedSize; 1077*1b3f573fSAndroid Build Coastguard Worker} 1078*1b3f573fSAndroid Build Coastguard Worker 1079*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeMessageSizeNoTag(GPBMessage *value) { 1080*1b3f573fSAndroid Build Coastguard Worker size_t size = [value serializedSize]; 1081*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32SizeForInteger(size) + size; 1082*1b3f573fSAndroid Build Coastguard Worker} 1083*1b3f573fSAndroid Build Coastguard Worker 1084*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeBytesSizeNoTag(NSData *value) { 1085*1b3f573fSAndroid Build Coastguard Worker NSUInteger valueLength = [value length]; 1086*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32SizeForInteger(valueLength) + valueLength; 1087*1b3f573fSAndroid Build Coastguard Worker} 1088*1b3f573fSAndroid Build Coastguard Worker 1089*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeUInt32SizeNoTag(int32_t value) { 1090*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32Size(value); 1091*1b3f573fSAndroid Build Coastguard Worker} 1092*1b3f573fSAndroid Build Coastguard Worker 1093*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeEnumSizeNoTag(int32_t value) { 1094*1b3f573fSAndroid Build Coastguard Worker return GPBComputeInt32SizeNoTag(value); 1095*1b3f573fSAndroid Build Coastguard Worker} 1096*1b3f573fSAndroid Build Coastguard Worker 1097*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSFixed32SizeNoTag(int32_t value) { 1098*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1099*1b3f573fSAndroid Build Coastguard Worker return LITTLE_ENDIAN_32_SIZE; 1100*1b3f573fSAndroid Build Coastguard Worker} 1101*1b3f573fSAndroid Build Coastguard Worker 1102*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSFixed64SizeNoTag(int64_t value) { 1103*1b3f573fSAndroid Build Coastguard Worker#pragma unused(value) 1104*1b3f573fSAndroid Build Coastguard Worker return LITTLE_ENDIAN_64_SIZE; 1105*1b3f573fSAndroid Build Coastguard Worker} 1106*1b3f573fSAndroid Build Coastguard Worker 1107*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSInt32SizeNoTag(int32_t value) { 1108*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32Size(GPBEncodeZigZag32(value)); 1109*1b3f573fSAndroid Build Coastguard Worker} 1110*1b3f573fSAndroid Build Coastguard Worker 1111*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSInt64SizeNoTag(int64_t value) { 1112*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint64Size(GPBEncodeZigZag64(value)); 1113*1b3f573fSAndroid Build Coastguard Worker} 1114*1b3f573fSAndroid Build Coastguard Worker 1115*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeDoubleSize(int32_t fieldNumber, double value) { 1116*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeDoubleSizeNoTag(value); 1117*1b3f573fSAndroid Build Coastguard Worker} 1118*1b3f573fSAndroid Build Coastguard Worker 1119*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeFloatSize(int32_t fieldNumber, float value) { 1120*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeFloatSizeNoTag(value); 1121*1b3f573fSAndroid Build Coastguard Worker} 1122*1b3f573fSAndroid Build Coastguard Worker 1123*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeUInt64Size(int32_t fieldNumber, uint64_t value) { 1124*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeUInt64SizeNoTag(value); 1125*1b3f573fSAndroid Build Coastguard Worker} 1126*1b3f573fSAndroid Build Coastguard Worker 1127*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeInt64Size(int32_t fieldNumber, int64_t value) { 1128*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeInt64SizeNoTag(value); 1129*1b3f573fSAndroid Build Coastguard Worker} 1130*1b3f573fSAndroid Build Coastguard Worker 1131*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeInt32Size(int32_t fieldNumber, int32_t value) { 1132*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeInt32SizeNoTag(value); 1133*1b3f573fSAndroid Build Coastguard Worker} 1134*1b3f573fSAndroid Build Coastguard Worker 1135*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeFixed64Size(int32_t fieldNumber, uint64_t value) { 1136*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeFixed64SizeNoTag(value); 1137*1b3f573fSAndroid Build Coastguard Worker} 1138*1b3f573fSAndroid Build Coastguard Worker 1139*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeFixed32Size(int32_t fieldNumber, uint32_t value) { 1140*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeFixed32SizeNoTag(value); 1141*1b3f573fSAndroid Build Coastguard Worker} 1142*1b3f573fSAndroid Build Coastguard Worker 1143*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeBoolSize(int32_t fieldNumber, BOOL value) { 1144*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeBoolSizeNoTag(value); 1145*1b3f573fSAndroid Build Coastguard Worker} 1146*1b3f573fSAndroid Build Coastguard Worker 1147*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeStringSize(int32_t fieldNumber, NSString *value) { 1148*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeStringSizeNoTag(value); 1149*1b3f573fSAndroid Build Coastguard Worker} 1150*1b3f573fSAndroid Build Coastguard Worker 1151*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeGroupSize(int32_t fieldNumber, GPBMessage *value) { 1152*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) * 2 + GPBComputeGroupSizeNoTag(value); 1153*1b3f573fSAndroid Build Coastguard Worker} 1154*1b3f573fSAndroid Build Coastguard Worker 1155*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeUnknownGroupSize(int32_t fieldNumber, 1156*1b3f573fSAndroid Build Coastguard Worker GPBUnknownFieldSet *value) { 1157*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) * 2 + 1158*1b3f573fSAndroid Build Coastguard Worker GPBComputeUnknownGroupSizeNoTag(value); 1159*1b3f573fSAndroid Build Coastguard Worker} 1160*1b3f573fSAndroid Build Coastguard Worker 1161*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value) { 1162*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeMessageSizeNoTag(value); 1163*1b3f573fSAndroid Build Coastguard Worker} 1164*1b3f573fSAndroid Build Coastguard Worker 1165*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value) { 1166*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeBytesSizeNoTag(value); 1167*1b3f573fSAndroid Build Coastguard Worker} 1168*1b3f573fSAndroid Build Coastguard Worker 1169*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value) { 1170*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeUInt32SizeNoTag(value); 1171*1b3f573fSAndroid Build Coastguard Worker} 1172*1b3f573fSAndroid Build Coastguard Worker 1173*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeEnumSize(int32_t fieldNumber, int32_t value) { 1174*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeEnumSizeNoTag(value); 1175*1b3f573fSAndroid Build Coastguard Worker} 1176*1b3f573fSAndroid Build Coastguard Worker 1177*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSFixed32Size(int32_t fieldNumber, int32_t value) { 1178*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeSFixed32SizeNoTag(value); 1179*1b3f573fSAndroid Build Coastguard Worker} 1180*1b3f573fSAndroid Build Coastguard Worker 1181*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSFixed64Size(int32_t fieldNumber, int64_t value) { 1182*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeSFixed64SizeNoTag(value); 1183*1b3f573fSAndroid Build Coastguard Worker} 1184*1b3f573fSAndroid Build Coastguard Worker 1185*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSInt32Size(int32_t fieldNumber, int32_t value) { 1186*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + GPBComputeSInt32SizeNoTag(value); 1187*1b3f573fSAndroid Build Coastguard Worker} 1188*1b3f573fSAndroid Build Coastguard Worker 1189*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeSInt64Size(int32_t fieldNumber, int64_t value) { 1190*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(fieldNumber) + 1191*1b3f573fSAndroid Build Coastguard Worker GPBComputeRawVarint64Size(GPBEncodeZigZag64(value)); 1192*1b3f573fSAndroid Build Coastguard Worker} 1193*1b3f573fSAndroid Build Coastguard Worker 1194*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeMessageSetExtensionSize(int32_t fieldNumber, 1195*1b3f573fSAndroid Build Coastguard Worker GPBMessage *value) { 1196*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(GPBWireFormatMessageSetItem) * 2 + 1197*1b3f573fSAndroid Build Coastguard Worker GPBComputeUInt32Size(GPBWireFormatMessageSetTypeId, fieldNumber) + 1198*1b3f573fSAndroid Build Coastguard Worker GPBComputeMessageSize(GPBWireFormatMessageSetMessage, value); 1199*1b3f573fSAndroid Build Coastguard Worker} 1200*1b3f573fSAndroid Build Coastguard Worker 1201*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeRawMessageSetExtensionSize(int32_t fieldNumber, 1202*1b3f573fSAndroid Build Coastguard Worker NSData *value) { 1203*1b3f573fSAndroid Build Coastguard Worker return GPBComputeTagSize(GPBWireFormatMessageSetItem) * 2 + 1204*1b3f573fSAndroid Build Coastguard Worker GPBComputeUInt32Size(GPBWireFormatMessageSetTypeId, fieldNumber) + 1205*1b3f573fSAndroid Build Coastguard Worker GPBComputeBytesSize(GPBWireFormatMessageSetMessage, value); 1206*1b3f573fSAndroid Build Coastguard Worker} 1207*1b3f573fSAndroid Build Coastguard Worker 1208*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeTagSize(int32_t fieldNumber) { 1209*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32Size( 1210*1b3f573fSAndroid Build Coastguard Worker GPBWireFormatMakeTag(fieldNumber, GPBWireFormatVarint)); 1211*1b3f573fSAndroid Build Coastguard Worker} 1212*1b3f573fSAndroid Build Coastguard Worker 1213*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType) { 1214*1b3f573fSAndroid Build Coastguard Worker size_t result = GPBComputeTagSize(field_number); 1215*1b3f573fSAndroid Build Coastguard Worker if (dataType == GPBDataTypeGroup) { 1216*1b3f573fSAndroid Build Coastguard Worker // Groups have both a start and an end tag. 1217*1b3f573fSAndroid Build Coastguard Worker return result * 2; 1218*1b3f573fSAndroid Build Coastguard Worker } else { 1219*1b3f573fSAndroid Build Coastguard Worker return result; 1220*1b3f573fSAndroid Build Coastguard Worker } 1221*1b3f573fSAndroid Build Coastguard Worker} 1222*1b3f573fSAndroid Build Coastguard Worker 1223*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeRawVarint32Size(int32_t value) { 1224*1b3f573fSAndroid Build Coastguard Worker // value is treated as unsigned, so it won't be sign-extended if negative. 1225*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffff << 7)) == 0) return 1; 1226*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffff << 14)) == 0) return 2; 1227*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffff << 21)) == 0) return 3; 1228*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffff << 28)) == 0) return 4; 1229*1b3f573fSAndroid Build Coastguard Worker return 5; 1230*1b3f573fSAndroid Build Coastguard Worker} 1231*1b3f573fSAndroid Build Coastguard Worker 1232*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeRawVarint32SizeForInteger(NSInteger value) { 1233*1b3f573fSAndroid Build Coastguard Worker // Note the truncation. 1234*1b3f573fSAndroid Build Coastguard Worker return GPBComputeRawVarint32Size((int32_t)value); 1235*1b3f573fSAndroid Build Coastguard Worker} 1236*1b3f573fSAndroid Build Coastguard Worker 1237*1b3f573fSAndroid Build Coastguard Workersize_t GPBComputeRawVarint64Size(int64_t value) { 1238*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 7)) == 0) return 1; 1239*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 14)) == 0) return 2; 1240*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 21)) == 0) return 3; 1241*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 28)) == 0) return 4; 1242*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 35)) == 0) return 5; 1243*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 42)) == 0) return 6; 1244*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 49)) == 0) return 7; 1245*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 56)) == 0) return 8; 1246*1b3f573fSAndroid Build Coastguard Worker if ((value & (0xffffffffffffffffL << 63)) == 0) return 9; 1247*1b3f573fSAndroid Build Coastguard Worker return 10; 1248*1b3f573fSAndroid Build Coastguard Worker} 1249