00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 @import <Foundation/CPObject.j>
00023 @import <Foundation/CPInvocation.j>
00024 @import "CPOperation.j"
00025
00026
00031 @implementation CPInvocationOperation : CPOperation
00032 {
00033 CPInvocation _invocation;
00034 }
00035
00036
00037 - (void)main
00038 {
00039 if (_invocation)
00040 {
00041 [_invocation invoke];
00042 }
00043 }
00044
00045 - (id)init
00046 {
00047 if (self = [super init])
00048 {
00049 _invocation = nil;
00050 }
00051 return self;
00052 }
00053
00058 - (id)initWithInvocation:(CPInvocation)inv
00059 {
00060 if (self = [self init])
00061 {
00062 _invocation = inv;
00063 }
00064
00065 return self;
00066 }
00067
00074 - (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg
00075 {
00076 var inv = [[CPInvocation alloc] initWithMethodSignature:nil];
00077 [inv setTarget:target];
00078 [inv setSelector:sel];
00079 [inv setArgument:arg atIndex:2];
00080
00081 return [self initWithInvocation:inv];
00082 }
00083
00087 - (CPInvocation)invocation
00088 {
00089 return _invocation;
00090 }
00091
00095 - (id)result
00096 {
00097 if ([self isFinished] && _invocation)
00098 {
00099 return [_invocation returnValue];
00100 }
00101
00102 return nil;
00103 }
00104
00105
00106
00107 @end