@@ -161,12 +161,11 @@ _capacity *= 2; if (_capacity < MIN_CAPACITY) _capacity = MIN_CAPACITY; - _buckets = [self allocZeroedMemoryWithSize: sizeof(*_buckets) - count: _capacity]; + _buckets = of_calloc(_capacity, sizeof(*_buckets)); if (of_hash_seed != 0) _rotate = of_random16() & 31; } @catch (id e) { [self release]; @@ -180,12 +179,16 @@ { for (unsigned long i = 0; i < _capacity; i++) { if (_buckets[i] != NULL && _buckets[i] != &deleted) { _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); + + free(_buckets[i]); } } + + free(_buckets); [super dealloc]; } - (bool)isEqual: (id)object @@ -320,12 +323,11 @@ * below the minimum capacity. */ if ((capacity < _capacity && count > _count) || capacity < MIN_CAPACITY) return; - buckets = [self allocZeroedMemoryWithSize: sizeof(*buckets) - count: capacity]; + buckets = of_calloc(capacity, sizeof(*buckets)); for (unsigned long i = 0; i < _capacity; i++) { if (_buckets[i] != NULL && _buckets[i] != &deleted) { unsigned long j, last; @@ -347,11 +349,11 @@ buckets[j] = _buckets[i]; } } - [self freeMemory: _buckets]; + free(_buckets); _buckets = buckets; _capacity = capacity; } - (void)of_setObject: (void *)object @@ -410,24 +412,24 @@ } if (i >= last) @throw [OFOutOfRangeException exception]; - bucket = [self allocMemoryWithSize: sizeof(*bucket)]; + bucket = of_malloc(1, sizeof(*bucket)); @try { bucket->key = _keyFunctions.retain(key); } @catch (id e) { - [self freeMemory: bucket]; + free(bucket); @throw e; } @try { bucket->object = _objectFunctions.retain(object); } @catch (id e) { _keyFunctions.release(bucket->key); - [self freeMemory: bucket]; + free(bucket); @throw e; } bucket->hash = hash; @@ -468,11 +470,11 @@ _mutations++; _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); - [self freeMemory: _buckets[i]]; + free(_buckets[i]); _buckets[i] = &deleted; _count--; [self of_resizeForCount: _count]; @@ -492,11 +494,11 @@ if (_keyFunctions.equal(_buckets[i]->key, key)) { _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); - [self freeMemory: _buckets[i]]; + free(_buckets[i]); _buckets[i] = &deleted; _count--; _mutations++; [self of_resizeForCount: _count]; @@ -516,20 +518,18 @@ } _keyFunctions.release(_buckets[i]->key); _objectFunctions.release(_buckets[i]->object); - [self freeMemory: _buckets[i]]; + free(_buckets[i]); _buckets[i] = NULL; } } _count = 0; _capacity = MIN_CAPACITY; - _buckets = [self resizeMemory: _buckets - size: sizeof(*_buckets) - count: _capacity]; + _buckets = of_realloc(_buckets, _capacity, sizeof(*_buckets)); /* * Get a new random value for _rotate, so that it is not less secure * than creating a new hash map. */