123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- //
- // RACEagerSequence.m
- // ReactiveObjC
- //
- // Created by Uri Baghin on 02/01/2013.
- // Copyright (c) 2013 GitHub, Inc. All rights reserved.
- //
- #import "RACEagerSequence.h"
- #import "NSObject+RACDescription.h"
- #import "RACArraySequence.h"
- @implementation RACEagerSequence
- #pragma mark RACStream
- + (RACSequence *)return:(id)value {
- return [[self sequenceWithArray:@[ value ] offset:0] setNameWithFormat:@"+return: %@", RACDescription(value)];
- }
- - (RACSequence *)bind:(RACSequenceBindBlock (^)(void))block {
- NSCParameterAssert(block != nil);
- RACStreamBindBlock bindBlock = block();
- NSArray *currentArray = self.array;
- NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:currentArray.count];
-
- for (id value in currentArray) {
- BOOL stop = NO;
- RACSequence *boundValue = (id)bindBlock(value, &stop);
- if (boundValue == nil) break;
- for (id x in boundValue) {
- [resultArray addObject:x];
- }
- if (stop) break;
- }
-
- return [[self.class sequenceWithArray:resultArray offset:0] setNameWithFormat:@"[%@] -bind:", self.name];
- }
- - (RACSequence *)concat:(RACSequence *)sequence {
- NSCParameterAssert(sequence != nil);
- NSCParameterAssert([sequence isKindOfClass:RACSequence.class]);
- NSArray *array = [self.array arrayByAddingObjectsFromArray:sequence.array];
- return [[self.class sequenceWithArray:array offset:0] setNameWithFormat:@"[%@] -concat: %@", self.name, sequence];
- }
- #pragma mark Extended methods
- - (RACSequence *)eagerSequence {
- return self;
- }
- - (RACSequence *)lazySequence {
- return [RACArraySequence sequenceWithArray:self.array offset:0];
- }
- - (id)foldRightWithStart:(id)start reduce:(id (^)(id, RACSequence *rest))reduce {
- return [super foldRightWithStart:start reduce:^(id first, RACSequence *rest) {
- return reduce(first, rest.eagerSequence);
- }];
- }
- @end
|