// // NSArray+Additions.m // Perforce // // Created by Adam Czubernat on 07/03/15. // Copyright (c) 2015 Perforce Software, Inc. All rights reserved. // #import "NSArray+Additions.h" @implementation NSArray (Additions) - (NSArray *)filteredArrayUsingBlock:(BOOL (^)(id obj, NSUInteger idx))predicate { id newObjects[self.count]; NSUInteger idx = 0; NSUInteger count = 0; for (id object in self) { if (predicate(object, idx++)) newObjects[count++] = object; } return [[NSArray alloc] initWithObjects:newObjects count:count]; } - (NSArray *)filteredArrayUsingClass:(Class)objectClass { id newObjects[self.count]; NSUInteger count = 0; for (id object in self) { if ([object isKindOfClass:objectClass]) newObjects[count++] = object; } return [[NSArray alloc] initWithObjects:newObjects count:count]; } - (id)firstObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx))predicate { NSUInteger idx = 0; for (id object in self) { if (predicate(object, idx++)) return object; } return nil; } - (NSArray *)arrayUsingBlock:(id (^)(id, NSUInteger))block { id newObjects[self.count]; NSUInteger idx = 0; for (id object in self) { newObjects[idx] = block(object, idx); idx++; } return [[NSArray alloc] initWithObjects:newObjects count:self.count]; } @end