Archived
1

Fundamental Redesign of Evaluation

This commit is contained in:
Kim Wittenburg
2014-11-24 22:42:44 +01:00
parent 10f0e73ad3
commit 7a32e3b0b6
45 changed files with 1398 additions and 350 deletions

View File

@@ -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