Samples of new usage for continuations in JBBContinuations.
The relevant source files are:
- JBBTypes.h
- JBB_C_Functions.h
- JBB_C_Functions.m
- Classes/JBBObjectProxy.h
- Classes/JBBObjectProxy.m
- Classes/Extensions/NSInvocation+JBBContinuations.h
- Classes/Extensions/NSInvocation+JBBContinuations.m
- Classes/Extensions/NSObject+JBBContinuations.h
- Classes/Extensions/NSObject+JBBContinuations.m
The new code samples are:
-
Create an empty proxy, message it directly, it should pass things through (returns value)
// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBContinuations/Release -F/Users/jordan/Build/JBBContinuations/Release -o test_1 test_1.m -framework JBBContinuations -framework Cocoa
#import <Cocoa/Cocoa.h> #import <JBBContinuations/JBBContinuations.h>
int main(int argc, char *argv[]) { NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
NSError *anError = nil; NSString *aString = nil; NSString *anotherString = nil; aString = [NSString stringWithCString:"this is a test" encoding:NSUTF8StringEncoding]; NSLog(@"%@", aString); anotherString = [NSString stringWithCString:"this is another test" encoding:NSUTF8StringEncoding]; NSLog(@"%@", anotherString); if (![NSString stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:&anError]) { if (anError) { NSLog(@"an error occurred: %@", anError); } else { NSLog(@"an error occurred"); } } else { NSLog(@"no error occurred"); } [localPool drain]; return 0;
}
-
Create an empty proxy, message it directly, use +getStoredInvocation and then invoke it, there is a WRAP_MSG_SEND() macro to help
// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBContinuations/Release -F/Users/jordan/Build/JBBContinuations/Release -o test_2 test_2.m -framework JBBContinuations -framework Cocoa
#import <Cocoa/Cocoa.h> #import <JBBContinuations/JBBContinuations.h>
int main(int argc, char *argv[]) { NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
[WRAP_MSG_SEND(NSString, stringWithCString:"this is a test" encoding:NSUTF8StringEncoding) jbb_invokeWithContinuation:^(id anObject) { NSLog(@"%@", anObject); }]; __block NSString *anOutsideObject = nil; [WRAP_MSG_SEND(NSString, stringWithCString:"this is another test" encoding:NSUTF8StringEncoding) jbb_invokeWithContinuation:^(id anObject) { anOutsideObject = [anObject retain]; }]; NSLog(@"%@", [anOutsideObject autorelease]); [WRAP_MSG_SEND(NSString, stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil) jbb_invokeWithContinuation:^(id anObject) { NSLog(@"no error occurred"); } errorHandler:^(NSError *anError) { if (anError) { NSLog(@"an error occurred: %@", anError); } else { NSLog(@"an error occurred"); } }]; [localPool drain]; return 0;
}
-
Create an empty proxy, message it with continuations and error handlers attached (returns object)
// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBContinuations/Release -F/Users/jordan/Build/JBBContinuations/Release -o test_3 test_3.m -framework JBBContinuations -framework Cocoa
#import <Cocoa/Cocoa.h> #import <JBBContinuations/JBBContinuations.h>
int main(int argc, char *argv[]) { NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
[[NSString jbb_proxy] stringWithCString:"this is a test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { NSLog(@"%@", anObject); }]; __block NSString *anOutsideObject = nil; [[NSString jbb_proxy] stringWithCString:"this is another test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { anOutsideObject = [anObject retain]; }]; NSLog(@"%@", [anOutsideObject autorelease]); [[NSString jbb_proxy] stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil continuation:^(id anObject) { NSLog(@"no error occurred"); } errorHandler:^(NSError *anError) { if (anError) { NSLog(@"an error occurred: %@", anError); } else { NSLog(@"an error occurred"); } }]; [localPool drain]; return 0;
}
-
Create a proxy with an associated continuation and error handler, message it directly (returns value)
// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBContinuations/Release -F/Users/jordan/Build/JBBContinuations/Release -o test_4 test_4.m -framework JBBContinuations -framework Cocoa
#import <Cocoa/Cocoa.h> #import <JBBContinuations/JBBContinuations.h>
int main(int argc, char *argv[]) { NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
[[NSString jbb_proxyWithContinuation:^(id anObject) { NSLog(@"%@", anObject); }] stringWithCString:"this is a test" encoding:NSUTF8StringEncoding]; __block NSString *anOutsideObject = nil; [[NSString jbb_proxyWithContinuation:^(id anObject) { anOutsideObject = [anObject retain]; }] stringWithCString:"this is another test" encoding:NSUTF8StringEncoding]; NSLog(@"%@", [anOutsideObject autorelease]); [[NSString jbb_proxyWithContinuation:^(id anObject) { NSLog(@"no error occurred"); } errorHandler:^(NSError *anError) { if (anError) { NSLog(@"an error occurred: %@", anError); } else { NSLog(@"an error occurred"); } }] stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil]; [localPool drain]; return 0;
}
-
Create a proxy with an associated continuation and error handler, message it with continuations and error handlers attached (returns object)
// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBContinuations/Release -F/Users/jordan/Build/JBBContinuations/Release -o test_5 test_5.m -framework JBBContinuations -framework Cocoa
#import <Cocoa/Cocoa.h> #import <JBBContinuations/JBBContinuations.h>
int main(int argc, char *argv[]) { NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
id baseProxy = [NSString jbb_proxyWithContinuation:^(id anObject) { NSLog(@"base continuations"); } errorHandler:^(NSError *anError) { NSLog(@"base errorHandler"); }]; [baseProxy stringWithCString:"this is a test" encoding:NSUTF8StringEncoding]; [baseProxy stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil]; [baseProxy stringWithCString:"this is a test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { NSLog(@"%@", anObject); }]; __block NSString *anOutsideObject = nil; [baseProxy stringWithCString:"this is another test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { anOutsideObject = [anObject retain]; }]; NSLog(@"%@", [anOutsideObject autorelease]); [baseProxy stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil continuation:^(id anObject) { NSLog(@"no error occurred"); } errorHandler:^(NSError *anError) { if (anError) { NSLog(@"an error occurred: %@", anError); } else { NSLog(@"an error occurred"); } }]; [localPool drain]; return 0;
}