ObjFW  Diff

Differences From Artifact [a4ce122b88]:

To Artifact [dc60bfa33c]:


237
238
239
240
241
242
243
244
245


246
247
248
249
250
251
252
237
238
239
240
241
242
243


244
245
246
247
248
249
250
251
252







-
-
+
+







{
	self = [super init];

	@try {
		id *objectsCArray, *keysCArray;
		uint32_t i, j, newSize;

		keysCArray = [keys cArray];
		objectsCArray = [objects cArray];
		keysCArray = [keys objects];
		objectsCArray = [objects objects];
		count = [keys count];

		if (count > UINT32_MAX)
			@throw [OFOutOfRangeException exceptionWithClass: isa];

		for (newSize = 1; newSize < count; newSize <<= 1);
		if (count * 4 / newSize >= 3)
626
627
628
629
630
631
632
633
634


635
636
637
638
639

640
641
642
643
644
645


646
647

648
649
650
651
652
653
654
655
656
657


658
659
660
661
662

663
664
665
666
667
668


669
670

671
672
673
674
675
676
677
626
627
628
629
630
631
632


633
634
635
636
637
638

639
640
641
642
643


644
645
646

647
648
649
650
651
652
653
654
655


656
657
658
659
660
661

662
663
664
665
666


667
668
669

670
671
672
673
674
675
676
677







-
-
+
+




-
+




-
-
+
+

-
+








-
-
+
+




-
+




-
-
+
+

-
+








	return NO;
}

- (OFArray*)allKeys
{
	OFArray *ret;
	id *cArray = [self allocMemoryForNItems: count
					 ofSize: sizeof(id)];
	id *keys = [self allocMemoryForNItems: count
				       ofSize: sizeof(id)];
	size_t i, j;

	for (i = j = 0; i < size; i++)
		if (data[i] != NULL && data[i] != DELETED)
			cArray[j++] = data[i]->key;
			keys[j++] = data[i]->key;

	assert(j == count);

	@try {
		ret = [OFArray arrayWithCArray: cArray
					length: count];
		ret = [OFArray arrayWithObjects: keys
					  count: count];
	} @finally {
		[self freeMemory: cArray];
		[self freeMemory: keys];
	}

	return ret;
}

- (OFArray*)allObjects
{
	OFArray *ret;
	id *cArray = [self allocMemoryForNItems: count
					 ofSize: sizeof(id)];
	id *objects = [self allocMemoryForNItems: count
					  ofSize: sizeof(id)];
	size_t i, j;

	for (i = j = 0; i < size; i++)
		if (data[i] != NULL && data[i] != DELETED)
			cArray[j++] = data[i]->object;
			objects[j++] = data[i]->object;

	assert(j == count);

	@try {
		ret = [OFArray arrayWithCArray: cArray
					length: count];
		ret = [OFArray arrayWithObjects: objects
					  count: count];
	} @finally {
		[self freeMemory: cArray];
		[self freeMemory: objects];
	}

	return ret;
}

- (OFEnumerator*)keyEnumerator
{