diff options
Diffstat (limited to 'objectivec/GPBArray.m')
-rw-r--r-- | objectivec/GPBArray.m | 2551 |
1 files changed, 0 insertions, 2551 deletions
diff --git a/objectivec/GPBArray.m b/objectivec/GPBArray.m deleted file mode 100644 index 64869bbb..00000000 --- a/objectivec/GPBArray.m +++ /dev/null @@ -1,2551 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2015 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import "GPBArray_PackagePrivate.h" - -#import "GPBMessage_PackagePrivate.h" - -// Direct access is use for speed, to avoid even internally declaring things -// read/write, etc. The warning is enabled in the project to ensure code calling -// protos can turn on -Wdirect-ivar-access without issues. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -// Mutable arrays use an internal buffer that can always hold a multiple of this elements. -#define kChunkSize 16 -#define CapacityFromCount(x) (((x / kChunkSize) + 1) * kChunkSize) - -static BOOL ArrayDefault_IsValidValue(int32_t value) { - // Anything but the bad value marker is allowed. - return (value != kGPBUnrecognizedEnumeratorValue); -} - -//%PDDM-DEFINE VALIDATE_RANGE(INDEX, COUNT) -//% if (INDEX >= COUNT) { -//% [NSException raise:NSRangeException -//% format:@"Index (%lu) beyond bounds (%lu)", -//% (unsigned long)INDEX, (unsigned long)COUNT]; -//% } -//%PDDM-DEFINE MAYBE_GROW_TO_SET_COUNT(NEW_COUNT) -//% if (NEW_COUNT > _capacity) { -//% [self internalResizeToCapacity:CapacityFromCount(NEW_COUNT)]; -//% } -//% _count = NEW_COUNT; -//%PDDM-DEFINE SET_COUNT_AND_MAYBE_SHRINK(NEW_COUNT) -//% _count = NEW_COUNT; -//% if ((NEW_COUNT + (2 * kChunkSize)) < _capacity) { -//% [self internalResizeToCapacity:CapacityFromCount(NEW_COUNT)]; -//% } - -// -// Macros for the common basic cases. -// - -//%PDDM-DEFINE ARRAY_INTERFACE_SIMPLE(NAME, TYPE, FORMAT) -//%#pragma mark - NAME -//% -//%@implementation GPB##NAME##Array { -//% @package -//% TYPE *_values; -//% NSUInteger _count; -//% NSUInteger _capacity; -//%} -//% -//%@synthesize count = _count; -//% -//%+ (instancetype)array { -//% return [[[self alloc] init] autorelease]; -//%} -//% -//%+ (instancetype)arrayWithValue:(TYPE)value { -//% // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get -//% // the type correct. -//% return [[(GPB##NAME##Array*)[self alloc] initWithValues:&value count:1] autorelease]; -//%} -//% -//%+ (instancetype)arrayWithValueArray:(GPB##NAME##Array *)array { -//% return [[(GPB##NAME##Array*)[self alloc] initWithValueArray:array] autorelease]; -//%} -//% -//%+ (instancetype)arrayWithCapacity:(NSUInteger)count { -//% return [[[self alloc] initWithCapacity:count] autorelease]; -//%} -//% -//%- (instancetype)init { -//% self = [super init]; -//% // No work needed; -//% return self; -//%} -//% -//%- (instancetype)initWithValueArray:(GPB##NAME##Array *)array { -//% return [self initWithValues:array->_values count:array->_count]; -//%} -//% -//%- (instancetype)initWithValues:(const TYPE [])values count:(NSUInteger)count { -//% self = [self init]; -//% if (self) { -//% if (count && values) { -//% _values = reallocf(_values, count * sizeof(TYPE)); -//% if (_values != NULL) { -//% _capacity = count; -//% memcpy(_values, values, count * sizeof(TYPE)); -//% _count = count; -//% } else { -//% [self release]; -//% [NSException raise:NSMallocException -//% format:@"Failed to allocate %lu bytes", -//% (unsigned long)(count * sizeof(TYPE))]; -//% } -//% } -//% } -//% return self; -//%} -//% -//%- (instancetype)initWithCapacity:(NSUInteger)count { -//% self = [self initWithValues:NULL count:0]; -//% if (self && count) { -//% [self internalResizeToCapacity:count]; -//% } -//% return self; -//%} -//% -//%- (instancetype)copyWithZone:(NSZone *)zone { -//% return [[GPB##NAME##Array allocWithZone:zone] initWithValues:_values count:_count]; -//%} -//% -//%ARRAY_IMMUTABLE_CORE(NAME, TYPE, , FORMAT) -//% -//%- (TYPE)valueAtIndex:(NSUInteger)index { -//%VALIDATE_RANGE(index, _count) -//% return _values[index]; -//%} -//% -//%ARRAY_MUTABLE_CORE(NAME, TYPE, , FORMAT) -//%@end -//% - -// -// Some core macros used for both the simple types and Enums. -// - -//%PDDM-DEFINE ARRAY_IMMUTABLE_CORE(NAME, TYPE, ACCESSOR_NAME, FORMAT) -//%- (void)dealloc { -//% NSAssert(!_autocreator, -//% @"%@: Autocreator must be cleared before release, autocreator: %@", -//% [self class], _autocreator); -//% free(_values); -//% [super dealloc]; -//%} -//% -//%- (BOOL)isEqual:(id)other { -//% if (self == other) { -//% return YES; -//% } -//% if (![other isKindOfClass:[GPB##NAME##Array class]]) { -//% return NO; -//% } -//% GPB##NAME##Array *otherArray = other; -//% return (_count == otherArray->_count -//% && memcmp(_values, otherArray->_values, (_count * sizeof(TYPE))) == 0); -//%} -//% -//%- (NSUInteger)hash { -//% // Follow NSArray's lead, and use the count as the hash. -//% return _count; -//%} -//% -//%- (NSString *)description { -//% NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; -//% for (NSUInteger i = 0, count = _count; i < count; ++i) { -//% if (i == 0) { -//% [result appendFormat:@"##FORMAT##", _values[i]]; -//% } else { -//% [result appendFormat:@", ##FORMAT##", _values[i]]; -//% } -//% } -//% [result appendFormat:@" }"]; -//% return result; -//%} -//% -//%- (void)enumerate##ACCESSOR_NAME##ValuesWithBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block { -//% [self enumerate##ACCESSOR_NAME##ValuesWithOptions:0 usingBlock:block]; -//%} -//% -//%- (void)enumerate##ACCESSOR_NAME##ValuesWithOptions:(NSEnumerationOptions)opts -//% ACCESSOR_NAME$S usingBlock:(void (^)(TYPE value, NSUInteger idx, BOOL *stop))block { -//% // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). -//% BOOL stop = NO; -//% if ((opts & NSEnumerationReverse) == 0) { -//% for (NSUInteger i = 0, count = _count; i < count; ++i) { -//% block(_values[i], i, &stop); -//% if (stop) break; -//% } -//% } else if (_count > 0) { -//% for (NSUInteger i = _count; i > 0; --i) { -//% block(_values[i - 1], (i - 1), &stop); -//% if (stop) break; -//% } -//% } -//%} - -//%PDDM-DEFINE MUTATION_HOOK_None() -//%PDDM-DEFINE MUTATION_METHODS(NAME, TYPE, ACCESSOR_NAME, HOOK_1, HOOK_2) -//%- (void)add##ACCESSOR_NAME##Value:(TYPE)value { -//% [self add##ACCESSOR_NAME##Values:&value count:1]; -//%} -//% -//%- (void)add##ACCESSOR_NAME##Values:(const TYPE [])values count:(NSUInteger)count { -//% if (values == NULL || count == 0) return; -//%MUTATION_HOOK_##HOOK_1() NSUInteger initialCount = _count; -//% NSUInteger newCount = initialCount + count; -//%MAYBE_GROW_TO_SET_COUNT(newCount) -//% memcpy(&_values[initialCount], values, count * sizeof(TYPE)); -//% if (_autocreator) { -//% GPBAutocreatedArrayModified(_autocreator, self); -//% } -//%} -//% -//%- (void)insert##ACCESSOR_NAME##Value:(TYPE)value atIndex:(NSUInteger)index { -//%VALIDATE_RANGE(index, _count + 1) -//%MUTATION_HOOK_##HOOK_2() NSUInteger initialCount = _count; -//% NSUInteger newCount = initialCount + 1; -//%MAYBE_GROW_TO_SET_COUNT(newCount) -//% if (index != initialCount) { -//% memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(TYPE)); -//% } -//% _values[index] = value; -//% if (_autocreator) { -//% GPBAutocreatedArrayModified(_autocreator, self); -//% } -//%} -//% -//%- (void)replaceValueAtIndex:(NSUInteger)index with##ACCESSOR_NAME##Value:(TYPE)value { -//%VALIDATE_RANGE(index, _count) -//%MUTATION_HOOK_##HOOK_2() _values[index] = value; -//%} - -//%PDDM-DEFINE ARRAY_MUTABLE_CORE(NAME, TYPE, ACCESSOR_NAME, FORMAT) -//%- (void)internalResizeToCapacity:(NSUInteger)newCapacity { -//% _values = reallocf(_values, newCapacity * sizeof(TYPE)); -//% if (_values == NULL) { -//% _capacity = 0; -//% _count = 0; -//% [NSException raise:NSMallocException -//% format:@"Failed to allocate %lu bytes", -//% (unsigned long)(newCapacity * sizeof(TYPE))]; -//% } -//% _capacity = newCapacity; -//%} -//% -//%MUTATION_METHODS(NAME, TYPE, ACCESSOR_NAME, None, None) -//% -//%- (void)add##ACCESSOR_NAME##ValuesFromArray:(GPB##NAME##Array *)array { -//% [self add##ACCESSOR_NAME##Values:array->_values count:array->_count]; -//%} -//% -//%- (void)removeValueAtIndex:(NSUInteger)index { -//%VALIDATE_RANGE(index, _count) -//% NSUInteger newCount = _count - 1; -//% if (index != newCount) { -//% memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(TYPE)); -//% } -//%SET_COUNT_AND_MAYBE_SHRINK(newCount) -//%} -//% -//%- (void)removeAll { -//%SET_COUNT_AND_MAYBE_SHRINK(0) -//%} -//% -//%- (void)exchangeValueAtIndex:(NSUInteger)idx1 -//% withValueAtIndex:(NSUInteger)idx2 { -//%VALIDATE_RANGE(idx1, _count) -//%VALIDATE_RANGE(idx2, _count) -//% TYPE temp = _values[idx1]; -//% _values[idx1] = _values[idx2]; -//% _values[idx2] = temp; -//%} -//% - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Int32, int32_t, %d) -// This block of code is generated, do not edit it directly. - -#pragma mark - Int32 - -@implementation GPBInt32Array { - @package - int32_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(int32_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBInt32Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBInt32Array *)array { - return [[(GPBInt32Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBInt32Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const int32_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(int32_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(int32_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(int32_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt32Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt32Array class]]) { - return NO; - } - GPBInt32Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(int32_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%d", _values[i]]; - } else { - [result appendFormat:@", %d", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (int32_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(int32_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(int32_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(int32_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const int32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBInt32Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(int32_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - int32_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(UInt32, uint32_t, %u) -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt32 - -@implementation GPBUInt32Array { - @package - uint32_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(uint32_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBUInt32Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBUInt32Array *)array { - return [[(GPBUInt32Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBUInt32Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const uint32_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(uint32_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(uint32_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(uint32_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt32Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt32Array class]]) { - return NO; - } - GPBUInt32Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(uint32_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%u", _values[i]]; - } else { - [result appendFormat:@", %u", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(uint32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (uint32_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(uint32_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(uint32_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(uint32_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const uint32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(uint32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(uint32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(uint32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBUInt32Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(uint32_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - uint32_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Int64, int64_t, %lld) -// This block of code is generated, do not edit it directly. - -#pragma mark - Int64 - -@implementation GPBInt64Array { - @package - int64_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(int64_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBInt64Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBInt64Array *)array { - return [[(GPBInt64Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBInt64Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const int64_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(int64_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(int64_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(int64_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBInt64Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBInt64Array class]]) { - return NO; - } - GPBInt64Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(int64_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%lld", _values[i]]; - } else { - [result appendFormat:@", %lld", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int64_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (int64_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(int64_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(int64_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(int64_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const int64_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int64_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(int64_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int64_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int64_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBInt64Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(int64_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - int64_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(UInt64, uint64_t, %llu) -// This block of code is generated, do not edit it directly. - -#pragma mark - UInt64 - -@implementation GPBUInt64Array { - @package - uint64_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(uint64_t)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBUInt64Array*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBUInt64Array *)array { - return [[(GPBUInt64Array*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBUInt64Array *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const uint64_t [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(uint64_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(uint64_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(uint64_t))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBUInt64Array allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBUInt64Array class]]) { - return NO; - } - GPBUInt64Array *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(uint64_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%llu", _values[i]]; - } else { - [result appendFormat:@", %llu", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(uint64_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (uint64_t)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(uint64_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(uint64_t))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(uint64_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const uint64_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(uint64_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(uint64_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(uint64_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(uint64_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBUInt64Array *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(uint64_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - uint64_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Float, float, %f) -// This block of code is generated, do not edit it directly. - -#pragma mark - Float - -@implementation GPBFloatArray { - @package - float *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(float)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBFloatArray*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBFloatArray *)array { - return [[(GPBFloatArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBFloatArray *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const float [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(float)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(float)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(float))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBFloatArray allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBFloatArray class]]) { - return NO; - } - GPBFloatArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(float))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%f", _values[i]]; - } else { - [result appendFormat:@", %f", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(float value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (float)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(float)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(float))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(float)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const float [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(float)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(float)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(float)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(float)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBFloatArray *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(float)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - float temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Double, double, %lf) -// This block of code is generated, do not edit it directly. - -#pragma mark - Double - -@implementation GPBDoubleArray { - @package - double *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(double)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBDoubleArray*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBDoubleArray *)array { - return [[(GPBDoubleArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBDoubleArray *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const double [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(double)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(double)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(double))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBDoubleArray allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBDoubleArray class]]) { - return NO; - } - GPBDoubleArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(double))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%lf", _values[i]]; - } else { - [result appendFormat:@", %lf", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(double value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (double)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(double)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(double))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(double)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const double [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(double)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(double)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(double)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(double)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBDoubleArray *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(double)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - double temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND ARRAY_INTERFACE_SIMPLE(Bool, BOOL, %d) -// This block of code is generated, do not edit it directly. - -#pragma mark - Bool - -@implementation GPBBoolArray { - @package - BOOL *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; - -+ (instancetype)array { - return [[[self alloc] init] autorelease]; -} - -+ (instancetype)arrayWithValue:(BOOL)value { - // Cast is needed so the compiler knows what class we are invoking initWithValues: on to get - // the type correct. - return [[(GPBBoolArray*)[self alloc] initWithValues:&value count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBBoolArray *)array { - return [[(GPBBoolArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithCapacity:(NSUInteger)count { - return [[[self alloc] initWithCapacity:count] autorelease]; -} - -- (instancetype)init { - self = [super init]; - // No work needed; - return self; -} - -- (instancetype)initWithValueArray:(GPBBoolArray *)array { - return [self initWithValues:array->_values count:array->_count]; -} - -- (instancetype)initWithValues:(const BOOL [])values count:(NSUInteger)count { - self = [self init]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(BOOL)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(BOOL)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(BOOL))]; - } - } - } - return self; -} - -- (instancetype)initWithCapacity:(NSUInteger)count { - self = [self initWithValues:NULL count:0]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBBoolArray allocWithZone:zone] initWithValues:_values count:_count]; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBBoolArray class]]) { - return NO; - } - GPBBoolArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(BOOL))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%d", _values[i]]; - } else { - [result appendFormat:@", %d", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateValuesWithBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(BOOL value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} - -- (BOOL)valueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - return _values[index]; -} - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(BOOL)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(BOOL))]; - } - _capacity = newCapacity; -} - -- (void)addValue:(BOOL)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const BOOL [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(BOOL)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(BOOL)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(BOOL)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(BOOL)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addValuesFromArray:(GPBBoolArray *)array { - [self addValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(BOOL)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - BOOL temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -@end - -//%PDDM-EXPAND-END (7 expansions) - -#pragma mark - Enum - -@implementation GPBEnumArray { - @package - GPBEnumValidationFunc _validationFunc; - int32_t *_values; - NSUInteger _count; - NSUInteger _capacity; -} - -@synthesize count = _count; -@synthesize validationFunc = _validationFunc; - -+ (instancetype)array { - return [[[self alloc] initWithValidationFunction:NULL] autorelease]; -} - -+ (instancetype)arrayWithValidationFunction:(GPBEnumValidationFunc)func { - return [[[self alloc] initWithValidationFunction:func] autorelease]; -} - -+ (instancetype)arrayWithValidationFunction:(GPBEnumValidationFunc)func - rawValue:(int32_t)value { - return [[[self alloc] initWithValidationFunction:func - rawValues:&value - count:1] autorelease]; -} - -+ (instancetype)arrayWithValueArray:(GPBEnumArray *)array { - return [[(GPBEnumArray*)[self alloc] initWithValueArray:array] autorelease]; -} - -+ (instancetype)arrayWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)count { - return [[[self alloc] initWithValidationFunction:func capacity:count] autorelease]; -} - -- (instancetype)init { - return [self initWithValidationFunction:NULL]; -} - -- (instancetype)initWithValueArray:(GPBEnumArray *)array { - return [self initWithValidationFunction:array->_validationFunc - rawValues:array->_values - count:array->_count]; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func { - self = [super init]; - if (self) { - _validationFunc = (func != NULL ? func : ArrayDefault_IsValidValue); - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - rawValues:(const int32_t [])values - count:(NSUInteger)count { - self = [self initWithValidationFunction:func]; - if (self) { - if (count && values) { - _values = reallocf(_values, count * sizeof(int32_t)); - if (_values != NULL) { - _capacity = count; - memcpy(_values, values, count * sizeof(int32_t)); - _count = count; - } else { - [self release]; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(count * sizeof(int32_t))]; - } - } - } - return self; -} - -- (instancetype)initWithValidationFunction:(GPBEnumValidationFunc)func - capacity:(NSUInteger)count { - self = [self initWithValidationFunction:func]; - if (self && count) { - [self internalResizeToCapacity:count]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[GPBEnumArray allocWithZone:zone] - initWithValidationFunction:_validationFunc - rawValues:_values - count:_count]; -} - -//%PDDM-EXPAND ARRAY_IMMUTABLE_CORE(Enum, int32_t, Raw, %d) -// This block of code is generated, do not edit it directly. - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - free(_values); - [super dealloc]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - if (![other isKindOfClass:[GPBEnumArray class]]) { - return NO; - } - GPBEnumArray *otherArray = other; - return (_count == otherArray->_count - && memcmp(_values, otherArray->_values, (_count * sizeof(int32_t))) == 0); -} - -- (NSUInteger)hash { - // Follow NSArray's lead, and use the count as the hash. - return _count; -} - -- (NSString *)description { - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@ %p> { ", [self class], self]; - for (NSUInteger i = 0, count = _count; i < count; ++i) { - if (i == 0) { - [result appendFormat:@"%d", _values[i]]; - } else { - [result appendFormat:@", %d", _values[i]]; - } - } - [result appendFormat:@" }"]; - return result; -} - -- (void)enumerateRawValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateRawValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateRawValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - if ((opts & NSEnumerationReverse) == 0) { - for (NSUInteger i = 0, count = _count; i < count; ++i) { - block(_values[i], i, &stop); - if (stop) break; - } - } else if (_count > 0) { - for (NSUInteger i = _count; i > 0; --i) { - block(_values[i - 1], (i - 1), &stop); - if (stop) break; - } - } -} -//%PDDM-EXPAND-END ARRAY_IMMUTABLE_CORE(Enum, int32_t, Raw, %d) - -- (int32_t)valueAtIndex:(NSUInteger)index { -//%PDDM-EXPAND VALIDATE_RANGE(index, _count) -// This block of code is generated, do not edit it directly. - - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } -//%PDDM-EXPAND-END VALIDATE_RANGE(index, _count) - int32_t result = _values[index]; - if (!_validationFunc(result)) { - result = kGPBUnrecognizedEnumeratorValue; - } - return result; -} - -- (int32_t)rawValueAtIndex:(NSUInteger)index { -//%PDDM-EXPAND VALIDATE_RANGE(index, _count) -// This block of code is generated, do not edit it directly. - - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } -//%PDDM-EXPAND-END VALIDATE_RANGE(index, _count) - return _values[index]; -} - -- (void)enumerateValuesWithBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - [self enumerateValuesWithOptions:0 usingBlock:block]; -} - -- (void)enumerateValuesWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(int32_t value, NSUInteger idx, BOOL *stop))block { - // NSEnumerationConcurrent isn't currently supported (and Apple's docs say that is ok). - BOOL stop = NO; - GPBEnumValidationFunc func = _validationFunc; - if ((opts & NSEnumerationReverse) == 0) { - int32_t *scan = _values; - int32_t *end = scan + _count; - for (NSUInteger i = 0; scan < end; ++i, ++scan) { - int32_t value = *scan; - if (!func(value)) { - value = kGPBUnrecognizedEnumeratorValue; - } - block(value, i, &stop); - if (stop) break; - } - } else if (_count > 0) { - int32_t *end = _values; - int32_t *scan = end + (_count - 1); - for (NSUInteger i = (_count - 1); scan >= end; --i, --scan) { - int32_t value = *scan; - if (!func(value)) { - value = kGPBUnrecognizedEnumeratorValue; - } - block(value, i, &stop); - if (stop) break; - } - } -} - -//%PDDM-EXPAND ARRAY_MUTABLE_CORE(Enum, int32_t, Raw, %d) -// This block of code is generated, do not edit it directly. - -- (void)internalResizeToCapacity:(NSUInteger)newCapacity { - _values = reallocf(_values, newCapacity * sizeof(int32_t)); - if (_values == NULL) { - _capacity = 0; - _count = 0; - [NSException raise:NSMallocException - format:@"Failed to allocate %lu bytes", - (unsigned long)(newCapacity * sizeof(int32_t))]; - } - _capacity = newCapacity; -} - -- (void)addRawValue:(int32_t)value { - [self addRawValues:&value count:1]; -} - -- (void)addRawValues:(const int32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertRawValue:(int32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withRawValue:(int32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - _values[index] = value; -} - -- (void)addRawValuesFromArray:(GPBEnumArray *)array { - [self addRawValues:array->_values count:array->_count]; -} - -- (void)removeValueAtIndex:(NSUInteger)index { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - NSUInteger newCount = _count - 1; - if (index != newCount) { - memmove(&_values[index], &_values[index + 1], (newCount - index) * sizeof(int32_t)); - } - _count = newCount; - if ((newCount + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } -} - -- (void)removeAll { - _count = 0; - if ((0 + (2 * kChunkSize)) < _capacity) { - [self internalResizeToCapacity:CapacityFromCount(0)]; - } -} - -- (void)exchangeValueAtIndex:(NSUInteger)idx1 - withValueAtIndex:(NSUInteger)idx2 { - if (idx1 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx1, (unsigned long)_count]; - } - if (idx2 >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)idx2, (unsigned long)_count]; - } - int32_t temp = _values[idx1]; - _values[idx1] = _values[idx2]; - _values[idx2] = temp; -} - -//%PDDM-EXPAND MUTATION_METHODS(Enum, int32_t, , EnumValidationList, EnumValidationOne) -// This block of code is generated, do not edit it directly. - -- (void)addValue:(int32_t)value { - [self addValues:&value count:1]; -} - -- (void)addValues:(const int32_t [])values count:(NSUInteger)count { - if (values == NULL || count == 0) return; - GPBEnumValidationFunc func = _validationFunc; - for (NSUInteger i = 0; i < count; ++i) { - if (!func(values[i])) { - [NSException raise:NSInvalidArgumentException - format:@"%@: Attempt to set an unknown enum value (%d)", - [self class], values[i]]; - } - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + count; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - memcpy(&_values[initialCount], values, count * sizeof(int32_t)); - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)insertValue:(int32_t)value atIndex:(NSUInteger)index { - if (index >= _count + 1) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count + 1]; - } - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"%@: Attempt to set an unknown enum value (%d)", - [self class], value]; - } - NSUInteger initialCount = _count; - NSUInteger newCount = initialCount + 1; - if (newCount > _capacity) { - [self internalResizeToCapacity:CapacityFromCount(newCount)]; - } - _count = newCount; - if (index != initialCount) { - memmove(&_values[index + 1], &_values[index], (initialCount - index) * sizeof(int32_t)); - } - _values[index] = value; - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)replaceValueAtIndex:(NSUInteger)index withValue:(int32_t)value { - if (index >= _count) { - [NSException raise:NSRangeException - format:@"Index (%lu) beyond bounds (%lu)", - (unsigned long)index, (unsigned long)_count]; - } - if (!_validationFunc(value)) { - [NSException raise:NSInvalidArgumentException - format:@"%@: Attempt to set an unknown enum value (%d)", - [self class], value]; - } - _values[index] = value; -} -//%PDDM-EXPAND-END (2 expansions) - -//%PDDM-DEFINE MUTATION_HOOK_EnumValidationList() -//% GPBEnumValidationFunc func = _validationFunc; -//% for (NSUInteger i = 0; i < count; ++i) { -//% if (!func(values[i])) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"%@: Attempt to set an unknown enum value (%d)", -//% [self class], values[i]]; -//% } -//% } -//% -//%PDDM-DEFINE MUTATION_HOOK_EnumValidationOne() -//% if (!_validationFunc(value)) { -//% [NSException raise:NSInvalidArgumentException -//% format:@"%@: Attempt to set an unknown enum value (%d)", -//% [self class], value]; -//% } -//% - -@end - -#pragma mark - NSArray Subclass - -@implementation GPBAutocreatedArray { - NSMutableArray *_array; -} - -- (void)dealloc { - NSAssert(!_autocreator, - @"%@: Autocreator must be cleared before release, autocreator: %@", - [self class], _autocreator); - [_array release]; - [super dealloc]; -} - -#pragma mark Required NSArray overrides - -- (NSUInteger)count { - return [_array count]; -} - -- (id)objectAtIndex:(NSUInteger)idx { - return [_array objectAtIndex:idx]; -} - -#pragma mark Required NSMutableArray overrides - -// Only need to call GPBAutocreatedArrayModified() when adding things since -// we only autocreate empty arrays. - -- (void)insertObject:(id)anObject atIndex:(NSUInteger)idx { - if (_array == nil) { - _array = [[NSMutableArray alloc] init]; - } - [_array insertObject:anObject atIndex:idx]; - - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)removeObject:(id)anObject { - [_array removeObject:anObject]; -} - -- (void)removeObjectAtIndex:(NSUInteger)idx { - [_array removeObjectAtIndex:idx]; -} - -- (void)addObject:(id)anObject { - if (_array == nil) { - _array = [[NSMutableArray alloc] init]; - } - [_array addObject:anObject]; - - if (_autocreator) { - GPBAutocreatedArrayModified(_autocreator, self); - } -} - -- (void)removeLastObject { - [_array removeLastObject]; -} - -- (void)replaceObjectAtIndex:(NSUInteger)idx withObject:(id)anObject { - [_array replaceObjectAtIndex:idx withObject:anObject]; -} - -#pragma mark Extra things hooked - -- (id)copyWithZone:(NSZone *)zone { - if (_array == nil) { - _array = [[NSMutableArray alloc] init]; - } - return [_array copyWithZone:zone]; -} - -- (id)mutableCopyWithZone:(NSZone *)zone { - if (_array == nil) { - _array = [[NSMutableArray alloc] init]; - } - return [_array mutableCopyWithZone:zone]; -} - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(id __unsafe_unretained [])buffer - count:(NSUInteger)len { - return [_array countByEnumeratingWithState:state objects:buffer count:len]; -} - -- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block { - [_array enumerateObjectsUsingBlock:block]; -} - -- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts - usingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block { - [_array enumerateObjectsWithOptions:opts usingBlock:block]; -} - -@end - -#pragma clang diagnostic pop |