blob: 638b2882d3f8270640120bd26f8fe14f1e1689fb [file] [log] [blame]
Brian Silverman9c614bc2016-02-15 20:20:02 -05001// Protocol Buffers - Google's data interchange format
2// Copyright 2015 Google Inc. All rights reserved.
3// https://developers.google.com/protocol-buffers/
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright
10// notice, this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above
12// copyright notice, this list of conditions and the following disclaimer
13// in the documentation and/or other materials provided with the
14// distribution.
15// * Neither the name of Google Inc. nor the names of its
16// contributors may be used to endorse or promote products derived from
17// this software without specific prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31#import <Foundation/Foundation.h>
32
33#import "GPBRuntimeTypes.h"
34
Brian Silverman9c614bc2016-02-15 20:20:02 -050035NS_ASSUME_NONNULL_BEGIN
36
37//%PDDM-EXPAND DECLARE_ARRAYS()
38// This block of code is generated, do not edit it directly.
39
40#pragma mark - Int32
41
Austin Schuh40c16522018-10-28 20:27:54 -070042/**
43 * Class used for repeated fields of int32_t values. This performs better than
44 * boxing into NSNumbers in NSArrays.
45 *
46 * @note This class is not meant to be subclassed.
47 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -050048@interface GPBInt32Array : NSObject <NSCopying>
49
Austin Schuh40c16522018-10-28 20:27:54 -070050/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -050051@property(nonatomic, readonly) NSUInteger count;
52
Austin Schuh40c16522018-10-28 20:27:54 -070053/**
54 * @return A newly instanced and empty GPBInt32Array.
55 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -050056+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -070057
58/**
59 * Creates and initializes a GPBInt32Array with the single element given.
60 *
61 * @param value The value to be placed in the array.
62 *
63 * @return A newly instanced GPBInt32Array with value in it.
64 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -050065+ (instancetype)arrayWithValue:(int32_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -070066
67/**
68 * Creates and initializes a GPBInt32Array with the contents of the given
69 * array.
70 *
71 * @param array Array with the contents to be put into the new array.
72 *
73 * @return A newly instanced GPBInt32Array with the contents of array.
74 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -050075+ (instancetype)arrayWithValueArray:(GPBInt32Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -070076
77/**
78 * Creates and initializes a GPBInt32Array with the given capacity.
79 *
80 * @param count The capacity needed for the array.
81 *
82 * @return A newly instanced GPBInt32Array with a capacity of count.
83 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -050084+ (instancetype)arrayWithCapacity:(NSUInteger)count;
85
Austin Schuh40c16522018-10-28 20:27:54 -070086/**
87 * @return A newly initialized and empty GPBInt32Array.
88 **/
89- (instancetype)init NS_DESIGNATED_INITIALIZER;
90
91/**
92 * Initializes the array, copying the given values.
93 *
94 * @param values An array with the values to put inside this array.
95 * @param count The number of elements to copy into the array.
96 *
97 * @return A newly initialized GPBInt32Array with a copy of the values.
98 **/
99- (instancetype)initWithValues:(const int32_t [__nullable])values
100 count:(NSUInteger)count;
101
102/**
103 * Initializes the array, copying the given values.
104 *
105 * @param array An array with the values to put inside this array.
106 *
107 * @return A newly initialized GPBInt32Array with a copy of the values.
108 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500109- (instancetype)initWithValueArray:(GPBInt32Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700110
111/**
112 * Initializes the array with the given capacity.
113 *
114 * @param count The capacity needed for the array.
115 *
116 * @return A newly initialized GPBInt32Array with a capacity of count.
117 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500118- (instancetype)initWithCapacity:(NSUInteger)count;
119
Austin Schuh40c16522018-10-28 20:27:54 -0700120/**
121 * Gets the value at the given index.
122 *
123 * @param index The index of the value to get.
124 *
125 * @return The value at the given index.
126 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500127- (int32_t)valueAtIndex:(NSUInteger)index;
128
Austin Schuh40c16522018-10-28 20:27:54 -0700129/**
130 * Enumerates the values on this array with the given block.
131 *
132 * @param block The block to enumerate with.
133 * **value**: The current value being enumerated.
134 * **idx**: The index of the current value.
135 * **stop**: A pointer to a boolean that when set stops the enumeration.
136 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500137- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -0700138
139/**
140 * Enumerates the values on this array with the given block.
141 *
142 * @param opts Options to control the enumeration.
143 * @param block The block to enumerate with.
144 * **value**: The current value being enumerated.
145 * **idx**: The index of the current value.
146 * **stop**: A pointer to a boolean that when set stops the enumeration.
147 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500148- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
149 usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
150
Austin Schuh40c16522018-10-28 20:27:54 -0700151/**
152 * Adds a value to this array.
153 *
154 * @param value The value to add to this array.
155 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500156- (void)addValue:(int32_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700157
158/**
159 * Adds values to this array.
160 *
161 * @param values The values to add to this array.
162 * @param count The number of elements to add.
163 **/
164- (void)addValues:(const int32_t [__nullable])values count:(NSUInteger)count;
165
166/**
167 * Adds the values from the given array to this array.
168 *
169 * @param array The array containing the elements to add to this array.
170 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500171- (void)addValuesFromArray:(GPBInt32Array *)array;
172
Austin Schuh40c16522018-10-28 20:27:54 -0700173/**
174 * Inserts a value into the given position.
175 *
176 * @param value The value to add to this array.
177 * @param index The index into which to insert the value.
178 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500179- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index;
180
Austin Schuh40c16522018-10-28 20:27:54 -0700181/**
182 * Replaces the value at the given index with the given value.
183 *
184 * @param index The index for which to replace the value.
185 * @param value The value to replace with.
186 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500187- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value;
188
Austin Schuh40c16522018-10-28 20:27:54 -0700189/**
190 * Removes the value at the given index.
191 *
192 * @param index The index of the value to remove.
193 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500194- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -0700195
196/**
197 * Removes all the values from this array.
198 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500199- (void)removeAll;
200
Austin Schuh40c16522018-10-28 20:27:54 -0700201/**
202 * Exchanges the values between the given indexes.
203 *
204 * @param idx1 The index of the first element to exchange.
205 * @param idx2 The index of the second element to exchange.
206 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500207- (void)exchangeValueAtIndex:(NSUInteger)idx1
208 withValueAtIndex:(NSUInteger)idx2;
209
210@end
211
212#pragma mark - UInt32
213
Austin Schuh40c16522018-10-28 20:27:54 -0700214/**
215 * Class used for repeated fields of uint32_t values. This performs better than
216 * boxing into NSNumbers in NSArrays.
217 *
218 * @note This class is not meant to be subclassed.
219 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500220@interface GPBUInt32Array : NSObject <NSCopying>
221
Austin Schuh40c16522018-10-28 20:27:54 -0700222/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -0500223@property(nonatomic, readonly) NSUInteger count;
224
Austin Schuh40c16522018-10-28 20:27:54 -0700225/**
226 * @return A newly instanced and empty GPBUInt32Array.
227 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500228+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700229
230/**
231 * Creates and initializes a GPBUInt32Array with the single element given.
232 *
233 * @param value The value to be placed in the array.
234 *
235 * @return A newly instanced GPBUInt32Array with value in it.
236 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500237+ (instancetype)arrayWithValue:(uint32_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700238
239/**
240 * Creates and initializes a GPBUInt32Array with the contents of the given
241 * array.
242 *
243 * @param array Array with the contents to be put into the new array.
244 *
245 * @return A newly instanced GPBUInt32Array with the contents of array.
246 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500247+ (instancetype)arrayWithValueArray:(GPBUInt32Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700248
249/**
250 * Creates and initializes a GPBUInt32Array with the given capacity.
251 *
252 * @param count The capacity needed for the array.
253 *
254 * @return A newly instanced GPBUInt32Array with a capacity of count.
255 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500256+ (instancetype)arrayWithCapacity:(NSUInteger)count;
257
Austin Schuh40c16522018-10-28 20:27:54 -0700258/**
259 * @return A newly initialized and empty GPBUInt32Array.
260 **/
261- (instancetype)init NS_DESIGNATED_INITIALIZER;
262
263/**
264 * Initializes the array, copying the given values.
265 *
266 * @param values An array with the values to put inside this array.
267 * @param count The number of elements to copy into the array.
268 *
269 * @return A newly initialized GPBUInt32Array with a copy of the values.
270 **/
271- (instancetype)initWithValues:(const uint32_t [__nullable])values
272 count:(NSUInteger)count;
273
274/**
275 * Initializes the array, copying the given values.
276 *
277 * @param array An array with the values to put inside this array.
278 *
279 * @return A newly initialized GPBUInt32Array with a copy of the values.
280 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500281- (instancetype)initWithValueArray:(GPBUInt32Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700282
283/**
284 * Initializes the array with the given capacity.
285 *
286 * @param count The capacity needed for the array.
287 *
288 * @return A newly initialized GPBUInt32Array with a capacity of count.
289 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500290- (instancetype)initWithCapacity:(NSUInteger)count;
291
Austin Schuh40c16522018-10-28 20:27:54 -0700292/**
293 * Gets the value at the given index.
294 *
295 * @param index The index of the value to get.
296 *
297 * @return The value at the given index.
298 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500299- (uint32_t)valueAtIndex:(NSUInteger)index;
300
Austin Schuh40c16522018-10-28 20:27:54 -0700301/**
302 * Enumerates the values on this array with the given block.
303 *
304 * @param block The block to enumerate with.
305 * **value**: The current value being enumerated.
306 * **idx**: The index of the current value.
307 * **stop**: A pointer to a boolean that when set stops the enumeration.
308 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500309- (void)enumerateValuesWithBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -0700310
311/**
312 * Enumerates the values on this array with the given block.
313 *
314 * @param opts Options to control the enumeration.
315 * @param block The block to enumerate with.
316 * **value**: The current value being enumerated.
317 * **idx**: The index of the current value.
318 * **stop**: A pointer to a boolean that when set stops the enumeration.
319 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500320- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
321 usingBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block;
322
Austin Schuh40c16522018-10-28 20:27:54 -0700323/**
324 * Adds a value to this array.
325 *
326 * @param value The value to add to this array.
327 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500328- (void)addValue:(uint32_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700329
330/**
331 * Adds values to this array.
332 *
333 * @param values The values to add to this array.
334 * @param count The number of elements to add.
335 **/
336- (void)addValues:(const uint32_t [__nullable])values count:(NSUInteger)count;
337
338/**
339 * Adds the values from the given array to this array.
340 *
341 * @param array The array containing the elements to add to this array.
342 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500343- (void)addValuesFromArray:(GPBUInt32Array *)array;
344
Austin Schuh40c16522018-10-28 20:27:54 -0700345/**
346 * Inserts a value into the given position.
347 *
348 * @param value The value to add to this array.
349 * @param index The index into which to insert the value.
350 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500351- (void)insertValue:(uint32_t)value atIndex:(NSUInteger)index;
352
Austin Schuh40c16522018-10-28 20:27:54 -0700353/**
354 * Replaces the value at the given index with the given value.
355 *
356 * @param index The index for which to replace the value.
357 * @param value The value to replace with.
358 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500359- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint32_t)value;
360
Austin Schuh40c16522018-10-28 20:27:54 -0700361/**
362 * Removes the value at the given index.
363 *
364 * @param index The index of the value to remove.
365 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500366- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -0700367
368/**
369 * Removes all the values from this array.
370 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500371- (void)removeAll;
372
Austin Schuh40c16522018-10-28 20:27:54 -0700373/**
374 * Exchanges the values between the given indexes.
375 *
376 * @param idx1 The index of the first element to exchange.
377 * @param idx2 The index of the second element to exchange.
378 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500379- (void)exchangeValueAtIndex:(NSUInteger)idx1
380 withValueAtIndex:(NSUInteger)idx2;
381
382@end
383
384#pragma mark - Int64
385
Austin Schuh40c16522018-10-28 20:27:54 -0700386/**
387 * Class used for repeated fields of int64_t values. This performs better than
388 * boxing into NSNumbers in NSArrays.
389 *
390 * @note This class is not meant to be subclassed.
391 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500392@interface GPBInt64Array : NSObject <NSCopying>
393
Austin Schuh40c16522018-10-28 20:27:54 -0700394/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -0500395@property(nonatomic, readonly) NSUInteger count;
396
Austin Schuh40c16522018-10-28 20:27:54 -0700397/**
398 * @return A newly instanced and empty GPBInt64Array.
399 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500400+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700401
402/**
403 * Creates and initializes a GPBInt64Array with the single element given.
404 *
405 * @param value The value to be placed in the array.
406 *
407 * @return A newly instanced GPBInt64Array with value in it.
408 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500409+ (instancetype)arrayWithValue:(int64_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700410
411/**
412 * Creates and initializes a GPBInt64Array with the contents of the given
413 * array.
414 *
415 * @param array Array with the contents to be put into the new array.
416 *
417 * @return A newly instanced GPBInt64Array with the contents of array.
418 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500419+ (instancetype)arrayWithValueArray:(GPBInt64Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700420
421/**
422 * Creates and initializes a GPBInt64Array with the given capacity.
423 *
424 * @param count The capacity needed for the array.
425 *
426 * @return A newly instanced GPBInt64Array with a capacity of count.
427 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500428+ (instancetype)arrayWithCapacity:(NSUInteger)count;
429
Austin Schuh40c16522018-10-28 20:27:54 -0700430/**
431 * @return A newly initialized and empty GPBInt64Array.
432 **/
433- (instancetype)init NS_DESIGNATED_INITIALIZER;
434
435/**
436 * Initializes the array, copying the given values.
437 *
438 * @param values An array with the values to put inside this array.
439 * @param count The number of elements to copy into the array.
440 *
441 * @return A newly initialized GPBInt64Array with a copy of the values.
442 **/
443- (instancetype)initWithValues:(const int64_t [__nullable])values
444 count:(NSUInteger)count;
445
446/**
447 * Initializes the array, copying the given values.
448 *
449 * @param array An array with the values to put inside this array.
450 *
451 * @return A newly initialized GPBInt64Array with a copy of the values.
452 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500453- (instancetype)initWithValueArray:(GPBInt64Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700454
455/**
456 * Initializes the array with the given capacity.
457 *
458 * @param count The capacity needed for the array.
459 *
460 * @return A newly initialized GPBInt64Array with a capacity of count.
461 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500462- (instancetype)initWithCapacity:(NSUInteger)count;
463
Austin Schuh40c16522018-10-28 20:27:54 -0700464/**
465 * Gets the value at the given index.
466 *
467 * @param index The index of the value to get.
468 *
469 * @return The value at the given index.
470 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500471- (int64_t)valueAtIndex:(NSUInteger)index;
472
Austin Schuh40c16522018-10-28 20:27:54 -0700473/**
474 * Enumerates the values on this array with the given block.
475 *
476 * @param block The block to enumerate with.
477 * **value**: The current value being enumerated.
478 * **idx**: The index of the current value.
479 * **stop**: A pointer to a boolean that when set stops the enumeration.
480 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500481- (void)enumerateValuesWithBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -0700482
483/**
484 * Enumerates the values on this array with the given block.
485 *
486 * @param opts Options to control the enumeration.
487 * @param block The block to enumerate with.
488 * **value**: The current value being enumerated.
489 * **idx**: The index of the current value.
490 * **stop**: A pointer to a boolean that when set stops the enumeration.
491 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500492- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
493 usingBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block;
494
Austin Schuh40c16522018-10-28 20:27:54 -0700495/**
496 * Adds a value to this array.
497 *
498 * @param value The value to add to this array.
499 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500500- (void)addValue:(int64_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700501
502/**
503 * Adds values to this array.
504 *
505 * @param values The values to add to this array.
506 * @param count The number of elements to add.
507 **/
508- (void)addValues:(const int64_t [__nullable])values count:(NSUInteger)count;
509
510/**
511 * Adds the values from the given array to this array.
512 *
513 * @param array The array containing the elements to add to this array.
514 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500515- (void)addValuesFromArray:(GPBInt64Array *)array;
516
Austin Schuh40c16522018-10-28 20:27:54 -0700517/**
518 * Inserts a value into the given position.
519 *
520 * @param value The value to add to this array.
521 * @param index The index into which to insert the value.
522 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500523- (void)insertValue:(int64_t)value atIndex:(NSUInteger)index;
524
Austin Schuh40c16522018-10-28 20:27:54 -0700525/**
526 * Replaces the value at the given index with the given value.
527 *
528 * @param index The index for which to replace the value.
529 * @param value The value to replace with.
530 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500531- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int64_t)value;
532
Austin Schuh40c16522018-10-28 20:27:54 -0700533/**
534 * Removes the value at the given index.
535 *
536 * @param index The index of the value to remove.
537 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500538- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -0700539
540/**
541 * Removes all the values from this array.
542 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500543- (void)removeAll;
544
Austin Schuh40c16522018-10-28 20:27:54 -0700545/**
546 * Exchanges the values between the given indexes.
547 *
548 * @param idx1 The index of the first element to exchange.
549 * @param idx2 The index of the second element to exchange.
550 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500551- (void)exchangeValueAtIndex:(NSUInteger)idx1
552 withValueAtIndex:(NSUInteger)idx2;
553
554@end
555
556#pragma mark - UInt64
557
Austin Schuh40c16522018-10-28 20:27:54 -0700558/**
559 * Class used for repeated fields of uint64_t values. This performs better than
560 * boxing into NSNumbers in NSArrays.
561 *
562 * @note This class is not meant to be subclassed.
563 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500564@interface GPBUInt64Array : NSObject <NSCopying>
565
Austin Schuh40c16522018-10-28 20:27:54 -0700566/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -0500567@property(nonatomic, readonly) NSUInteger count;
568
Austin Schuh40c16522018-10-28 20:27:54 -0700569/**
570 * @return A newly instanced and empty GPBUInt64Array.
571 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500572+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700573
574/**
575 * Creates and initializes a GPBUInt64Array with the single element given.
576 *
577 * @param value The value to be placed in the array.
578 *
579 * @return A newly instanced GPBUInt64Array with value in it.
580 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500581+ (instancetype)arrayWithValue:(uint64_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700582
583/**
584 * Creates and initializes a GPBUInt64Array with the contents of the given
585 * array.
586 *
587 * @param array Array with the contents to be put into the new array.
588 *
589 * @return A newly instanced GPBUInt64Array with the contents of array.
590 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500591+ (instancetype)arrayWithValueArray:(GPBUInt64Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700592
593/**
594 * Creates and initializes a GPBUInt64Array with the given capacity.
595 *
596 * @param count The capacity needed for the array.
597 *
598 * @return A newly instanced GPBUInt64Array with a capacity of count.
599 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500600+ (instancetype)arrayWithCapacity:(NSUInteger)count;
601
Austin Schuh40c16522018-10-28 20:27:54 -0700602/**
603 * @return A newly initialized and empty GPBUInt64Array.
604 **/
605- (instancetype)init NS_DESIGNATED_INITIALIZER;
606
607/**
608 * Initializes the array, copying the given values.
609 *
610 * @param values An array with the values to put inside this array.
611 * @param count The number of elements to copy into the array.
612 *
613 * @return A newly initialized GPBUInt64Array with a copy of the values.
614 **/
615- (instancetype)initWithValues:(const uint64_t [__nullable])values
616 count:(NSUInteger)count;
617
618/**
619 * Initializes the array, copying the given values.
620 *
621 * @param array An array with the values to put inside this array.
622 *
623 * @return A newly initialized GPBUInt64Array with a copy of the values.
624 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500625- (instancetype)initWithValueArray:(GPBUInt64Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700626
627/**
628 * Initializes the array with the given capacity.
629 *
630 * @param count The capacity needed for the array.
631 *
632 * @return A newly initialized GPBUInt64Array with a capacity of count.
633 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500634- (instancetype)initWithCapacity:(NSUInteger)count;
635
Austin Schuh40c16522018-10-28 20:27:54 -0700636/**
637 * Gets the value at the given index.
638 *
639 * @param index The index of the value to get.
640 *
641 * @return The value at the given index.
642 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500643- (uint64_t)valueAtIndex:(NSUInteger)index;
644
Austin Schuh40c16522018-10-28 20:27:54 -0700645/**
646 * Enumerates the values on this array with the given block.
647 *
648 * @param block The block to enumerate with.
649 * **value**: The current value being enumerated.
650 * **idx**: The index of the current value.
651 * **stop**: A pointer to a boolean that when set stops the enumeration.
652 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500653- (void)enumerateValuesWithBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -0700654
655/**
656 * Enumerates the values on this array with the given block.
657 *
658 * @param opts Options to control the enumeration.
659 * @param block The block to enumerate with.
660 * **value**: The current value being enumerated.
661 * **idx**: The index of the current value.
662 * **stop**: A pointer to a boolean that when set stops the enumeration.
663 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500664- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
665 usingBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block;
666
Austin Schuh40c16522018-10-28 20:27:54 -0700667/**
668 * Adds a value to this array.
669 *
670 * @param value The value to add to this array.
671 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500672- (void)addValue:(uint64_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700673
674/**
675 * Adds values to this array.
676 *
677 * @param values The values to add to this array.
678 * @param count The number of elements to add.
679 **/
680- (void)addValues:(const uint64_t [__nullable])values count:(NSUInteger)count;
681
682/**
683 * Adds the values from the given array to this array.
684 *
685 * @param array The array containing the elements to add to this array.
686 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500687- (void)addValuesFromArray:(GPBUInt64Array *)array;
688
Austin Schuh40c16522018-10-28 20:27:54 -0700689/**
690 * Inserts a value into the given position.
691 *
692 * @param value The value to add to this array.
693 * @param index The index into which to insert the value.
694 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500695- (void)insertValue:(uint64_t)value atIndex:(NSUInteger)index;
696
Austin Schuh40c16522018-10-28 20:27:54 -0700697/**
698 * Replaces the value at the given index with the given value.
699 *
700 * @param index The index for which to replace the value.
701 * @param value The value to replace with.
702 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500703- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint64_t)value;
704
Austin Schuh40c16522018-10-28 20:27:54 -0700705/**
706 * Removes the value at the given index.
707 *
708 * @param index The index of the value to remove.
709 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500710- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -0700711
712/**
713 * Removes all the values from this array.
714 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500715- (void)removeAll;
716
Austin Schuh40c16522018-10-28 20:27:54 -0700717/**
718 * Exchanges the values between the given indexes.
719 *
720 * @param idx1 The index of the first element to exchange.
721 * @param idx2 The index of the second element to exchange.
722 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500723- (void)exchangeValueAtIndex:(NSUInteger)idx1
724 withValueAtIndex:(NSUInteger)idx2;
725
726@end
727
728#pragma mark - Float
729
Austin Schuh40c16522018-10-28 20:27:54 -0700730/**
731 * Class used for repeated fields of float values. This performs better than
732 * boxing into NSNumbers in NSArrays.
733 *
734 * @note This class is not meant to be subclassed.
735 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500736@interface GPBFloatArray : NSObject <NSCopying>
737
Austin Schuh40c16522018-10-28 20:27:54 -0700738/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -0500739@property(nonatomic, readonly) NSUInteger count;
740
Austin Schuh40c16522018-10-28 20:27:54 -0700741/**
742 * @return A newly instanced and empty GPBFloatArray.
743 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500744+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700745
746/**
747 * Creates and initializes a GPBFloatArray with the single element given.
748 *
749 * @param value The value to be placed in the array.
750 *
751 * @return A newly instanced GPBFloatArray with value in it.
752 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500753+ (instancetype)arrayWithValue:(float)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700754
755/**
756 * Creates and initializes a GPBFloatArray with the contents of the given
757 * array.
758 *
759 * @param array Array with the contents to be put into the new array.
760 *
761 * @return A newly instanced GPBFloatArray with the contents of array.
762 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500763+ (instancetype)arrayWithValueArray:(GPBFloatArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700764
765/**
766 * Creates and initializes a GPBFloatArray with the given capacity.
767 *
768 * @param count The capacity needed for the array.
769 *
770 * @return A newly instanced GPBFloatArray with a capacity of count.
771 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500772+ (instancetype)arrayWithCapacity:(NSUInteger)count;
773
Austin Schuh40c16522018-10-28 20:27:54 -0700774/**
775 * @return A newly initialized and empty GPBFloatArray.
776 **/
777- (instancetype)init NS_DESIGNATED_INITIALIZER;
778
779/**
780 * Initializes the array, copying the given values.
781 *
782 * @param values An array with the values to put inside this array.
783 * @param count The number of elements to copy into the array.
784 *
785 * @return A newly initialized GPBFloatArray with a copy of the values.
786 **/
787- (instancetype)initWithValues:(const float [__nullable])values
788 count:(NSUInteger)count;
789
790/**
791 * Initializes the array, copying the given values.
792 *
793 * @param array An array with the values to put inside this array.
794 *
795 * @return A newly initialized GPBFloatArray with a copy of the values.
796 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500797- (instancetype)initWithValueArray:(GPBFloatArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700798
799/**
800 * Initializes the array with the given capacity.
801 *
802 * @param count The capacity needed for the array.
803 *
804 * @return A newly initialized GPBFloatArray with a capacity of count.
805 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500806- (instancetype)initWithCapacity:(NSUInteger)count;
807
Austin Schuh40c16522018-10-28 20:27:54 -0700808/**
809 * Gets the value at the given index.
810 *
811 * @param index The index of the value to get.
812 *
813 * @return The value at the given index.
814 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500815- (float)valueAtIndex:(NSUInteger)index;
816
Austin Schuh40c16522018-10-28 20:27:54 -0700817/**
818 * Enumerates the values on this array with the given block.
819 *
820 * @param block The block to enumerate with.
821 * **value**: The current value being enumerated.
822 * **idx**: The index of the current value.
823 * **stop**: A pointer to a boolean that when set stops the enumeration.
824 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500825- (void)enumerateValuesWithBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -0700826
827/**
828 * Enumerates the values on this array with the given block.
829 *
830 * @param opts Options to control the enumeration.
831 * @param block The block to enumerate with.
832 * **value**: The current value being enumerated.
833 * **idx**: The index of the current value.
834 * **stop**: A pointer to a boolean that when set stops the enumeration.
835 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500836- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
837 usingBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block;
838
Austin Schuh40c16522018-10-28 20:27:54 -0700839/**
840 * Adds a value to this array.
841 *
842 * @param value The value to add to this array.
843 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500844- (void)addValue:(float)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700845
846/**
847 * Adds values to this array.
848 *
849 * @param values The values to add to this array.
850 * @param count The number of elements to add.
851 **/
852- (void)addValues:(const float [__nullable])values count:(NSUInteger)count;
853
854/**
855 * Adds the values from the given array to this array.
856 *
857 * @param array The array containing the elements to add to this array.
858 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500859- (void)addValuesFromArray:(GPBFloatArray *)array;
860
Austin Schuh40c16522018-10-28 20:27:54 -0700861/**
862 * Inserts a value into the given position.
863 *
864 * @param value The value to add to this array.
865 * @param index The index into which to insert the value.
866 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500867- (void)insertValue:(float)value atIndex:(NSUInteger)index;
868
Austin Schuh40c16522018-10-28 20:27:54 -0700869/**
870 * Replaces the value at the given index with the given value.
871 *
872 * @param index The index for which to replace the value.
873 * @param value The value to replace with.
874 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500875- (void)replaceValueAtIndex:(NSUInteger)index withValue:(float)value;
876
Austin Schuh40c16522018-10-28 20:27:54 -0700877/**
878 * Removes the value at the given index.
879 *
880 * @param index The index of the value to remove.
881 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500882- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -0700883
884/**
885 * Removes all the values from this array.
886 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500887- (void)removeAll;
888
Austin Schuh40c16522018-10-28 20:27:54 -0700889/**
890 * Exchanges the values between the given indexes.
891 *
892 * @param idx1 The index of the first element to exchange.
893 * @param idx2 The index of the second element to exchange.
894 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500895- (void)exchangeValueAtIndex:(NSUInteger)idx1
896 withValueAtIndex:(NSUInteger)idx2;
897
898@end
899
900#pragma mark - Double
901
Austin Schuh40c16522018-10-28 20:27:54 -0700902/**
903 * Class used for repeated fields of double values. This performs better than
904 * boxing into NSNumbers in NSArrays.
905 *
906 * @note This class is not meant to be subclassed.
907 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500908@interface GPBDoubleArray : NSObject <NSCopying>
909
Austin Schuh40c16522018-10-28 20:27:54 -0700910/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -0500911@property(nonatomic, readonly) NSUInteger count;
912
Austin Schuh40c16522018-10-28 20:27:54 -0700913/**
914 * @return A newly instanced and empty GPBDoubleArray.
915 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500916+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700917
918/**
919 * Creates and initializes a GPBDoubleArray with the single element given.
920 *
921 * @param value The value to be placed in the array.
922 *
923 * @return A newly instanced GPBDoubleArray with value in it.
924 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500925+ (instancetype)arrayWithValue:(double)value;
Austin Schuh40c16522018-10-28 20:27:54 -0700926
927/**
928 * Creates and initializes a GPBDoubleArray with the contents of the given
929 * array.
930 *
931 * @param array Array with the contents to be put into the new array.
932 *
933 * @return A newly instanced GPBDoubleArray with the contents of array.
934 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500935+ (instancetype)arrayWithValueArray:(GPBDoubleArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700936
937/**
938 * Creates and initializes a GPBDoubleArray with the given capacity.
939 *
940 * @param count The capacity needed for the array.
941 *
942 * @return A newly instanced GPBDoubleArray with a capacity of count.
943 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500944+ (instancetype)arrayWithCapacity:(NSUInteger)count;
945
Austin Schuh40c16522018-10-28 20:27:54 -0700946/**
947 * @return A newly initialized and empty GPBDoubleArray.
948 **/
949- (instancetype)init NS_DESIGNATED_INITIALIZER;
950
951/**
952 * Initializes the array, copying the given values.
953 *
954 * @param values An array with the values to put inside this array.
955 * @param count The number of elements to copy into the array.
956 *
957 * @return A newly initialized GPBDoubleArray with a copy of the values.
958 **/
959- (instancetype)initWithValues:(const double [__nullable])values
960 count:(NSUInteger)count;
961
962/**
963 * Initializes the array, copying the given values.
964 *
965 * @param array An array with the values to put inside this array.
966 *
967 * @return A newly initialized GPBDoubleArray with a copy of the values.
968 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500969- (instancetype)initWithValueArray:(GPBDoubleArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -0700970
971/**
972 * Initializes the array with the given capacity.
973 *
974 * @param count The capacity needed for the array.
975 *
976 * @return A newly initialized GPBDoubleArray with a capacity of count.
977 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500978- (instancetype)initWithCapacity:(NSUInteger)count;
979
Austin Schuh40c16522018-10-28 20:27:54 -0700980/**
981 * Gets the value at the given index.
982 *
983 * @param index The index of the value to get.
984 *
985 * @return The value at the given index.
986 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500987- (double)valueAtIndex:(NSUInteger)index;
988
Austin Schuh40c16522018-10-28 20:27:54 -0700989/**
990 * Enumerates the values on this array with the given block.
991 *
992 * @param block The block to enumerate with.
993 * **value**: The current value being enumerated.
994 * **idx**: The index of the current value.
995 * **stop**: A pointer to a boolean that when set stops the enumeration.
996 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -0500997- (void)enumerateValuesWithBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -0700998
999/**
1000 * Enumerates the values on this array with the given block.
1001 *
1002 * @param opts Options to control the enumeration.
1003 * @param block The block to enumerate with.
1004 * **value**: The current value being enumerated.
1005 * **idx**: The index of the current value.
1006 * **stop**: A pointer to a boolean that when set stops the enumeration.
1007 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001008- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
1009 usingBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block;
1010
Austin Schuh40c16522018-10-28 20:27:54 -07001011/**
1012 * Adds a value to this array.
1013 *
1014 * @param value The value to add to this array.
1015 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001016- (void)addValue:(double)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001017
1018/**
1019 * Adds values to this array.
1020 *
1021 * @param values The values to add to this array.
1022 * @param count The number of elements to add.
1023 **/
1024- (void)addValues:(const double [__nullable])values count:(NSUInteger)count;
1025
1026/**
1027 * Adds the values from the given array to this array.
1028 *
1029 * @param array The array containing the elements to add to this array.
1030 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001031- (void)addValuesFromArray:(GPBDoubleArray *)array;
1032
Austin Schuh40c16522018-10-28 20:27:54 -07001033/**
1034 * Inserts a value into the given position.
1035 *
1036 * @param value The value to add to this array.
1037 * @param index The index into which to insert the value.
1038 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001039- (void)insertValue:(double)value atIndex:(NSUInteger)index;
1040
Austin Schuh40c16522018-10-28 20:27:54 -07001041/**
1042 * Replaces the value at the given index with the given value.
1043 *
1044 * @param index The index for which to replace the value.
1045 * @param value The value to replace with.
1046 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001047- (void)replaceValueAtIndex:(NSUInteger)index withValue:(double)value;
1048
Austin Schuh40c16522018-10-28 20:27:54 -07001049/**
1050 * Removes the value at the given index.
1051 *
1052 * @param index The index of the value to remove.
1053 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001054- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -07001055
1056/**
1057 * Removes all the values from this array.
1058 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001059- (void)removeAll;
1060
Austin Schuh40c16522018-10-28 20:27:54 -07001061/**
1062 * Exchanges the values between the given indexes.
1063 *
1064 * @param idx1 The index of the first element to exchange.
1065 * @param idx2 The index of the second element to exchange.
1066 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001067- (void)exchangeValueAtIndex:(NSUInteger)idx1
1068 withValueAtIndex:(NSUInteger)idx2;
1069
1070@end
1071
1072#pragma mark - Bool
1073
Austin Schuh40c16522018-10-28 20:27:54 -07001074/**
1075 * Class used for repeated fields of BOOL values. This performs better than
1076 * boxing into NSNumbers in NSArrays.
1077 *
1078 * @note This class is not meant to be subclassed.
1079 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001080@interface GPBBoolArray : NSObject <NSCopying>
1081
Austin Schuh40c16522018-10-28 20:27:54 -07001082/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -05001083@property(nonatomic, readonly) NSUInteger count;
1084
Austin Schuh40c16522018-10-28 20:27:54 -07001085/**
1086 * @return A newly instanced and empty GPBBoolArray.
1087 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001088+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001089
1090/**
1091 * Creates and initializes a GPBBoolArray with the single element given.
1092 *
1093 * @param value The value to be placed in the array.
1094 *
1095 * @return A newly instanced GPBBoolArray with value in it.
1096 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001097+ (instancetype)arrayWithValue:(BOOL)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001098
1099/**
1100 * Creates and initializes a GPBBoolArray with the contents of the given
1101 * array.
1102 *
1103 * @param array Array with the contents to be put into the new array.
1104 *
1105 * @return A newly instanced GPBBoolArray with the contents of array.
1106 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001107+ (instancetype)arrayWithValueArray:(GPBBoolArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001108
1109/**
1110 * Creates and initializes a GPBBoolArray with the given capacity.
1111 *
1112 * @param count The capacity needed for the array.
1113 *
1114 * @return A newly instanced GPBBoolArray with a capacity of count.
1115 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001116+ (instancetype)arrayWithCapacity:(NSUInteger)count;
1117
Austin Schuh40c16522018-10-28 20:27:54 -07001118/**
1119 * @return A newly initialized and empty GPBBoolArray.
1120 **/
1121- (instancetype)init NS_DESIGNATED_INITIALIZER;
1122
1123/**
1124 * Initializes the array, copying the given values.
1125 *
1126 * @param values An array with the values to put inside this array.
1127 * @param count The number of elements to copy into the array.
1128 *
1129 * @return A newly initialized GPBBoolArray with a copy of the values.
1130 **/
1131- (instancetype)initWithValues:(const BOOL [__nullable])values
1132 count:(NSUInteger)count;
1133
1134/**
1135 * Initializes the array, copying the given values.
1136 *
1137 * @param array An array with the values to put inside this array.
1138 *
1139 * @return A newly initialized GPBBoolArray with a copy of the values.
1140 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001141- (instancetype)initWithValueArray:(GPBBoolArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001142
1143/**
1144 * Initializes the array with the given capacity.
1145 *
1146 * @param count The capacity needed for the array.
1147 *
1148 * @return A newly initialized GPBBoolArray with a capacity of count.
1149 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001150- (instancetype)initWithCapacity:(NSUInteger)count;
1151
Austin Schuh40c16522018-10-28 20:27:54 -07001152/**
1153 * Gets the value at the given index.
1154 *
1155 * @param index The index of the value to get.
1156 *
1157 * @return The value at the given index.
1158 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001159- (BOOL)valueAtIndex:(NSUInteger)index;
1160
Austin Schuh40c16522018-10-28 20:27:54 -07001161/**
1162 * Enumerates the values on this array with the given block.
1163 *
1164 * @param block The block to enumerate with.
1165 * **value**: The current value being enumerated.
1166 * **idx**: The index of the current value.
1167 * **stop**: A pointer to a boolean that when set stops the enumeration.
1168 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001169- (void)enumerateValuesWithBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -07001170
1171/**
1172 * Enumerates the values on this array with the given block.
1173 *
1174 * @param opts Options to control the enumeration.
1175 * @param block The block to enumerate with.
1176 * **value**: The current value being enumerated.
1177 * **idx**: The index of the current value.
1178 * **stop**: A pointer to a boolean that when set stops the enumeration.
1179 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001180- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
1181 usingBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block;
1182
Austin Schuh40c16522018-10-28 20:27:54 -07001183/**
1184 * Adds a value to this array.
1185 *
1186 * @param value The value to add to this array.
1187 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001188- (void)addValue:(BOOL)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001189
1190/**
1191 * Adds values to this array.
1192 *
1193 * @param values The values to add to this array.
1194 * @param count The number of elements to add.
1195 **/
1196- (void)addValues:(const BOOL [__nullable])values count:(NSUInteger)count;
1197
1198/**
1199 * Adds the values from the given array to this array.
1200 *
1201 * @param array The array containing the elements to add to this array.
1202 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001203- (void)addValuesFromArray:(GPBBoolArray *)array;
1204
Austin Schuh40c16522018-10-28 20:27:54 -07001205/**
1206 * Inserts a value into the given position.
1207 *
1208 * @param value The value to add to this array.
1209 * @param index The index into which to insert the value.
1210 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001211- (void)insertValue:(BOOL)value atIndex:(NSUInteger)index;
1212
Austin Schuh40c16522018-10-28 20:27:54 -07001213/**
1214 * Replaces the value at the given index with the given value.
1215 *
1216 * @param index The index for which to replace the value.
1217 * @param value The value to replace with.
1218 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001219- (void)replaceValueAtIndex:(NSUInteger)index withValue:(BOOL)value;
1220
Austin Schuh40c16522018-10-28 20:27:54 -07001221/**
1222 * Removes the value at the given index.
1223 *
1224 * @param index The index of the value to remove.
1225 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001226- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -07001227
1228/**
1229 * Removes all the values from this array.
1230 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001231- (void)removeAll;
1232
Austin Schuh40c16522018-10-28 20:27:54 -07001233/**
1234 * Exchanges the values between the given indexes.
1235 *
1236 * @param idx1 The index of the first element to exchange.
1237 * @param idx2 The index of the second element to exchange.
1238 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001239- (void)exchangeValueAtIndex:(NSUInteger)idx1
1240 withValueAtIndex:(NSUInteger)idx2;
1241
1242@end
1243
1244#pragma mark - Enum
1245
Austin Schuh40c16522018-10-28 20:27:54 -07001246/**
1247 * This class is used for repeated fields of int32_t values. This performs
1248 * better than boxing into NSNumbers in NSArrays.
1249 *
1250 * @note This class is not meant to be subclassed.
1251 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001252@interface GPBEnumArray : NSObject <NSCopying>
1253
Austin Schuh40c16522018-10-28 20:27:54 -07001254/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -05001255@property(nonatomic, readonly) NSUInteger count;
Austin Schuh40c16522018-10-28 20:27:54 -07001256/** The validation function to check if the enums are valid. */
Brian Silverman9c614bc2016-02-15 20:20:02 -05001257@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc;
1258
Austin Schuh40c16522018-10-28 20:27:54 -07001259/**
1260 * @return A newly instanced and empty GPBEnumArray.
1261 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001262+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001263
1264/**
1265 * Creates and initializes a GPBEnumArray with the enum validation function
1266 * given.
1267 *
1268 * @param func The enum validation function for the array.
1269 *
1270 * @return A newly instanced GPBEnumArray.
1271 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001272+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func;
Austin Schuh40c16522018-10-28 20:27:54 -07001273
1274/**
1275 * Creates and initializes a GPBEnumArray with the enum validation function
1276 * given and the single raw value given.
1277 *
1278 * @param func The enum validation function for the array.
1279 * @param value The raw value to add to this array.
1280 *
1281 * @return A newly instanced GPBEnumArray.
1282 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001283+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
1284 rawValue:(int32_t)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001285
1286/**
1287 * Creates and initializes a GPBEnumArray that adds the elements from the
1288 * given array.
1289 *
1290 * @param array Array containing the values to add to the new array.
1291 *
1292 * @return A newly instanced GPBEnumArray.
1293 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001294+ (instancetype)arrayWithValueArray:(GPBEnumArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001295
1296/**
1297 * Creates and initializes a GPBEnumArray with the given enum validation
1298 * function and with the givencapacity.
1299 *
1300 * @param func The enum validation function for the array.
1301 * @param count The capacity needed for the array.
1302 *
1303 * @return A newly instanced GPBEnumArray with a capacity of count.
1304 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001305+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
1306 capacity:(NSUInteger)count;
1307
Austin Schuh40c16522018-10-28 20:27:54 -07001308/**
1309 * Initializes the array with the given enum validation function.
1310 *
1311 * @param func The enum validation function for the array.
1312 *
1313 * @return A newly initialized GPBEnumArray with a copy of the values.
1314 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001315- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
Austin Schuh40c16522018-10-28 20:27:54 -07001316 NS_DESIGNATED_INITIALIZER;
1317
1318/**
1319 * Initializes the array, copying the given values.
1320 *
1321 * @param func The enum validation function for the array.
1322 * @param values An array with the values to put inside this array.
1323 * @param count The number of elements to copy into the array.
1324 *
1325 * @return A newly initialized GPBEnumArray with a copy of the values.
1326 **/
1327- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
1328 rawValues:(const int32_t [__nullable])values
1329 count:(NSUInteger)count;
1330
1331/**
1332 * Initializes the array, copying the given values.
1333 *
1334 * @param array An array with the values to put inside this array.
1335 *
1336 * @return A newly initialized GPBEnumArray with a copy of the values.
1337 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001338- (instancetype)initWithValueArray:(GPBEnumArray *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001339
1340/**
1341 * Initializes the array with the given capacity.
1342 *
1343 * @param func The enum validation function for the array.
1344 * @param count The capacity needed for the array.
1345 *
1346 * @return A newly initialized GPBEnumArray with a capacity of count.
1347 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001348- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
1349 capacity:(NSUInteger)count;
1350
1351// These will return kGPBUnrecognizedEnumeratorValue if the value at index is not a
1352// valid enumerator as defined by validationFunc. If the actual value is
1353// desired, use "raw" version of the method.
1354
Austin Schuh40c16522018-10-28 20:27:54 -07001355/**
1356 * Gets the value at the given index.
1357 *
1358 * @param index The index of the value to get.
1359 *
1360 * @return The value at the given index.
1361 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001362- (int32_t)valueAtIndex:(NSUInteger)index;
1363
Austin Schuh40c16522018-10-28 20:27:54 -07001364/**
1365 * Enumerates the values on this array with the given block.
1366 *
1367 * @param block The block to enumerate with.
1368 * **value**: The current value being enumerated.
1369 * **idx**: The index of the current value.
1370 * **stop**: A pointer to a boolean that when set stops the enumeration.
1371 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001372- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -07001373
1374/**
1375 * Enumerates the values on this array with the given block.
1376 *
1377 * @param opts Options to control the enumeration.
1378 * @param block The block to enumerate with.
1379 * **value**: The current value being enumerated.
1380 * **idx**: The index of the current value.
1381 * **stop**: A pointer to a boolean that when set stops the enumeration.
1382 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001383- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
1384 usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
1385
1386// These methods bypass the validationFunc to provide access to values that were not
1387// known at the time the binary was compiled.
1388
Austin Schuh40c16522018-10-28 20:27:54 -07001389/**
1390 * Gets the raw enum value at the given index.
1391 *
1392 * @param index The index of the raw enum value to get.
1393 *
1394 * @return The raw enum value at the given index.
1395 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001396- (int32_t)rawValueAtIndex:(NSUInteger)index;
1397
Austin Schuh40c16522018-10-28 20:27:54 -07001398/**
1399 * Enumerates the values on this array with the given block.
1400 *
1401 * @param block The block to enumerate with.
1402 * **value**: The current value being enumerated.
1403 * **idx**: The index of the current value.
1404 * **stop**: A pointer to a boolean that when set stops the enumeration.
1405 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001406- (void)enumerateRawValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -07001407
1408/**
1409 * Enumerates the values on this array with the given block.
1410 *
1411 * @param opts Options to control the enumeration.
1412 * @param block The block to enumerate with.
1413 * **value**: The current value being enumerated.
1414 * **idx**: The index of the current value.
1415 * **stop**: A pointer to a boolean that when set stops the enumeration.
1416 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001417- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts
1418 usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
1419
1420// If value is not a valid enumerator as defined by validationFunc, these
1421// methods will assert in debug, and will log in release and assign the value
1422// to the default value. Use the rawValue methods below to assign non enumerator
1423// values.
1424
Austin Schuh40c16522018-10-28 20:27:54 -07001425/**
1426 * Adds a value to this array.
1427 *
1428 * @param value The value to add to this array.
1429 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001430- (void)addValue:(int32_t)value;
Brian Silverman9c614bc2016-02-15 20:20:02 -05001431
Austin Schuh40c16522018-10-28 20:27:54 -07001432/**
1433 * Adds values to this array.
1434 *
1435 * @param values The values to add to this array.
1436 * @param count The number of elements to add.
1437 **/
1438- (void)addValues:(const int32_t [__nullable])values count:(NSUInteger)count;
1439
1440
1441/**
1442 * Inserts a value into the given position.
1443 *
1444 * @param value The value to add to this array.
1445 * @param index The index into which to insert the value.
1446 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001447- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index;
1448
Austin Schuh40c16522018-10-28 20:27:54 -07001449/**
1450 * Replaces the value at the given index with the given value.
1451 *
1452 * @param index The index for which to replace the value.
1453 * @param value The value to replace with.
1454 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001455- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value;
1456
1457// These methods bypass the validationFunc to provide setting of values that were not
1458// known at the time the binary was compiled.
1459
Austin Schuh40c16522018-10-28 20:27:54 -07001460/**
1461 * Adds a raw enum value to this array.
1462 *
1463 * @note This method bypass the validationFunc to enable the setting of values that
1464 * were not known at the time the binary was compiled.
1465 *
1466 * @param value The raw enum value to add to the array.
1467 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001468- (void)addRawValue:(int32_t)value;
Brian Silverman9c614bc2016-02-15 20:20:02 -05001469
Austin Schuh40c16522018-10-28 20:27:54 -07001470/**
1471 * Adds raw enum values to this array.
1472 *
1473 * @note This method bypass the validationFunc to enable the setting of values that
1474 * were not known at the time the binary was compiled.
1475 *
1476 * @param array Array containing the raw enum values to add to this array.
1477 **/
1478- (void)addRawValuesFromArray:(GPBEnumArray *)array;
1479
1480/**
1481 * Adds raw enum values to this array.
1482 *
1483 * @note This method bypass the validationFunc to enable the setting of values that
1484 * were not known at the time the binary was compiled.
1485 *
1486 * @param values Array containing the raw enum values to add to this array.
1487 * @param count The number of raw values to add.
1488 **/
1489- (void)addRawValues:(const int32_t [__nullable])values count:(NSUInteger)count;
1490
1491/**
1492 * Inserts a raw enum value at the given index.
1493 *
1494 * @note This method bypass the validationFunc to enable the setting of values that
1495 * were not known at the time the binary was compiled.
1496 *
1497 * @param value Raw enum value to add.
1498 * @param index The index into which to insert the value.
1499 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001500- (void)insertRawValue:(int32_t)value atIndex:(NSUInteger)index;
1501
Austin Schuh40c16522018-10-28 20:27:54 -07001502/**
1503 * Replaces the raw enum value at the given index with the given value.
1504 *
1505 * @note This method bypass the validationFunc to enable the setting of values that
1506 * were not known at the time the binary was compiled.
1507 *
1508 * @param index The index for which to replace the value.
1509 * @param value The raw enum value to replace with.
1510 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001511- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(int32_t)value;
1512
1513// No validation applies to these methods.
1514
Austin Schuh40c16522018-10-28 20:27:54 -07001515/**
1516 * Removes the value at the given index.
1517 *
1518 * @param index The index of the value to remove.
1519 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001520- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -07001521
1522/**
1523 * Removes all the values from this array.
1524 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001525- (void)removeAll;
1526
Austin Schuh40c16522018-10-28 20:27:54 -07001527/**
1528 * Exchanges the values between the given indexes.
1529 *
1530 * @param idx1 The index of the first element to exchange.
1531 * @param idx2 The index of the second element to exchange.
1532 **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001533- (void)exchangeValueAtIndex:(NSUInteger)idx1
1534 withValueAtIndex:(NSUInteger)idx2;
1535
1536@end
1537
1538//%PDDM-EXPAND-END DECLARE_ARRAYS()
1539
1540NS_ASSUME_NONNULL_END
1541
1542//%PDDM-DEFINE DECLARE_ARRAYS()
1543//%ARRAY_INTERFACE_SIMPLE(Int32, int32_t)
1544//%ARRAY_INTERFACE_SIMPLE(UInt32, uint32_t)
1545//%ARRAY_INTERFACE_SIMPLE(Int64, int64_t)
1546//%ARRAY_INTERFACE_SIMPLE(UInt64, uint64_t)
1547//%ARRAY_INTERFACE_SIMPLE(Float, float)
1548//%ARRAY_INTERFACE_SIMPLE(Double, double)
1549//%ARRAY_INTERFACE_SIMPLE(Bool, BOOL)
1550//%ARRAY_INTERFACE_ENUM(Enum, int32_t)
1551
1552//
1553// The common case (everything but Enum)
1554//
1555
1556//%PDDM-DEFINE ARRAY_INTERFACE_SIMPLE(NAME, TYPE)
1557//%#pragma mark - NAME
1558//%
Austin Schuh40c16522018-10-28 20:27:54 -07001559//%/**
1560//% * Class used for repeated fields of ##TYPE## values. This performs better than
1561//% * boxing into NSNumbers in NSArrays.
1562//% *
1563//% * @note This class is not meant to be subclassed.
1564//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001565//%@interface GPB##NAME##Array : NSObject <NSCopying>
1566//%
Austin Schuh40c16522018-10-28 20:27:54 -07001567//%/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -05001568//%@property(nonatomic, readonly) NSUInteger count;
1569//%
Austin Schuh40c16522018-10-28 20:27:54 -07001570//%/**
1571//% * @return A newly instanced and empty GPB##NAME##Array.
1572//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001573//%+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001574//%
1575//%/**
1576//% * Creates and initializes a GPB##NAME##Array with the single element given.
1577//% *
1578//% * @param value The value to be placed in the array.
1579//% *
1580//% * @return A newly instanced GPB##NAME##Array with value in it.
1581//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001582//%+ (instancetype)arrayWithValue:(TYPE)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001583//%
1584//%/**
1585//% * Creates and initializes a GPB##NAME##Array with the contents of the given
1586//% * array.
1587//% *
1588//% * @param array Array with the contents to be put into the new array.
1589//% *
1590//% * @return A newly instanced GPB##NAME##Array with the contents of array.
1591//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001592//%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001593//%
1594//%/**
1595//% * Creates and initializes a GPB##NAME##Array with the given capacity.
1596//% *
1597//% * @param count The capacity needed for the array.
1598//% *
1599//% * @return A newly instanced GPB##NAME##Array with a capacity of count.
1600//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001601//%+ (instancetype)arrayWithCapacity:(NSUInteger)count;
1602//%
Austin Schuh40c16522018-10-28 20:27:54 -07001603//%/**
1604//% * @return A newly initialized and empty GPB##NAME##Array.
1605//% **/
1606//%- (instancetype)init NS_DESIGNATED_INITIALIZER;
1607//%
1608//%/**
1609//% * Initializes the array, copying the given values.
1610//% *
1611//% * @param values An array with the values to put inside this array.
1612//% * @param count The number of elements to copy into the array.
1613//% *
1614//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
1615//% **/
1616//%- (instancetype)initWithValues:(const TYPE [__nullable])values
1617//% count:(NSUInteger)count;
1618//%
1619//%/**
1620//% * Initializes the array, copying the given values.
1621//% *
1622//% * @param array An array with the values to put inside this array.
1623//% *
1624//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
1625//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001626//%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001627//%
1628//%/**
1629//% * Initializes the array with the given capacity.
1630//% *
1631//% * @param count The capacity needed for the array.
1632//% *
1633//% * @return A newly initialized GPB##NAME##Array with a capacity of count.
1634//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001635//%- (instancetype)initWithCapacity:(NSUInteger)count;
1636//%
1637//%ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, Basic)
1638//%
1639//%ARRAY_MUTABLE_INTERFACE(NAME, TYPE, Basic)
1640//%
1641//%@end
1642//%
1643
1644//
1645// Macros specific to Enums (to tweak their interface).
1646//
1647
1648//%PDDM-DEFINE ARRAY_INTERFACE_ENUM(NAME, TYPE)
1649//%#pragma mark - NAME
1650//%
Austin Schuh40c16522018-10-28 20:27:54 -07001651//%/**
1652//% * This class is used for repeated fields of ##TYPE## values. This performs
1653//% * better than boxing into NSNumbers in NSArrays.
1654//% *
1655//% * @note This class is not meant to be subclassed.
1656//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001657//%@interface GPB##NAME##Array : NSObject <NSCopying>
1658//%
Austin Schuh40c16522018-10-28 20:27:54 -07001659//%/** The number of elements contained in the array. */
Brian Silverman9c614bc2016-02-15 20:20:02 -05001660//%@property(nonatomic, readonly) NSUInteger count;
Austin Schuh40c16522018-10-28 20:27:54 -07001661//%/** The validation function to check if the enums are valid. */
Brian Silverman9c614bc2016-02-15 20:20:02 -05001662//%@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc;
1663//%
Austin Schuh40c16522018-10-28 20:27:54 -07001664//%/**
1665//% * @return A newly instanced and empty GPB##NAME##Array.
1666//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001667//%+ (instancetype)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001668//%
1669//%/**
1670//% * Creates and initializes a GPB##NAME##Array with the enum validation function
1671//% * given.
1672//% *
1673//% * @param func The enum validation function for the array.
1674//% *
1675//% * @return A newly instanced GPB##NAME##Array.
1676//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001677//%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func;
Austin Schuh40c16522018-10-28 20:27:54 -07001678//%
1679//%/**
1680//% * Creates and initializes a GPB##NAME##Array with the enum validation function
1681//% * given and the single raw value given.
1682//% *
1683//% * @param func The enum validation function for the array.
1684//% * @param value The raw value to add to this array.
1685//% *
1686//% * @return A newly instanced GPB##NAME##Array.
1687//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001688//%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
1689//% rawValue:(TYPE)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001690//%
1691//%/**
1692//% * Creates and initializes a GPB##NAME##Array that adds the elements from the
1693//% * given array.
1694//% *
1695//% * @param array Array containing the values to add to the new array.
1696//% *
1697//% * @return A newly instanced GPB##NAME##Array.
1698//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001699//%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001700//%
1701//%/**
1702//% * Creates and initializes a GPB##NAME##Array with the given enum validation
1703//% * function and with the givencapacity.
1704//% *
1705//% * @param func The enum validation function for the array.
1706//% * @param count The capacity needed for the array.
1707//% *
1708//% * @return A newly instanced GPB##NAME##Array with a capacity of count.
1709//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001710//%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
1711//% capacity:(NSUInteger)count;
1712//%
Austin Schuh40c16522018-10-28 20:27:54 -07001713//%/**
1714//% * Initializes the array with the given enum validation function.
1715//% *
1716//% * @param func The enum validation function for the array.
1717//% *
1718//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
1719//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001720//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
Austin Schuh40c16522018-10-28 20:27:54 -07001721//% NS_DESIGNATED_INITIALIZER;
1722//%
1723//%/**
1724//% * Initializes the array, copying the given values.
1725//% *
1726//% * @param func The enum validation function for the array.
1727//% * @param values An array with the values to put inside this array.
1728//% * @param count The number of elements to copy into the array.
1729//% *
1730//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
1731//% **/
1732//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
1733//% rawValues:(const TYPE [__nullable])values
1734//% count:(NSUInteger)count;
1735//%
1736//%/**
1737//% * Initializes the array, copying the given values.
1738//% *
1739//% * @param array An array with the values to put inside this array.
1740//% *
1741//% * @return A newly initialized GPB##NAME##Array with a copy of the values.
1742//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001743//%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array;
Austin Schuh40c16522018-10-28 20:27:54 -07001744//%
1745//%/**
1746//% * Initializes the array with the given capacity.
1747//% *
1748//% * @param func The enum validation function for the array.
1749//% * @param count The capacity needed for the array.
1750//% *
1751//% * @return A newly initialized GPB##NAME##Array with a capacity of count.
1752//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001753//%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
1754//% capacity:(NSUInteger)count;
1755//%
1756//%// These will return kGPBUnrecognizedEnumeratorValue if the value at index is not a
1757//%// valid enumerator as defined by validationFunc. If the actual value is
1758//%// desired, use "raw" version of the method.
1759//%
1760//%ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, NAME)
1761//%
1762//%// These methods bypass the validationFunc to provide access to values that were not
1763//%// known at the time the binary was compiled.
1764//%
Austin Schuh40c16522018-10-28 20:27:54 -07001765//%/**
1766//% * Gets the raw enum value at the given index.
1767//% *
1768//% * @param index The index of the raw enum value to get.
1769//% *
1770//% * @return The raw enum value at the given index.
1771//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001772//%- (TYPE)rawValueAtIndex:(NSUInteger)index;
1773//%
Austin Schuh40c16522018-10-28 20:27:54 -07001774//%/**
1775//% * Enumerates the values on this array with the given block.
1776//% *
1777//% * @param block The block to enumerate with.
1778//% * **value**: The current value being enumerated.
1779//% * **idx**: The index of the current value.
1780//% * **stop**: A pointer to a boolean that when set stops the enumeration.
1781//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001782//%- (void)enumerateRawValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -07001783//%
1784//%/**
1785//% * Enumerates the values on this array with the given block.
1786//% *
1787//% * @param opts Options to control the enumeration.
1788//% * @param block The block to enumerate with.
1789//% * **value**: The current value being enumerated.
1790//% * **idx**: The index of the current value.
1791//% * **stop**: A pointer to a boolean that when set stops the enumeration.
1792//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001793//%- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts
1794//% usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
1795//%
1796//%// If value is not a valid enumerator as defined by validationFunc, these
1797//%// methods will assert in debug, and will log in release and assign the value
1798//%// to the default value. Use the rawValue methods below to assign non enumerator
1799//%// values.
1800//%
1801//%ARRAY_MUTABLE_INTERFACE(NAME, TYPE, NAME)
1802//%
1803//%@end
1804//%
1805
1806//%PDDM-DEFINE ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, HELPER_NAME)
Austin Schuh40c16522018-10-28 20:27:54 -07001807//%/**
1808//% * Gets the value at the given index.
1809//% *
1810//% * @param index The index of the value to get.
1811//% *
1812//% * @return The value at the given index.
1813//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001814//%- (TYPE)valueAtIndex:(NSUInteger)index;
1815//%
Austin Schuh40c16522018-10-28 20:27:54 -07001816//%/**
1817//% * Enumerates the values on this array with the given block.
1818//% *
1819//% * @param block The block to enumerate with.
1820//% * **value**: The current value being enumerated.
1821//% * **idx**: The index of the current value.
1822//% * **stop**: A pointer to a boolean that when set stops the enumeration.
1823//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001824//%- (void)enumerateValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
Austin Schuh40c16522018-10-28 20:27:54 -07001825//%
1826//%/**
1827//% * Enumerates the values on this array with the given block.
1828//% *
1829//% * @param opts Options to control the enumeration.
1830//% * @param block The block to enumerate with.
1831//% * **value**: The current value being enumerated.
1832//% * **idx**: The index of the current value.
1833//% * **stop**: A pointer to a boolean that when set stops the enumeration.
1834//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001835//%- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
1836//% usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
1837
1838//%PDDM-DEFINE ARRAY_MUTABLE_INTERFACE(NAME, TYPE, HELPER_NAME)
Austin Schuh40c16522018-10-28 20:27:54 -07001839//%/**
1840//% * Adds a value to this array.
1841//% *
1842//% * @param value The value to add to this array.
1843//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001844//%- (void)addValue:(TYPE)value;
Austin Schuh40c16522018-10-28 20:27:54 -07001845//%
1846//%/**
1847//% * Adds values to this array.
1848//% *
1849//% * @param values The values to add to this array.
1850//% * @param count The number of elements to add.
1851//% **/
1852//%- (void)addValues:(const TYPE [__nullable])values count:(NSUInteger)count;
1853//%
Brian Silverman9c614bc2016-02-15 20:20:02 -05001854//%ARRAY_EXTRA_MUTABLE_METHODS1_##HELPER_NAME(NAME, TYPE)
Austin Schuh40c16522018-10-28 20:27:54 -07001855//%/**
1856//% * Inserts a value into the given position.
1857//% *
1858//% * @param value The value to add to this array.
1859//% * @param index The index into which to insert the value.
1860//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001861//%- (void)insertValue:(TYPE)value atIndex:(NSUInteger)index;
1862//%
Austin Schuh40c16522018-10-28 20:27:54 -07001863//%/**
1864//% * Replaces the value at the given index with the given value.
1865//% *
1866//% * @param index The index for which to replace the value.
1867//% * @param value The value to replace with.
1868//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001869//%- (void)replaceValueAtIndex:(NSUInteger)index withValue:(TYPE)value;
1870//%ARRAY_EXTRA_MUTABLE_METHODS2_##HELPER_NAME(NAME, TYPE)
Austin Schuh40c16522018-10-28 20:27:54 -07001871//%/**
1872//% * Removes the value at the given index.
1873//% *
1874//% * @param index The index of the value to remove.
1875//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001876//%- (void)removeValueAtIndex:(NSUInteger)index;
Austin Schuh40c16522018-10-28 20:27:54 -07001877//%
1878//%/**
1879//% * Removes all the values from this array.
1880//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001881//%- (void)removeAll;
1882//%
Austin Schuh40c16522018-10-28 20:27:54 -07001883//%/**
1884//% * Exchanges the values between the given indexes.
1885//% *
1886//% * @param idx1 The index of the first element to exchange.
1887//% * @param idx2 The index of the second element to exchange.
1888//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001889//%- (void)exchangeValueAtIndex:(NSUInteger)idx1
1890//% withValueAtIndex:(NSUInteger)idx2;
1891
1892//
1893// These are hooks invoked by the above to do insert as needed.
1894//
1895
1896//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS1_Basic(NAME, TYPE)
Austin Schuh40c16522018-10-28 20:27:54 -07001897//%/**
1898//% * Adds the values from the given array to this array.
1899//% *
1900//% * @param array The array containing the elements to add to this array.
1901//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001902//%- (void)addValuesFromArray:(GPB##NAME##Array *)array;
1903//%
1904//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS2_Basic(NAME, TYPE)
1905// Empty
1906//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS1_Enum(NAME, TYPE)
1907// Empty
1908//%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS2_Enum(NAME, TYPE)
1909//%
1910//%// These methods bypass the validationFunc to provide setting of values that were not
1911//%// known at the time the binary was compiled.
1912//%
Austin Schuh40c16522018-10-28 20:27:54 -07001913//%/**
1914//% * Adds a raw enum value to this array.
1915//% *
1916//% * @note This method bypass the validationFunc to enable the setting of values that
1917//% * were not known at the time the binary was compiled.
1918//% *
1919//% * @param value The raw enum value to add to the array.
1920//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001921//%- (void)addRawValue:(TYPE)value;
Brian Silverman9c614bc2016-02-15 20:20:02 -05001922//%
Austin Schuh40c16522018-10-28 20:27:54 -07001923//%/**
1924//% * Adds raw enum values to this array.
1925//% *
1926//% * @note This method bypass the validationFunc to enable the setting of values that
1927//% * were not known at the time the binary was compiled.
1928//% *
1929//% * @param array Array containing the raw enum values to add to this array.
1930//% **/
1931//%- (void)addRawValuesFromArray:(GPB##NAME##Array *)array;
1932//%
1933//%/**
1934//% * Adds raw enum values to this array.
1935//% *
1936//% * @note This method bypass the validationFunc to enable the setting of values that
1937//% * were not known at the time the binary was compiled.
1938//% *
1939//% * @param values Array containing the raw enum values to add to this array.
1940//% * @param count The number of raw values to add.
1941//% **/
1942//%- (void)addRawValues:(const TYPE [__nullable])values count:(NSUInteger)count;
1943//%
1944//%/**
1945//% * Inserts a raw enum value at the given index.
1946//% *
1947//% * @note This method bypass the validationFunc to enable the setting of values that
1948//% * were not known at the time the binary was compiled.
1949//% *
1950//% * @param value Raw enum value to add.
1951//% * @param index The index into which to insert the value.
1952//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001953//%- (void)insertRawValue:(TYPE)value atIndex:(NSUInteger)index;
1954//%
Austin Schuh40c16522018-10-28 20:27:54 -07001955//%/**
1956//% * Replaces the raw enum value at the given index with the given value.
1957//% *
1958//% * @note This method bypass the validationFunc to enable the setting of values that
1959//% * were not known at the time the binary was compiled.
1960//% *
1961//% * @param index The index for which to replace the value.
1962//% * @param value The raw enum value to replace with.
1963//% **/
Brian Silverman9c614bc2016-02-15 20:20:02 -05001964//%- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(TYPE)value;
1965//%
1966//%// No validation applies to these methods.
1967//%