main
 1//
 2//  NSObject+KiwiAdditions.m
 3//  Kiwi
 4//
 5//  Created by Luke Redpath on 24/01/2011.
 6//  Copyright 2011 Allen Ding. All rights reserved.
 7//
 8
 9#import "KWGenericMatchingAdditions.h"
10#import "KWGenericMatcher.h"
11#import "KWGenericMatchEvaluator.h"
12
13@implementation NSObject (KiwiGenericMatchingAdditions)
14
15- (BOOL)isEqualOrMatches:(id)object
16{
17    if ([KWGenericMatchEvaluator isGenericMatcher:self]) {
18        return [KWGenericMatchEvaluator genericMatcher:self matches:object];
19    }
20    return [self isEqual:object];
21}
22
23@end
24
25@implementation NSArray (KiwiGenericMatchingAdditions)
26
27- (BOOL)containsObjectEqualToOrMatching:(id)object
28{
29    if ([KWGenericMatchEvaluator isGenericMatcher:object]) {
30        return [self containsObjectMatching:object];
31    }
32    return [self containsObject:object];
33}
34
35- (BOOL)containsObjectMatching:(id)matcher
36{
37    NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
38        BOOL matches = [KWGenericMatchEvaluator genericMatcher:matcher matches:obj];
39        if (matches) {
40            *stop = YES;
41        }
42        return matches;
43    }];
44
45    return (indexSet.count > 0);
46}
47
48@end
49
50@implementation NSSet (KiwiGenericMatchingAdditions)
51
52- (BOOL)containsObjectEqualToOrMatching:(id)object
53{
54    if ([KWGenericMatchEvaluator isGenericMatcher:object]) {
55        return [[self allObjects] containsObjectMatching:object];
56    }
57    return [self containsObject:object];
58}
59
60@end
61
62@implementation NSOrderedSet (KiwiGenericMatchingAdditions)
63
64- (BOOL)containsObjectEqualToOrMatching:(id)object
65{
66    if ([KWGenericMatchEvaluator isGenericMatcher:object]) {
67        return [[self array] containsObjectMatching:object];
68    }
69    return [self containsObject:object];
70}
71
72@end