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