ObjFW  Diff

Differences From Artifact [369534eb2f]:

To Artifact [65b65f023d]:


335
336
337
338
339
340
341
342

343
344
345
346
347

348
349
350
351
352
353
354
335
336
337
338
339
340
341

342
343
344
345
346

347
348
349
350
351
352
353
354







-
+




-
+







	for (i = 0; i < count; i++)
		if ([self objectAtIndex: i] == object)
			return i;

	return OF_NOT_FOUND;
}

- (BOOL)containsObject: (id)object
- (bool)containsObject: (id)object
{
	return ([self indexOfObject: object] != OF_NOT_FOUND);
}

- (BOOL)containsObjectIdenticalTo: (id)object
- (bool)containsObjectIdenticalTo: (id)object
{
	return ([self indexOfObjectIdenticalTo: object] != OF_NOT_FOUND);
}

- (id)firstObject
{
	if ([self count] > 0)
443
444
445
446
447
448
449
450

451
452
453
454
455
456
457

458
459
460
461
462
463
464

465
466
467
468
469

470
471

472
473
474
475
476
477
478
443
444
445
446
447
448
449

450
451
452
453
454
455
456

457
458
459
460
461
462
463

464
465
466
467
468

469
470

471
472
473
474
475
476
477
478







-
+






-
+






-
+




-
+

-
+







	[ret makeImmutable];

	objc_autoreleasePoolPop(pool);

	return ret;
}

- (BOOL)isEqual: (id)object
- (bool)isEqual: (id)object
{
	/* FIXME: Optimize (for example, buffer of 16 for each) */
	OFArray *otherArray;
	size_t i, count;

	if (![object isKindOfClass: [OFArray class]])
		return NO;
		return false;

	otherArray = object;

	count = [self count];

	if (count != [otherArray count])
		return NO;
		return false;

	for (i = 0; i < count; i++)
		if (![[self objectAtIndex: i] isEqual:
		    [otherArray objectAtIndex: i]])
			return NO;
			return false;

	return YES;
	return true;
}

- (uint32_t)hash
{
	id *objects = [self objects];
	size_t i, count = [self count];
	uint32_t hash;
700
701
702
703
704
705
706
707

708
709
710
711
712
713
714
700
701
702
703
704
705
706

707
708
709
710
711
712
713
714







-
+







					    mutationsPtr: NULL] autorelease];
}

#if defined(OF_HAVE_BLOCKS) && defined(OF_HAVE_FAST_ENUMERATION)
- (void)enumerateObjectsUsingBlock: (of_array_enumeration_block_t)block
{
	size_t i = 0;
	BOOL stop = NO;
	bool stop = false;

	for (id object in self) {
		block(object, i++, &stop);

		if (stop)
			break;
	}
757
758
759
760
761
762
763
764

765
766
767
768
769
770
771
757
758
759
760
761
762
763

764
765
766
767
768
769
770
771







-
+







	OFArray *ret;
	size_t count = [self count];
	id *tmp = [self allocMemoryWithSize: sizeof(id)
				      count: count];

	@try {
		[self enumerateObjectsUsingBlock: ^ (id object, size_t index,
		    BOOL *stop) {
		    bool *stop) {
			tmp[index] = block(object, index);
		}];

		ret = [OFArray arrayWithObjects: tmp
					  count: count];
	} @finally {
		[self freeMemory: tmp];
781
782
783
784
785
786
787
788

789
790
791
792
793
794
795
781
782
783
784
785
786
787

788
789
790
791
792
793
794
795







-
+







	id *tmp = [self allocMemoryWithSize: sizeof(id)
				      count: count];

	@try {
		__block size_t i = 0;

		[self enumerateObjectsUsingBlock: ^ (id object, size_t index,
		    BOOL *stop) {
		    bool *stop) {
			if (block(object, index))
				tmp[i++] = object;
		}];

		ret = [OFArray arrayWithObjects: tmp
					  count: i];
	} @finally {
806
807
808
809
810
811
812
813

814
815
816
817
818
819
820
806
807
808
809
810
811
812

813
814
815
816
817
818
819
820







-
+








	if (count == 0)
		return nil;
	if (count == 1)
		return [[[self firstObject] retain] autorelease];

	[self enumerateObjectsUsingBlock: ^ (id object, size_t index,
	    BOOL *stop) {
	    bool *stop) {
		id new;

		if (index == 0) {
			current = [object retain];
			return;
		}