67 lines
1.8 KiB
Objective-C
67 lines
1.8 KiB
Objective-C
//
|
|
// 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
|