xref: /aosp_15_r20/external/cronet/third_party/protobuf/objectivec/GPBCodedOutputStream.m (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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