KWGenericMatchingAdditions.m 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. #import "KWGenericMatchingAdditions.h"
  9. #import "KWGenericMatcher.h"
  10. #import "KWGenericMatchEvaluator.h"
  11. @implementation NSObject (KiwiGenericMatchingAdditions)
  12. - (BOOL)isEqualOrMatches:(id)object {
  13. if ([KWGenericMatchEvaluator isGenericMatcher:self]) {
  14. return [KWGenericMatchEvaluator genericMatcher:self matches:object];
  15. }
  16. return [self isEqual:object];
  17. }
  18. @end
  19. @implementation NSArray (KiwiGenericMatchingAdditions)
  20. - (BOOL)containsObjectEqualToOrMatching:(id)object {
  21. if ([KWGenericMatchEvaluator isGenericMatcher:object]) {
  22. return [self containsObjectMatching:object];
  23. }
  24. return [self containsObject:object];
  25. }
  26. - (BOOL)containsObjectMatching:(id)matcher {
  27. NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
  28. BOOL matches = [KWGenericMatchEvaluator genericMatcher:matcher matches:obj];
  29. if (matches) {
  30. *stop = YES;
  31. }
  32. return matches;
  33. }];
  34. return (indexSet.count > 0);
  35. }
  36. @end
  37. @implementation NSSet (KiwiGenericMatchingAdditions)
  38. - (BOOL)containsObjectEqualToOrMatching:(id)object {
  39. if ([KWGenericMatchEvaluator isGenericMatcher:object]) {
  40. return [[self allObjects] containsObjectMatching:object];
  41. }
  42. return [self containsObject:object];
  43. }
  44. @end
  45. @implementation NSOrderedSet (KiwiGenericMatchingAdditions)
  46. - (BOOL)containsObjectEqualToOrMatching:(id)object {
  47. if ([KWGenericMatchEvaluator isGenericMatcher:object]) {
  48. return [[self array] containsObjectMatching:object];
  49. }
  50. return [self containsObject:object];
  51. }
  52. @end