Davie added objectsPassingTest:

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@35731 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2012-10-22 04:38:47 +00:00
parent 281d40e99b
commit 3291097d21
3 changed files with 46 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2012-10-22 Thomas Davie <tom.davie@gmail.com>
* Headers/Foundation/NSSet.h:
* Source/NSSet.m:
Add -objectsPassingTest:
2012-10-22 Rene Hexel <rhexel+savannah@mac.com>
* Source/Additions/GSXML.m:

View file

@ -83,6 +83,8 @@ extern "C" {
#if OS_API_VERSION(100600, GS_API_LATEST)
DEFINE_BLOCK_TYPE(GSSetEnumeratorBlock, void, id, BOOL*);
DEFINE_BLOCK_TYPE(GSSetFilterBlock, BOOL, id, BOOL*);
/**
* Enumerate over the collection using a given block. The first argument is
* the object. The second argument is a pointer to a BOOL indicating
@ -103,6 +105,12 @@ DEFINE_BLOCK_TYPE(GSSetEnumeratorBlock, void, id, BOOL*);
*/
- (void) enumerateObjectsWithOptions: (NSEnumerationOptions)opts
usingBlock: (GSSetEnumeratorBlock)aBlock;
- (NSSet *) objectsPassingTest: (GSSetFilterBlock)aBlock;
- (NSSet *) objectsWithOptions: (NSEnumerationOptions)opts
passingTest: (GSSetFilterBlock)aBlock;
#endif
#if OS_API_VERSION(100500,GS_API_LATEST)

View file

@ -883,6 +883,38 @@ static Class NSMutableSet_concrete_class;
GS_DISPATCH_TEARDOWN_QUEUE_AND_GROUP_FOR_ENUMERATION(enumQueue, opts)
}
- (NSSet *) objectsPassingTest: (GSSetFilterBlock)aBlock
{
return [self objectsWithOptions: 0 passingTest: aBlock];
}
- (NSSet *) objectsWithOptions: (NSEnumerationOptions)opts
passingTest: (GSSetFilterBlock)aBlock
{
BOOL shouldStop = NO;
id<NSFastEnumeration> enumerator = self;
NSMutableSet *resultSet;
resultSet = [NSMutableSet setWithCapacity: [self count]];
FOR_IN (id, obj, enumerator)
{
BOOL include = CALL_BLOCK(aBlock, obj, &shouldStop);
if (include)
{
[resultSet addObject:obj];
}
if (shouldStop)
{
break;
}
}
END_FOR_IN(enumerator)
return [resultSet makeImmutableCopyOnFail: NO];
}
/** Return a set formed by adding anObject to the receiver.
*/
- (NSSet *) setByAddingObject: (id)anObject