Skip to content

Commit

Permalink
CPIndexSet enumerateIndexesUsingBlock:.
Browse files Browse the repository at this point in the history
  • Loading branch information
aljungberg committed Mar 17, 2012
1 parent 2b0ed82 commit 872b446
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
22 changes: 22 additions & 0 deletions Foundation/CPIndexSet.j
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,28 @@
return description;
}

- (void)enumerateIndexesUsingBlock:(Function /*(int idx, @ref BOOL) */)aFunction
{
if (!_count)
return;

var index = 0,
stop = NO;

for (var i = 0, count = _ranges.length; i < count; i++)
{
var range = _ranges[i],
maximum = CPMaxRange(range);

for (var j = range.location; j < maximum; j++)
{
aFunction(j, AT_REF(stop));
if (stop)
return;
}
}
}

@end

@implementation CPIndexSet(CPMutableIndexSet)
Expand Down
30 changes: 30 additions & 0 deletions Tests/Foundation/CPIndexSetTest.j
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,36 @@ function descriptionWithoutEntity(aString)
[self assertTrue:[_set isEqualToIndexSet:_set]];
}

- (void)testEnumerateIndexesUsingBlock_
{
var set0 = [CPIndexSet indexSet],
set1 = [CPMutableIndexSet indexSet],
set2 = [CPMutableIndexSet indexSet];

[set1 addIndexesInRange:CPMakeRange(3, 2)];

[set2 addIndexesInRange:CPMakeRange(3, 2)];
[set2 addIndexesInRange:CPMakeRange(0, 1)];

var visitedIndexes = [],
aBlock;

aBlock = function(idx)
{
visitedIndexes.push(idx);
};

[set0 enumerateIndexesUsingBlock:aBlock];
[self assert:0 equals:[visitedIndexes count] message:"enumerate empty set"];

[set1 enumerateIndexesUsingBlock:aBlock];
[self assert:[3, 4] equals:visitedIndexes message:"enumerate " + [set1 description]];

visitedIndexes = [];
[set2 enumerateIndexesUsingBlock:aBlock];
[self assert:[0, 3, 4] equals:visitedIndexes message:"enumerate " + [set2 description]];
}

- (void)tearDown
{
_set = nil;
Expand Down

0 comments on commit 872b446

Please sign in to comment.