1 // 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 
35 // These classes are used for repeated fields of basic data types. They are used because
36 // they perform better than boxing into NSNumbers in NSArrays.
37 
38 // Note: These are not meant to be subclassed.
39 
40 NS_ASSUME_NONNULL_BEGIN
41 
42 //%PDDM-EXPAND DECLARE_ARRAYS()
43 // This block of code is generated, do not edit it directly.
44 
45 #pragma mark - Int32
46 
47 @interface GPBInt32Array : NSObject <NSCopying>
48 
49 @property(nonatomic, readonly) NSUInteger count;
50 
51 + (instancetype)array;
52 + (instancetype)arrayWithValue:(int32_t)value;
53 + (instancetype)arrayWithValueArray:(GPBInt32Array *)array;
54 + (instancetype)arrayWithCapacity:(NSUInteger)count;
55 
56 - (instancetype)init NS_DESIGNATED_INITIALIZER;
57 // Initializes the array, copying the values.
58 - (instancetype)initWithValues:(const int32_t [])values
59                          count:(NSUInteger)count;
60 - (instancetype)initWithValueArray:(GPBInt32Array *)array;
61 - (instancetype)initWithCapacity:(NSUInteger)count;
62 
63 - (int32_t)valueAtIndex:(NSUInteger)index;
64 
65 - (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
66 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
67                         usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
68 
69 - (void)addValue:(int32_t)value;
70 - (void)addValues:(const int32_t [])values count:(NSUInteger)count;
71 - (void)addValuesFromArray:(GPBInt32Array *)array;
72 
73 - (void)insertValue:(int32_t)value atIndex:(NSUInteger)index;
74 
75 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value;
76 
77 - (void)removeValueAtIndex:(NSUInteger)index;
78 - (void)removeAll;
79 
80 - (void)exchangeValueAtIndex:(NSUInteger)idx1
81             withValueAtIndex:(NSUInteger)idx2;
82 
83 @end
84 
85 #pragma mark - UInt32
86 
87 @interface GPBUInt32Array : NSObject <NSCopying>
88 
89 @property(nonatomic, readonly) NSUInteger count;
90 
91 + (instancetype)array;
92 + (instancetype)arrayWithValue:(uint32_t)value;
93 + (instancetype)arrayWithValueArray:(GPBUInt32Array *)array;
94 + (instancetype)arrayWithCapacity:(NSUInteger)count;
95 
96 - (instancetype)init NS_DESIGNATED_INITIALIZER;
97 // Initializes the array, copying the values.
98 - (instancetype)initWithValues:(const uint32_t [])values
99                          count:(NSUInteger)count;
100 - (instancetype)initWithValueArray:(GPBUInt32Array *)array;
101 - (instancetype)initWithCapacity:(NSUInteger)count;
102 
103 - (uint32_t)valueAtIndex:(NSUInteger)index;
104 
105 - (void)enumerateValuesWithBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block;
106 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
107                         usingBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block;
108 
109 - (void)addValue:(uint32_t)value;
110 - (void)addValues:(const uint32_t [])values count:(NSUInteger)count;
111 - (void)addValuesFromArray:(GPBUInt32Array *)array;
112 
113 - (void)insertValue:(uint32_t)value atIndex:(NSUInteger)index;
114 
115 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint32_t)value;
116 
117 - (void)removeValueAtIndex:(NSUInteger)index;
118 - (void)removeAll;
119 
120 - (void)exchangeValueAtIndex:(NSUInteger)idx1
121             withValueAtIndex:(NSUInteger)idx2;
122 
123 @end
124 
125 #pragma mark - Int64
126 
127 @interface GPBInt64Array : NSObject <NSCopying>
128 
129 @property(nonatomic, readonly) NSUInteger count;
130 
131 + (instancetype)array;
132 + (instancetype)arrayWithValue:(int64_t)value;
133 + (instancetype)arrayWithValueArray:(GPBInt64Array *)array;
134 + (instancetype)arrayWithCapacity:(NSUInteger)count;
135 
136 - (instancetype)init NS_DESIGNATED_INITIALIZER;
137 // Initializes the array, copying the values.
138 - (instancetype)initWithValues:(const int64_t [])values
139                          count:(NSUInteger)count;
140 - (instancetype)initWithValueArray:(GPBInt64Array *)array;
141 - (instancetype)initWithCapacity:(NSUInteger)count;
142 
143 - (int64_t)valueAtIndex:(NSUInteger)index;
144 
145 - (void)enumerateValuesWithBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block;
146 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
147                         usingBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block;
148 
149 - (void)addValue:(int64_t)value;
150 - (void)addValues:(const int64_t [])values count:(NSUInteger)count;
151 - (void)addValuesFromArray:(GPBInt64Array *)array;
152 
153 - (void)insertValue:(int64_t)value atIndex:(NSUInteger)index;
154 
155 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(int64_t)value;
156 
157 - (void)removeValueAtIndex:(NSUInteger)index;
158 - (void)removeAll;
159 
160 - (void)exchangeValueAtIndex:(NSUInteger)idx1
161             withValueAtIndex:(NSUInteger)idx2;
162 
163 @end
164 
165 #pragma mark - UInt64
166 
167 @interface GPBUInt64Array : NSObject <NSCopying>
168 
169 @property(nonatomic, readonly) NSUInteger count;
170 
171 + (instancetype)array;
172 + (instancetype)arrayWithValue:(uint64_t)value;
173 + (instancetype)arrayWithValueArray:(GPBUInt64Array *)array;
174 + (instancetype)arrayWithCapacity:(NSUInteger)count;
175 
176 - (instancetype)init NS_DESIGNATED_INITIALIZER;
177 // Initializes the array, copying the values.
178 - (instancetype)initWithValues:(const uint64_t [])values
179                          count:(NSUInteger)count;
180 - (instancetype)initWithValueArray:(GPBUInt64Array *)array;
181 - (instancetype)initWithCapacity:(NSUInteger)count;
182 
183 - (uint64_t)valueAtIndex:(NSUInteger)index;
184 
185 - (void)enumerateValuesWithBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block;
186 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
187                         usingBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block;
188 
189 - (void)addValue:(uint64_t)value;
190 - (void)addValues:(const uint64_t [])values count:(NSUInteger)count;
191 - (void)addValuesFromArray:(GPBUInt64Array *)array;
192 
193 - (void)insertValue:(uint64_t)value atIndex:(NSUInteger)index;
194 
195 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint64_t)value;
196 
197 - (void)removeValueAtIndex:(NSUInteger)index;
198 - (void)removeAll;
199 
200 - (void)exchangeValueAtIndex:(NSUInteger)idx1
201             withValueAtIndex:(NSUInteger)idx2;
202 
203 @end
204 
205 #pragma mark - Float
206 
207 @interface GPBFloatArray : NSObject <NSCopying>
208 
209 @property(nonatomic, readonly) NSUInteger count;
210 
211 + (instancetype)array;
212 + (instancetype)arrayWithValue:(float)value;
213 + (instancetype)arrayWithValueArray:(GPBFloatArray *)array;
214 + (instancetype)arrayWithCapacity:(NSUInteger)count;
215 
216 - (instancetype)init NS_DESIGNATED_INITIALIZER;
217 // Initializes the array, copying the values.
218 - (instancetype)initWithValues:(const float [])values
219                          count:(NSUInteger)count;
220 - (instancetype)initWithValueArray:(GPBFloatArray *)array;
221 - (instancetype)initWithCapacity:(NSUInteger)count;
222 
223 - (float)valueAtIndex:(NSUInteger)index;
224 
225 - (void)enumerateValuesWithBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block;
226 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
227                         usingBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block;
228 
229 - (void)addValue:(float)value;
230 - (void)addValues:(const float [])values count:(NSUInteger)count;
231 - (void)addValuesFromArray:(GPBFloatArray *)array;
232 
233 - (void)insertValue:(float)value atIndex:(NSUInteger)index;
234 
235 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(float)value;
236 
237 - (void)removeValueAtIndex:(NSUInteger)index;
238 - (void)removeAll;
239 
240 - (void)exchangeValueAtIndex:(NSUInteger)idx1
241             withValueAtIndex:(NSUInteger)idx2;
242 
243 @end
244 
245 #pragma mark - Double
246 
247 @interface GPBDoubleArray : NSObject <NSCopying>
248 
249 @property(nonatomic, readonly) NSUInteger count;
250 
251 + (instancetype)array;
252 + (instancetype)arrayWithValue:(double)value;
253 + (instancetype)arrayWithValueArray:(GPBDoubleArray *)array;
254 + (instancetype)arrayWithCapacity:(NSUInteger)count;
255 
256 - (instancetype)init NS_DESIGNATED_INITIALIZER;
257 // Initializes the array, copying the values.
258 - (instancetype)initWithValues:(const double [])values
259                          count:(NSUInteger)count;
260 - (instancetype)initWithValueArray:(GPBDoubleArray *)array;
261 - (instancetype)initWithCapacity:(NSUInteger)count;
262 
263 - (double)valueAtIndex:(NSUInteger)index;
264 
265 - (void)enumerateValuesWithBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block;
266 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
267                         usingBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block;
268 
269 - (void)addValue:(double)value;
270 - (void)addValues:(const double [])values count:(NSUInteger)count;
271 - (void)addValuesFromArray:(GPBDoubleArray *)array;
272 
273 - (void)insertValue:(double)value atIndex:(NSUInteger)index;
274 
275 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(double)value;
276 
277 - (void)removeValueAtIndex:(NSUInteger)index;
278 - (void)removeAll;
279 
280 - (void)exchangeValueAtIndex:(NSUInteger)idx1
281             withValueAtIndex:(NSUInteger)idx2;
282 
283 @end
284 
285 #pragma mark - Bool
286 
287 @interface GPBBoolArray : NSObject <NSCopying>
288 
289 @property(nonatomic, readonly) NSUInteger count;
290 
291 + (instancetype)array;
292 + (instancetype)arrayWithValue:(BOOL)value;
293 + (instancetype)arrayWithValueArray:(GPBBoolArray *)array;
294 + (instancetype)arrayWithCapacity:(NSUInteger)count;
295 
296 - (instancetype)init NS_DESIGNATED_INITIALIZER;
297 // Initializes the array, copying the values.
298 - (instancetype)initWithValues:(const BOOL [])values
299                          count:(NSUInteger)count;
300 - (instancetype)initWithValueArray:(GPBBoolArray *)array;
301 - (instancetype)initWithCapacity:(NSUInteger)count;
302 
303 - (BOOL)valueAtIndex:(NSUInteger)index;
304 
305 - (void)enumerateValuesWithBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block;
306 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
307                         usingBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block;
308 
309 - (void)addValue:(BOOL)value;
310 - (void)addValues:(const BOOL [])values count:(NSUInteger)count;
311 - (void)addValuesFromArray:(GPBBoolArray *)array;
312 
313 - (void)insertValue:(BOOL)value atIndex:(NSUInteger)index;
314 
315 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(BOOL)value;
316 
317 - (void)removeValueAtIndex:(NSUInteger)index;
318 - (void)removeAll;
319 
320 - (void)exchangeValueAtIndex:(NSUInteger)idx1
321             withValueAtIndex:(NSUInteger)idx2;
322 
323 @end
324 
325 #pragma mark - Enum
326 
327 @interface GPBEnumArray : NSObject <NSCopying>
328 
329 @property(nonatomic, readonly) NSUInteger count;
330 @property(nonatomic, readonly) GPBEnumValidationFunc validationFunc;
331 
332 + (instancetype)array;
333 + (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func;
334 + (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
335                                    rawValue:(int32_t)value;
336 + (instancetype)arrayWithValueArray:(GPBEnumArray *)array;
337 + (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
338                                    capacity:(NSUInteger)count;
339 
340 - (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
341     NS_DESIGNATED_INITIALIZER;
342 
343 // Initializes the array, copying the values.
344 - (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
345                                  rawValues:(const int32_t [])values
346                                      count:(NSUInteger)count;
347 - (instancetype)initWithValueArray:(GPBEnumArray *)array;
348 - (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
349                                   capacity:(NSUInteger)count;
350 
351 // These will return kGPBUnrecognizedEnumeratorValue if the value at index is not a
352 // valid enumerator as defined by validationFunc. If the actual value is
353 // desired, use "raw" version of the method.
354 
355 - (int32_t)valueAtIndex:(NSUInteger)index;
356 
357 - (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
358 - (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
359                         usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
360 
361 // These methods bypass the validationFunc to provide access to values that were not
362 // known at the time the binary was compiled.
363 
364 - (int32_t)rawValueAtIndex:(NSUInteger)index;
365 
366 - (void)enumerateRawValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
367 - (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts
368                            usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block;
369 
370 // If value is not a valid enumerator as defined by validationFunc, these
371 // methods will assert in debug, and will log in release and assign the value
372 // to the default value. Use the rawValue methods below to assign non enumerator
373 // values.
374 
375 - (void)addValue:(int32_t)value;
376 - (void)addValues:(const int32_t [])values count:(NSUInteger)count;
377 
378 - (void)insertValue:(int32_t)value atIndex:(NSUInteger)index;
379 
380 - (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value;
381 
382 // These methods bypass the validationFunc to provide setting of values that were not
383 // known at the time the binary was compiled.
384 
385 - (void)addRawValue:(int32_t)value;
386 - (void)addRawValuesFromArray:(GPBEnumArray *)array;
387 - (void)addRawValues:(const int32_t [])values count:(NSUInteger)count;
388 
389 - (void)insertRawValue:(int32_t)value atIndex:(NSUInteger)index;
390 
391 - (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(int32_t)value;
392 
393 // No validation applies to these methods.
394 
395 - (void)removeValueAtIndex:(NSUInteger)index;
396 - (void)removeAll;
397 
398 - (void)exchangeValueAtIndex:(NSUInteger)idx1
399             withValueAtIndex:(NSUInteger)idx2;
400 
401 @end
402 
403 //%PDDM-EXPAND-END DECLARE_ARRAYS()
404 
405 NS_ASSUME_NONNULL_END
406 
407 //%PDDM-DEFINE DECLARE_ARRAYS()
408 //%ARRAY_INTERFACE_SIMPLE(Int32, int32_t)
409 //%ARRAY_INTERFACE_SIMPLE(UInt32, uint32_t)
410 //%ARRAY_INTERFACE_SIMPLE(Int64, int64_t)
411 //%ARRAY_INTERFACE_SIMPLE(UInt64, uint64_t)
412 //%ARRAY_INTERFACE_SIMPLE(Float, float)
413 //%ARRAY_INTERFACE_SIMPLE(Double, double)
414 //%ARRAY_INTERFACE_SIMPLE(Bool, BOOL)
415 //%ARRAY_INTERFACE_ENUM(Enum, int32_t)
416 
417 //
418 // The common case (everything but Enum)
419 //
420 
421 //%PDDM-DEFINE ARRAY_INTERFACE_SIMPLE(NAME, TYPE)
422 //%#pragma mark - NAME
423 //%
424 //%@interface GPB##NAME##Array : NSObject <NSCopying>
425 //%
426 //%@property(nonatomic, readonly) NSUInteger count;
427 //%
428 //%+ (instancetype)array;
429 //%+ (instancetype)arrayWithValue:(TYPE)value;
430 //%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array;
431 //%+ (instancetype)arrayWithCapacity:(NSUInteger)count;
432 //%
433 //%- (instancetype)init NS_DESIGNATED_INITIALIZER;
434 //%// Initializes the array, copying the values.
435 //%- (instancetype)initWithValues:(const TYPE [])values
436 //%                         count:(NSUInteger)count;
437 //%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array;
438 //%- (instancetype)initWithCapacity:(NSUInteger)count;
439 //%
440 //%ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, Basic)
441 //%
442 //%ARRAY_MUTABLE_INTERFACE(NAME, TYPE, Basic)
443 //%
444 //%@end
445 //%
446 
447 //
448 // Macros specific to Enums (to tweak their interface).
449 //
450 
451 //%PDDM-DEFINE ARRAY_INTERFACE_ENUM(NAME, TYPE)
452 //%#pragma mark - NAME
453 //%
454 //%@interface GPB##NAME##Array : NSObject <NSCopying>
455 //%
456 //%@property(nonatomic, readonly) NSUInteger count;
457 //%@property(nonatomic, readonly) GPBEnumValidationFunc validationFunc;
458 //%
459 //%+ (instancetype)array;
460 //%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func;
461 //%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
462 //%                                   rawValue:(TYPE)value;
463 //%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array;
464 //%+ (instancetype)arrayWithValidationFunction:(nullable GPBEnumValidationFunc)func
465 //%                                   capacity:(NSUInteger)count;
466 //%
467 //%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
468 //%    NS_DESIGNATED_INITIALIZER;
469 //%
470 //%// Initializes the array, copying the values.
471 //%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
472 //%                                 rawValues:(const TYPE [])values
473 //%                                     count:(NSUInteger)count;
474 //%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array;
475 //%- (instancetype)initWithValidationFunction:(nullable GPBEnumValidationFunc)func
476 //%                                  capacity:(NSUInteger)count;
477 //%
478 //%// These will return kGPBUnrecognizedEnumeratorValue if the value at index is not a
479 //%// valid enumerator as defined by validationFunc. If the actual value is
480 //%// desired, use "raw" version of the method.
481 //%
482 //%ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, NAME)
483 //%
484 //%// These methods bypass the validationFunc to provide access to values that were not
485 //%// known at the time the binary was compiled.
486 //%
487 //%- (TYPE)rawValueAtIndex:(NSUInteger)index;
488 //%
489 //%- (void)enumerateRawValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
490 //%- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts
491 //%                           usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
492 //%
493 //%// If value is not a valid enumerator as defined by validationFunc, these
494 //%// methods will assert in debug, and will log in release and assign the value
495 //%// to the default value. Use the rawValue methods below to assign non enumerator
496 //%// values.
497 //%
498 //%ARRAY_MUTABLE_INTERFACE(NAME, TYPE, NAME)
499 //%
500 //%@end
501 //%
502 
503 //%PDDM-DEFINE ARRAY_IMMUTABLE_INTERFACE(NAME, TYPE, HELPER_NAME)
504 //%- (TYPE)valueAtIndex:(NSUInteger)index;
505 //%
506 //%- (void)enumerateValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
507 //%- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts
508 //%                        usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block;
509 
510 //%PDDM-DEFINE ARRAY_MUTABLE_INTERFACE(NAME, TYPE, HELPER_NAME)
511 //%- (void)addValue:(TYPE)value;
512 //%- (void)addValues:(const TYPE [])values count:(NSUInteger)count;
513 //%ARRAY_EXTRA_MUTABLE_METHODS1_##HELPER_NAME(NAME, TYPE)
514 //%- (void)insertValue:(TYPE)value atIndex:(NSUInteger)index;
515 //%
516 //%- (void)replaceValueAtIndex:(NSUInteger)index withValue:(TYPE)value;
517 //%ARRAY_EXTRA_MUTABLE_METHODS2_##HELPER_NAME(NAME, TYPE)
518 //%- (void)removeValueAtIndex:(NSUInteger)index;
519 //%- (void)removeAll;
520 //%
521 //%- (void)exchangeValueAtIndex:(NSUInteger)idx1
522 //%            withValueAtIndex:(NSUInteger)idx2;
523 
524 //
525 // These are hooks invoked by the above to do insert as needed.
526 //
527 
528 //%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS1_Basic(NAME, TYPE)
529 //%- (void)addValuesFromArray:(GPB##NAME##Array *)array;
530 //%
531 //%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS2_Basic(NAME, TYPE)
532 // Empty
533 //%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS1_Enum(NAME, TYPE)
534 // Empty
535 //%PDDM-DEFINE ARRAY_EXTRA_MUTABLE_METHODS2_Enum(NAME, TYPE)
536 //%
537 //%// These methods bypass the validationFunc to provide setting of values that were not
538 //%// known at the time the binary was compiled.
539 //%
540 //%- (void)addRawValue:(TYPE)value;
541 //%- (void)addRawValuesFromArray:(GPB##NAME##Array *)array;
542 //%- (void)addRawValues:(const TYPE [])values count:(NSUInteger)count;
543 //%
544 //%- (void)insertRawValue:(TYPE)value atIndex:(NSUInteger)index;
545 //%
546 //%- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(TYPE)value;
547 //%
548 //%// No validation applies to these methods.
549 //%
550