Skip to content
This repository has been archived by the owner on May 19, 2018. It is now read-only.

Commit

Permalink
Futures guard against nil arguments.
Browse files Browse the repository at this point in the history
  • Loading branch information
robrix committed Feb 13, 2012
1 parent f83ef69 commit b102c9d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
2 changes: 2 additions & 0 deletions RXFutures/RXFuture.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
dispatch_queue_t queue; dispatch_queue_t queue;
} }


+(RXFuture *)future;

-(void)onComplete:(void(^)())block; -(void)onComplete:(void(^)())block;
-(void)complete; -(void)complete;
-(void)complete:(void(^)())block; // shorthand for -onComplete: followed by -complete -(void)complete:(void(^)())block; // shorthand for -onComplete: followed by -complete
Expand Down
35 changes: 22 additions & 13 deletions RXFutures/RXFuture.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ @implementation RXFuture


@synthesize cancelled, completed; @synthesize cancelled, completed;



+(RXFuture *)future {
return [[self new] autorelease];
}


-(id)init { -(id)init {
if((self = [super init])) { if((self = [super init])) {
completionHandlers = [NSMutableSet new]; completionHandlers = [NSMutableSet new];
Expand All @@ -38,12 +44,13 @@ -(void)dispatchCallback:(void(^)())block {




-(void)onCancel:(void(^)())block { -(void)onCancel:(void(^)())block {
[self performBlock:^{ if(block)
if(cancelled) [self performBlock:^{
[self dispatchCallback:block]; if(cancelled)
else [self dispatchCallback:block];
[cancellationHandlers addObject:block]; else
}]; [cancellationHandlers addObject:block];
}];
} }


-(void)cancel { -(void)cancel {
Expand All @@ -64,12 +71,13 @@ -(void)cancel:(void(^)())block {




-(void)onComplete:(void(^)())block { -(void)onComplete:(void(^)())block {
[self performBlock:^{ if(block)
if(completed) [self performBlock:^{
[self dispatchCallback:block]; if(completed)
else [self dispatchCallback:block];
[completionHandlers addObject:block]; else
}]; [completionHandlers addObject:block];
}];
} }


-(void)complete { -(void)complete {
Expand Down Expand Up @@ -102,7 +110,8 @@ -(void)unlessCancelled:(void(^)())block {




-(void)cascadeCancellationToFuture:(RXFuture *)future { -(void)cascadeCancellationToFuture:(RXFuture *)future {
[self onCancel:^{ [future cancel]; }]; if(future)
[self onCancel:^{ [future cancel]; }];
} }


@end @end

0 comments on commit b102c9d

Please sign in to comment.