1
0
mirror of https://github.com/thes3m/XNI synced 2024-12-26 13:26:06 +01:00
XNI/Classes/System/Delegate.m

69 lines
1.5 KiB
Mathematica
Raw Normal View History

//
// Delegate.m
// XNI
//
// Created by Matej Jan on 20.7.10.
// Copyright 2010 Retronator. All rights reserved.
//
#import "Delegate.h"
@implementation Delegate
- (id) initWithTarget:(id)theTarget Method:(SEL)theMethod {
if (self = [super init]) {
target = theTarget;
method = theMethod;
}
return self;
}
+ (Delegate*) delegateWithTarget:(id)target Method:(SEL)method {
return [[[Delegate alloc] initWithTarget:target Method:method] autorelease];
}
- (id) invokeWithArguments: (NSArray*) args {
switch ([args count]) {
case 0:
return [self invoke];
break;
case 1:
return [self invokeWithArgument:[args objectAtIndex:0]];
break;
case 2:
return [self invokeWithArgument:[args objectAtIndex:0] argument:[args objectAtIndex:1]];
break;
default:
// TODO: Use NSInvocation instead of performSelector.
return nil;
break;
}
}
- (id) invoke {
return [target performSelector:method];
}
- (id) invokeWithArgument:(id)arg {
return [target performSelector:method withObject:arg];
}
- (id) invokeWithArgument:(id)arg1 argument:(id)arg2 {
return [target performSelector:method withObject:arg1 withObject:arg2];
}
- (BOOL) isEqual:(id)object {
if ([object isKindOfClass:[Delegate class]]) {
Delegate *delegate = object;
return [target isEqual:delegate->target] && method==delegate->method;
}
return NO;
}
- (NSUInteger) hash {
return [target hash] ^ [NSStringFromSelector(method) hash];
}
@end