Add missing set filtering functionality

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@27833 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Xavier Glattard 2009-02-10 14:43:34 +00:00
parent b732dc843b
commit b3da05d398
3 changed files with 65 additions and 0 deletions

View file

@ -1534,6 +1534,48 @@
@end
@implementation NSSet (NSPredicate)
- (NSSet *) filteredSetUsingPredicate: (NSPredicate *)predicate
{
NSMutableSet *result;
NSEnumerator *e = [self objectEnumerator];
id object;
result = [NSMutableSet setWithCapacity: [self count]];
while ((object = [e nextObject]) != nil)
{
if ([predicate evaluateWithObject: object] == YES)
{
[result addObject: object]; // passes filter
}
}
return [result makeImmutableCopyOnFail: NO];
}
@end
@implementation NSMutableSet (NSPredicate)
- (void) filterUsingPredicate: (NSPredicate *)predicate
{
NSMutableSet *rejected;
NSEnumerator *e = [self objectEnumerator];
id object;
rejected = [NSMutableSet setWithCapacity: [self count]];
while ((object = [e nextObject]) != nil)
{
if ([predicate evaluateWithObject: object] == NO)
{
[rejected addObject: object];
}
}
[self minusSet: rejected];
}
@end
@implementation GSPredicateScanner