mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
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:
parent
281d40e99b
commit
3291097d21
3 changed files with 46 additions and 0 deletions
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue