313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
|
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
|
-
-
+
|
*/
if ((capacity < _capacity && count > _count) || capacity < MIN_CAPACITY)
return;
buckets = [self allocMemoryWithSize: sizeof(*buckets)
count: capacity];
for (i = 0; i < capacity; i++)
buckets[i] = NULL;
memset(buckets, 0, capacity * sizeof(*buckets));
for (i = 0; i < _capacity; i++) {
if (_buckets[i] != NULL && _buckets[i] != &deleted) {
uint32_t j, last;
last = capacity;
|
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
|
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
|
-
+
|
continue;
if (_keyFunctions.equal(_buckets[i]->key, key))
break;
}
}
/* Key not in dictionary */
/* Key not in map table */
if (i >= last || _buckets[i] == NULL || _buckets[i] == &deleted ||
!_keyFunctions.equal(_buckets[i]->key, key)) {
struct of_map_table_bucket *bucket;
[self OF_resizeForCount: _count + 1];
_mutations++;
|
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
|
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
|
-
+
|
[self freeMemory: bucket];
@throw e;
}
@try {
bucket->value = _valueFunctions.retain(value);
} @catch (id e) {
_keyFunctions.release(key);
_keyFunctions.release(bucket->key);
[self freeMemory: bucket];
@throw e;
}
bucket->hash = hash;
_buckets[i] = bucket;
|