Archived
1

Implemented Evaluation

This commit is contained in:
Kim Wittenburg
2014-09-07 16:45:54 +02:00
parent 21bfe221ba
commit 08a6db827f

View File

@@ -9,6 +9,8 @@
#import "MPSumFunction.h" #import "MPSumFunction.h"
#import "MPExpression.h" #import "MPExpression.h"
#import "MPExpressionEvaluator.h"
@implementation MPSumFunction @implementation MPSumFunction
#pragma mark Creation Methods #pragma mark Creation Methods
@@ -97,10 +99,30 @@
} }
#pragma mark Evaluating Functions #pragma mark Evaluating Functions
- (double)evaluateFunction:(NSError *__autoreleasing *)error - (NSDecimalNumber *)evaluate:(MPParseError *__autoreleasing *)error
{ {
#warning Unimplemented Method MPExpressionEvaluator *startEvaluator = self.startExpression.evaluator;
return 0.0; NSDecimalNumber *start = [startEvaluator evaluateVariableDefinition:YES error:error];
if (!start) {
return nil;
}
NSDecimalNumber *target = [self.targetExpression evaluateWithError:error];
if (!target) {
return nil;
}
MPExpressionEvaluator *sumEvaluator = self.sumExpression.evaluator;
NSDecimalNumber *value = [NSDecimalNumber zero];
for (NSDecimalNumber *iterator = start; [iterator compare:target] <= 0; iterator = [iterator decimalNumberByAdding:[[NSDecimalNumber alloc] initWithInteger:1]]) {
[sumEvaluator bindValue:iterator toVariableName:startEvaluator.definedVariable];
NSDecimalNumber *summand = [sumEvaluator evaluateWithError:error];
if (summand) {
value = [value decimalNumberByAdding:summand];
} else {
return nil;
}
}
return value;
} }
#pragma mark Working With Functions #pragma mark Working With Functions