Fundamental Redesign of Evaluation
This commit is contained in:
@@ -32,8 +32,10 @@ static MPEvaluationContext *sharedContext;
|
||||
if (self) {
|
||||
_stack = [[NSMutableArray alloc] init];
|
||||
[self push];
|
||||
[self defineVariable:@"e" withValue:[[NSDecimalNumber alloc] initWithDouble:M_E]];
|
||||
[self defineVariable:@"π" withValue:[[NSDecimalNumber alloc] initWithDouble:M_PI]];
|
||||
[self defineVariable:@"e"
|
||||
value:[[NSDecimalNumber alloc] initWithDouble:M_E]];
|
||||
[self defineVariable:@"π"
|
||||
value:[[NSDecimalNumber alloc] initWithDouble:M_PI]];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -48,10 +50,23 @@ static MPEvaluationContext *sharedContext;
|
||||
[self.stack removeLastObject];
|
||||
}
|
||||
|
||||
- (void)defineVariable:(NSString *)variable withValue:(NSDecimalNumber *)value
|
||||
- (BOOL)defineVariable:(NSString *)variable
|
||||
value:(NSDecimalNumber *)value
|
||||
{
|
||||
if ([self isVariableDefined:variable]) {
|
||||
return NO;
|
||||
}
|
||||
NSMutableDictionary *currentBindings = self.stack.lastObject;
|
||||
currentBindings[variable] = value;
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)redefineVariable:(NSString *)variable
|
||||
value:(NSDecimalNumber *)value
|
||||
{
|
||||
[self undefineVariable:variable];
|
||||
return [self defineVariable:variable
|
||||
value:value];
|
||||
}
|
||||
|
||||
- (void)undefineVariable:(NSString *)variable
|
||||
@@ -60,6 +75,11 @@ static MPEvaluationContext *sharedContext;
|
||||
[currentBindings removeObjectForKey:variable];
|
||||
}
|
||||
|
||||
- (BOOL)isVariableDefined:(NSString *)variable
|
||||
{
|
||||
return [self valueForVariable:variable] != nil;
|
||||
}
|
||||
|
||||
- (NSDecimalNumber *)valueForVariable:(NSString *)variable
|
||||
{
|
||||
NSUInteger currentIndex = self.stack.count;
|
||||
@@ -72,9 +92,4 @@ static MPEvaluationContext *sharedContext;
|
||||
return value;
|
||||
}
|
||||
|
||||
- (BOOL)isVariableDefined:(NSString *)variable
|
||||
{
|
||||
return [self valueForVariable:variable] != nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user