GPBCodedOutputStream.h 23.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
// https://developers.google.com/protocol-buffers/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#import <Foundation/Foundation.h>

33
#import "GPBRuntimeTypes.h"
34 35 36 37 38 39 40 41 42 43 44 45 46
#import "GPBWireFormat.h"

@class GPBBoolArray;
@class GPBDoubleArray;
@class GPBEnumArray;
@class GPBFloatArray;
@class GPBMessage;
@class GPBInt32Array;
@class GPBInt64Array;
@class GPBUInt32Array;
@class GPBUInt64Array;
@class GPBUnknownFieldSet;

47 48
NS_ASSUME_NONNULL_BEGIN

49 50 51 52 53 54
/**
 * @c GPBCodedOutputStream exception names.
 **/
extern NSString *const GPBCodedOutputStreamException_OutOfSpace;
extern NSString *const GPBCodedOutputStreamException_WriteFailed;

55 56 57 58 59 60
/**
 * Writes out protocol message fields.
 *
 * The common uses of protocol buffers shouldn't need to use this class.
 * GPBMessage's provide a -data method that will serialize the message for you.
 *
61 62 63
 * @note Any -write* api can raise the GPBCodedOutputStreamException_*
 *       exceptions.
 *
64 65
 * @note Subclassing of GPBCodedOutputStream is NOT supported.
 **/
66 67
@interface GPBCodedOutputStream : NSObject

68 69 70 71 72 73 74 75
/**
 * Creates a stream to fill in the given data. Data must be sized to fit or
 * an error will be raised when out of space.
 *
 * @param data The data where the stream will be written to.
 *
 * @return A newly instanced GPBCodedOutputStream.
 **/
76
+ (instancetype)streamWithData:(NSMutableData *)data;
77

78 79 80 81 82 83 84
/**
 * Creates a stream to write into the given NSOutputStream.
 *
 * @param output The output stream where the stream will be written to.
 *
 * @return A newly instanced GPBCodedOutputStream.
 **/
85 86
+ (instancetype)streamWithOutputStream:(NSOutputStream *)output;

87 88 89 90 91 92 93 94
/**
 * Initializes a stream to fill in the given data. Data must be sized to fit
 * or an error will be raised when out of space.
 *
 * @param data The data where the stream will be written to.
 *
 * @return A newly initialized GPBCodedOutputStream.
 **/
95
- (instancetype)initWithData:(NSMutableData *)data;
96

97 98 99 100 101 102 103
/**
 * Initializes a stream to write into the given @c NSOutputStream.
 *
 * @param output The output stream where the stream will be written to.
 *
 * @return A newly initialized GPBCodedOutputStream.
 **/
104
- (instancetype)initWithOutputStream:(NSOutputStream *)output;
105

106 107 108
/**
 * Flush any buffered data out.
 **/
109 110
- (void)flush;

111 112 113 114 115
/**
 * Write the raw byte out.
 *
 * @param value The value to write out.
 **/
116 117
- (void)writeRawByte:(uint8_t)value;

118 119 120 121 122 123
/**
 * Write the tag for the given field number and wire format.
 *
 * @param fieldNumber The field number.
 * @param format      The wire format the data for the field will be in.
 **/
124 125
- (void)writeTag:(uint32_t)fieldNumber format:(GPBWireFormat)format;

126 127 128 129 130
/**
 * Write a 32bit value out in little endian format.
 *
 * @param value The value to write out.
 **/
131
- (void)writeRawLittleEndian32:(int32_t)value;
132 133 134 135 136
/**
 * Write a 64bit value out in little endian format.
 *
 * @param value The value to write out.
 **/
137 138
- (void)writeRawLittleEndian64:(int64_t)value;

139 140 141 142 143
/**
 * Write a 32bit value out in varint format.
 *
 * @param value The value to write out.
 **/
144
- (void)writeRawVarint32:(int32_t)value;
145 146 147 148 149
/**
 * Write a 64bit value out in varint format.
 *
 * @param value The value to write out.
 **/
150 151
- (void)writeRawVarint64:(int64_t)value;

152 153 154 155 156 157 158
/**
 * Write a size_t out as a 32bit varint value.
 *
 * @note This will truncate 64 bit values to 32.
 *
 * @param value The value to write out.
 **/
159 160
- (void)writeRawVarintSizeTAs32:(size_t)value;

161 162 163 164 165
/**
 * Writes the contents of an NSData out.
 *
 * @param data The data to write out.
 **/
166
- (void)writeRawData:(NSData *)data;
167 168 169 170 171 172 173
/**
 * Writes out the given data.
 *
 * @param data   The data blob to write out.
 * @param offset The offset into the blob to start writing out.
 * @param length The number of bytes from the blob to write out.
 **/
174 175 176 177 178 179 180
- (void)writeRawPtr:(const void *)data
             offset:(size_t)offset
             length:(size_t)length;

//%PDDM-EXPAND _WRITE_DECLS()
// This block of code is generated, do not edit it directly.

181 182 183 184 185 186
/**
 * Write a double for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
187
- (void)writeDouble:(int32_t)fieldNumber value:(double)value;
188 189 190 191 192 193 194
/**
 * Write a packed array of double for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
195 196 197
- (void)writeDoubleArray:(int32_t)fieldNumber
                  values:(GPBDoubleArray *)values
                     tag:(uint32_t)tag;
198 199 200 201 202
/**
 * Write a double without any tag.
 *
 * @param value The value to write out.
 **/
203 204
- (void)writeDoubleNoTag:(double)value;

205 206 207 208 209 210
/**
 * Write a float for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
211
- (void)writeFloat:(int32_t)fieldNumber value:(float)value;
212 213 214 215 216 217 218
/**
 * Write a packed array of float for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
219 220 221
- (void)writeFloatArray:(int32_t)fieldNumber
                 values:(GPBFloatArray *)values
                    tag:(uint32_t)tag;
222 223 224 225 226
/**
 * Write a float without any tag.
 *
 * @param value The value to write out.
 **/
227 228
- (void)writeFloatNoTag:(float)value;

229 230 231 232 233 234
/**
 * Write a uint64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
235
- (void)writeUInt64:(int32_t)fieldNumber value:(uint64_t)value;
236 237 238 239 240 241 242
/**
 * Write a packed array of uint64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
243 244 245
- (void)writeUInt64Array:(int32_t)fieldNumber
                  values:(GPBUInt64Array *)values
                     tag:(uint32_t)tag;
246 247 248 249 250
/**
 * Write a uint64_t without any tag.
 *
 * @param value The value to write out.
 **/
251 252
- (void)writeUInt64NoTag:(uint64_t)value;

253 254 255 256 257 258
/**
 * Write a int64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
259
- (void)writeInt64:(int32_t)fieldNumber value:(int64_t)value;
260 261 262 263 264 265 266
/**
 * Write a packed array of int64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
267 268 269
- (void)writeInt64Array:(int32_t)fieldNumber
                 values:(GPBInt64Array *)values
                    tag:(uint32_t)tag;
270 271 272 273 274
/**
 * Write a int64_t without any tag.
 *
 * @param value The value to write out.
 **/
275 276
- (void)writeInt64NoTag:(int64_t)value;

277 278 279 280 281 282
/**
 * Write a int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
283
- (void)writeInt32:(int32_t)fieldNumber value:(int32_t)value;
284 285 286 287 288 289 290
/**
 * Write a packed array of int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
291 292 293
- (void)writeInt32Array:(int32_t)fieldNumber
                 values:(GPBInt32Array *)values
                    tag:(uint32_t)tag;
294 295 296 297 298
/**
 * Write a int32_t without any tag.
 *
 * @param value The value to write out.
 **/
299 300
- (void)writeInt32NoTag:(int32_t)value;

301 302 303 304 305 306
/**
 * Write a uint32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
307
- (void)writeUInt32:(int32_t)fieldNumber value:(uint32_t)value;
308 309 310 311 312 313 314
/**
 * Write a packed array of uint32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
315 316 317
- (void)writeUInt32Array:(int32_t)fieldNumber
                  values:(GPBUInt32Array *)values
                     tag:(uint32_t)tag;
318 319 320 321 322
/**
 * Write a uint32_t without any tag.
 *
 * @param value The value to write out.
 **/
323 324
- (void)writeUInt32NoTag:(uint32_t)value;

325 326 327 328 329 330
/**
 * Write a uint64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
331
- (void)writeFixed64:(int32_t)fieldNumber value:(uint64_t)value;
332 333 334 335 336 337 338
/**
 * Write a packed array of uint64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
339 340 341
- (void)writeFixed64Array:(int32_t)fieldNumber
                   values:(GPBUInt64Array *)values
                      tag:(uint32_t)tag;
342 343 344 345 346
/**
 * Write a uint64_t without any tag.
 *
 * @param value The value to write out.
 **/
347 348
- (void)writeFixed64NoTag:(uint64_t)value;

349 350 351 352 353 354
/**
 * Write a uint32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
355
- (void)writeFixed32:(int32_t)fieldNumber value:(uint32_t)value;
356 357 358 359 360 361 362
/**
 * Write a packed array of uint32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
363 364 365
- (void)writeFixed32Array:(int32_t)fieldNumber
                   values:(GPBUInt32Array *)values
                      tag:(uint32_t)tag;
366 367 368 369 370
/**
 * Write a uint32_t without any tag.
 *
 * @param value The value to write out.
 **/
371 372
- (void)writeFixed32NoTag:(uint32_t)value;

373 374 375 376 377 378
/**
 * Write a int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
379
- (void)writeSInt32:(int32_t)fieldNumber value:(int32_t)value;
380 381 382 383 384 385 386
/**
 * Write a packed array of int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
387 388 389
- (void)writeSInt32Array:(int32_t)fieldNumber
                  values:(GPBInt32Array *)values
                     tag:(uint32_t)tag;
390 391 392 393 394
/**
 * Write a int32_t without any tag.
 *
 * @param value The value to write out.
 **/
395 396
- (void)writeSInt32NoTag:(int32_t)value;

397 398 399 400 401 402
/**
 * Write a int64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
403
- (void)writeSInt64:(int32_t)fieldNumber value:(int64_t)value;
404 405 406 407 408 409 410
/**
 * Write a packed array of int64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
411 412 413
- (void)writeSInt64Array:(int32_t)fieldNumber
                  values:(GPBInt64Array *)values
                     tag:(uint32_t)tag;
414 415 416 417 418
/**
 * Write a int64_t without any tag.
 *
 * @param value The value to write out.
 **/
419 420
- (void)writeSInt64NoTag:(int64_t)value;

421 422 423 424 425 426
/**
 * Write a int64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
427
- (void)writeSFixed64:(int32_t)fieldNumber value:(int64_t)value;
428 429 430 431 432 433 434
/**
 * Write a packed array of int64_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
435 436 437
- (void)writeSFixed64Array:(int32_t)fieldNumber
                    values:(GPBInt64Array *)values
                       tag:(uint32_t)tag;
438 439 440 441 442
/**
 * Write a int64_t without any tag.
 *
 * @param value The value to write out.
 **/
443 444
- (void)writeSFixed64NoTag:(int64_t)value;

445 446 447 448 449 450
/**
 * Write a int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
451
- (void)writeSFixed32:(int32_t)fieldNumber value:(int32_t)value;
452 453 454 455 456 457 458
/**
 * Write a packed array of int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
459 460 461
- (void)writeSFixed32Array:(int32_t)fieldNumber
                    values:(GPBInt32Array *)values
                       tag:(uint32_t)tag;
462 463 464 465 466
/**
 * Write a int32_t without any tag.
 *
 * @param value The value to write out.
 **/
467 468
- (void)writeSFixed32NoTag:(int32_t)value;

469 470 471 472 473 474
/**
 * Write a BOOL for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
475
- (void)writeBool:(int32_t)fieldNumber value:(BOOL)value;
476 477 478 479 480 481 482
/**
 * Write a packed array of BOOL for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
483 484 485
- (void)writeBoolArray:(int32_t)fieldNumber
                values:(GPBBoolArray *)values
                   tag:(uint32_t)tag;
486 487 488 489 490
/**
 * Write a BOOL without any tag.
 *
 * @param value The value to write out.
 **/
491 492
- (void)writeBoolNoTag:(BOOL)value;

493 494 495 496 497 498
/**
 * Write a int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
499
- (void)writeEnum:(int32_t)fieldNumber value:(int32_t)value;
500 501 502 503 504 505 506
/**
 * Write a packed array of int32_t for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 * @param tag         The tag assigned to the values.
 **/
507 508 509
- (void)writeEnumArray:(int32_t)fieldNumber
                values:(GPBEnumArray *)values
                   tag:(uint32_t)tag;
510 511 512 513 514
/**
 * Write a int32_t without any tag.
 *
 * @param value The value to write out.
 **/
515 516
- (void)writeEnumNoTag:(int32_t)value;

517 518 519 520 521 522
/**
 * Write a NSString for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
523
- (void)writeString:(int32_t)fieldNumber value:(NSString *)value;
524 525 526 527 528 529
/**
 * Write an array of NSString for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 **/
530
- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray<NSString*> *)values;
531 532 533 534 535
/**
 * Write a NSString without any tag.
 *
 * @param value The value to write out.
 **/
536 537
- (void)writeStringNoTag:(NSString *)value;

538 539 540 541 542 543
/**
 * Write a GPBMessage for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
544
- (void)writeMessage:(int32_t)fieldNumber value:(GPBMessage *)value;
545 546 547 548 549 550
/**
 * Write an array of GPBMessage for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 **/
551
- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray<GPBMessage*> *)values;
552 553 554 555 556
/**
 * Write a GPBMessage without any tag.
 *
 * @param value The value to write out.
 **/
557 558
- (void)writeMessageNoTag:(GPBMessage *)value;

559 560 561 562 563 564
/**
 * Write a NSData for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
565
- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value;
566 567 568 569 570 571
/**
 * Write an array of NSData for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 **/
572
- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray<NSData*> *)values;
573 574 575 576 577
/**
 * Write a NSData without any tag.
 *
 * @param value The value to write out.
 **/
578
- (void)writeBytesNoTag:(NSData *)value;
579

580 581 582 583 584 585
/**
 * Write a GPBMessage for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
586 587
- (void)writeGroup:(int32_t)fieldNumber
             value:(GPBMessage *)value;
588 589 590 591 592 593
/**
 * Write an array of GPBMessage for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 **/
594
- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray<GPBMessage*> *)values;
595 596 597 598 599 600
/**
 * Write a GPBMessage without any tag (but does write the endGroup tag).
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
601 602 603
- (void)writeGroupNoTag:(int32_t)fieldNumber
                  value:(GPBMessage *)value;

604 605 606 607 608 609
/**
 * Write a GPBUnknownFieldSet for the given field number.
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
610 611
- (void)writeUnknownGroup:(int32_t)fieldNumber
                    value:(GPBUnknownFieldSet *)value;
612 613 614 615 616 617
/**
 * Write an array of GPBUnknownFieldSet for the given field number.
 *
 * @param fieldNumber The field number assigned to the values.
 * @param values      The values to write out.
 **/
618
- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray<GPBUnknownFieldSet*> *)values;
619 620 621 622 623 624
/**
 * Write a GPBUnknownFieldSet without any tag (but does write the endGroup tag).
 *
 * @param fieldNumber The field number assigned to the value.
 * @param value       The value to write out.
 **/
625 626 627 628 629
- (void)writeUnknownGroupNoTag:(int32_t)fieldNumber
                         value:(GPBUnknownFieldSet *)value;

//%PDDM-EXPAND-END _WRITE_DECLS()

630 631 632 633 634 635 636
/**
Write a MessageSet extension field to the stream. For historical reasons,
the wire format differs from normal fields.

@param fieldNumber The extension field number to write out.
@param value       The message from where to get the extension.
*/
637 638
- (void)writeMessageSetExtension:(int32_t)fieldNumber value:(GPBMessage *)value;

639 640 641 642 643 644 645
/**
Write an unparsed MessageSet extension field to the stream. For historical
reasons, the wire format differs from normal fields.

@param fieldNumber The extension field number to write out.
@param value       The raw message from where to get the extension.
*/
646 647 648 649
- (void)writeRawMessageSetExtension:(int32_t)fieldNumber value:(NSData *)value;

@end

650 651
NS_ASSUME_NONNULL_END

652 653
// Write methods for types that can be in packed arrays.
//%PDDM-DEFINE _WRITE_PACKABLE_DECLS(NAME, ARRAY_TYPE, TYPE)
654 655 656 657 658 659
//%/**
//% * Write a TYPE for the given field number.
//% *
//% * @param fieldNumber The field number assigned to the value.
//% * @param value       The value to write out.
//% **/
660
//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE)value;
661 662 663 664 665 666 667
//%/**
//% * Write a packed array of TYPE for the given field number.
//% *
//% * @param fieldNumber The field number assigned to the values.
//% * @param values      The values to write out.
//% * @param tag         The tag assigned to the values.
//% **/
668 669 670
//%- (void)write##NAME##Array:(int32_t)fieldNumber
//%       NAME$S     values:(GPB##ARRAY_TYPE##Array *)values
//%       NAME$S        tag:(uint32_t)tag;
671 672 673 674 675
//%/**
//% * Write a TYPE without any tag.
//% *
//% * @param value The value to write out.
//% **/
676 677 678 679
//%- (void)write##NAME##NoTag:(TYPE)value;
//%
// Write methods for types that aren't in packed arrays.
//%PDDM-DEFINE _WRITE_UNPACKABLE_DECLS(NAME, TYPE)
680 681 682 683 684 685
//%/**
//% * Write a TYPE for the given field number.
//% *
//% * @param fieldNumber The field number assigned to the value.
//% * @param value       The value to write out.
//% **/
686
//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE *)value;
687 688 689 690 691 692
//%/**
//% * Write an array of TYPE for the given field number.
//% *
//% * @param fieldNumber The field number assigned to the values.
//% * @param values      The values to write out.
//% **/
693
//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray<##TYPE##*> *)values;
694 695 696 697 698
//%/**
//% * Write a TYPE without any tag.
//% *
//% * @param value The value to write out.
//% **/
699
//%- (void)write##NAME##NoTag:(TYPE *)value;
700 701 702
//%
// Special write methods for Groups.
//%PDDM-DEFINE _WRITE_GROUP_DECLS(NAME, TYPE)
703 704 705 706 707 708
//%/**
//% * Write a TYPE for the given field number.
//% *
//% * @param fieldNumber The field number assigned to the value.
//% * @param value       The value to write out.
//% **/
709
//%- (void)write##NAME:(int32_t)fieldNumber
710
//%       NAME$S value:(TYPE *)value;
711 712 713 714 715 716
//%/**
//% * Write an array of TYPE for the given field number.
//% *
//% * @param fieldNumber The field number assigned to the values.
//% * @param values      The values to write out.
//% **/
717
//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray<##TYPE##*> *)values;
718 719 720 721 722 723
//%/**
//% * Write a TYPE without any tag (but does write the endGroup tag).
//% *
//% * @param fieldNumber The field number assigned to the value.
//% * @param value       The value to write out.
//% **/
724
//%- (void)write##NAME##NoTag:(int32_t)fieldNumber
725
//%            NAME$S value:(TYPE *)value;
726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743
//%

// One macro to hide it all up above.
//%PDDM-DEFINE _WRITE_DECLS()
//%_WRITE_PACKABLE_DECLS(Double, Double, double)
//%_WRITE_PACKABLE_DECLS(Float, Float, float)
//%_WRITE_PACKABLE_DECLS(UInt64, UInt64, uint64_t)
//%_WRITE_PACKABLE_DECLS(Int64, Int64, int64_t)
//%_WRITE_PACKABLE_DECLS(Int32, Int32, int32_t)
//%_WRITE_PACKABLE_DECLS(UInt32, UInt32, uint32_t)
//%_WRITE_PACKABLE_DECLS(Fixed64, UInt64, uint64_t)
//%_WRITE_PACKABLE_DECLS(Fixed32, UInt32, uint32_t)
//%_WRITE_PACKABLE_DECLS(SInt32, Int32, int32_t)
//%_WRITE_PACKABLE_DECLS(SInt64, Int64, int64_t)
//%_WRITE_PACKABLE_DECLS(SFixed64, Int64, int64_t)
//%_WRITE_PACKABLE_DECLS(SFixed32, Int32, int32_t)
//%_WRITE_PACKABLE_DECLS(Bool, Bool, BOOL)
//%_WRITE_PACKABLE_DECLS(Enum, Enum, int32_t)
744 745 746 747 748
//%_WRITE_UNPACKABLE_DECLS(String, NSString)
//%_WRITE_UNPACKABLE_DECLS(Message, GPBMessage)
//%_WRITE_UNPACKABLE_DECLS(Bytes, NSData)
//%_WRITE_GROUP_DECLS(Group, GPBMessage)
//%_WRITE_GROUP_DECLS(UnknownGroup, GPBUnknownFieldSet)