Added the MPExpressionTree Classes
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
//
|
||||
|
||||
#import "MPPowerFunction.h"
|
||||
#import "MPExpressionEvaluator.h"
|
||||
#import "MPExpression.h"
|
||||
|
||||
@implementation MPPowerFunction
|
||||
|
||||
@@ -18,19 +18,24 @@ MPFunctionAccessorImplementation(ExponentExpression, _exponentExpression)
|
||||
return @[@"exponentExpression"];
|
||||
}
|
||||
|
||||
- (MPTerm *)parseWithError:(MPParseError *__autoreleasing *)error
|
||||
- (BOOL)validate:(MPParseError *__autoreleasing *)error
|
||||
{
|
||||
MPExpressionEvaluator *exponent = [[MPExpressionEvaluator alloc] initWithExpression:self.exponentExpression];
|
||||
MPTerm *exponentTerm = [exponent parseExpectingVariable:NO
|
||||
error:error];
|
||||
if (exponentTerm == nil) {
|
||||
return nil;
|
||||
if (!self.baseValue) {
|
||||
if (error) {
|
||||
*error = MPParseError(NSMakeRange([self.parent convertIndex:[self.parent indexOfElement:self]
|
||||
fromReferenceFrame:MPElementReferenceFrame
|
||||
toReferenceFrame:MPSymbolReferenceFrame], 0), @"No Base for Power");
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
return [[MPTerm alloc] initWithBlock:^NSDecimalNumber *{
|
||||
double power = pow([self.baseTerm evaluate].doubleValue, [exponentTerm evaluate].doubleValue);
|
||||
return [[NSDecimalNumber alloc] initWithDouble:power];
|
||||
}];
|
||||
return [self.baseValue validate:error] && [[self.exponentExpression parse] validate:error];
|
||||
}
|
||||
|
||||
- (NSDecimalNumber *)evaluate
|
||||
{
|
||||
NSDecimalNumber *base = [self.baseValue evaluate];
|
||||
NSDecimalNumber *exponent = [[self.exponentExpression parse] evaluate];
|
||||
return [[NSDecimalNumber alloc] initWithDouble:pow(base.doubleValue, exponent.doubleValue)];
|
||||
}
|
||||
|
||||
- (NSString *)description
|
||||
|
||||
Reference in New Issue
Block a user