Archived
1

Drastic Simplification of MPFunction subclass implementations

This commit is contained in:
Kim Wittenburg
2014-09-30 22:17:42 +02:00
parent 0972e158f1
commit 7d48d85dfb
6 changed files with 106 additions and 185 deletions

View File

@@ -12,98 +12,18 @@
#import "MPExpressionEvaluator.h"
#import "MPEvaluationContext.h"
// TODO: Use this macro elsewhere
#define ReturnIfNil(test) if(test == nil) return nil
@implementation MPSumFunction
+ (NSString *)localizedFunctionName
{
return NSLocalizedString(@"Sum", @"Name of Sum Function");
}
MPFunctionAccessorImplementation(StartExpression, _startExpression)
MPFunctionAccessorImplementation(TargetExpression, _targetExpression)
MPFunctionAccessorImplementation(SumExpression, _sumExpression)
#pragma mark Creation Methods
- (instancetype)init
- (NSArray *)childrenAccessors
{
self = [super init];
if (self) {
_startExpression = [[MPExpression alloc] init];
_startExpression.parent = self;
_targetExpression = [[MPExpression alloc] init];
_targetExpression.parent = self;
_sumExpression = [[MPExpression alloc] init];
_sumExpression.parent = self;
}
return self;
}
#pragma mark Properties
- (void)setStartExpression:(MPExpression *)startExpression
{
_startExpression.parent = nil;
_startExpression = startExpression;
_startExpression.parent = self;
[self didChangeChildAtIndex:0];
}
- (void)setTargetExpression:(MPExpression *)targetExpression
{
_targetExpression.parent = nil;
_targetExpression = targetExpression;
_targetExpression.parent = self;
[self didChangeChildAtIndex:1];
}
- (void)setSumExpression:(MPExpression *)sumExpression
{
_sumExpression.parent = nil;
_sumExpression = sumExpression;
_sumExpression.parent = self;
[self didChangeChildAtIndex:2];
}
#pragma mark Working With the Expression Tree
- (NSUInteger)numberOfChildren
{
return 3;
}
- (MPExpression *)childAtIndex:(NSUInteger)index
{
switch (index) {
case 0:
return self.startExpression;
case 1:
return self.targetExpression;
case 2:
return self.sumExpression;
default:
return nil;
}
}
- (void)setChild:(MPExpression *)child
atIndex:(NSUInteger)index
{
switch (index) {
// TODO: Copy child?
case 0:
self.startExpression = child;
break;
case 1:
self.targetExpression = child;
break;
case 2:
self.sumExpression = child;
break;
default:
return;
}
[self didChangeChildAtIndex:index];
}
- (NSArray *)children
{
return @[self.startExpression, self.targetExpression, self.sumExpression];
return @[@"startExpression", @"targetExpression", @"sumExpression"];
}
#pragma mark Evaluating Functions
@@ -167,20 +87,4 @@
return [NSString stringWithFormat:@"Sum(From: %@; To: %@; Using: %@)", self.startExpression, self.targetExpression, self.sumExpression];
}
- (NSUInteger)hash
{
#warning Unimplemented Method
return [super hash];
}
#pragma mark - NSCopying
- (id)copyWithZone:(NSZone *)zone
{
MPSumFunction *copy = [[MPSumFunction allocWithZone:zone] init];
copy.startExpression = [self.startExpression copy];
copy.targetExpression = [self.targetExpression copy];
copy.sumExpression = [self.sumExpression copy];
return copy;
}
@end