Improved Evaluation
This commit is contained in:
104
MathPad/MPToken.m
Normal file
104
MathPad/MPToken.m
Normal file
@@ -0,0 +1,104 @@
|
||||
//
|
||||
// MPToken.m
|
||||
// MathPad
|
||||
//
|
||||
// Created by Kim Wittenburg on 19.09.14.
|
||||
// Copyright (c) 2014 Kim Wittenburg. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPToken.h"
|
||||
|
||||
@implementation MPToken {
|
||||
NSRange _range;
|
||||
MPTokenType _tokenType;
|
||||
NSString *_stringValue;
|
||||
}
|
||||
|
||||
- (instancetype)initEOFTokenAtLocation:(NSUInteger)eofLocation
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_range = NSMakeRange(eofLocation, 0);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithRange:(NSRange)range inString:(NSString *)input
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_range = range;
|
||||
_stringValue = [input substringWithRange:range].copy;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithTokenType:(MPTokenType)tokenType
|
||||
range:(NSRange)range
|
||||
inString:(NSString *)input
|
||||
{
|
||||
self = [self initWithRange:range
|
||||
inString:input];
|
||||
if (self) {
|
||||
_tokenType = tokenType;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSRange)range
|
||||
{
|
||||
return _range;
|
||||
}
|
||||
|
||||
- (MPTokenType)tokenType
|
||||
{
|
||||
return _tokenType;
|
||||
}
|
||||
|
||||
- (NSString *)stringValue
|
||||
{
|
||||
return _stringValue;
|
||||
}
|
||||
|
||||
- (NSString *)description
|
||||
{
|
||||
return self.stringValue;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation MPToken (MPTokenExtension)
|
||||
|
||||
- (NSUInteger)numberOfOperators
|
||||
{
|
||||
NSString *operatorString = [[self.stringValue componentsSeparatedByString:@" "] componentsJoinedByString:@""];
|
||||
return operatorString.length;
|
||||
}
|
||||
|
||||
- (NSDecimalNumber *)operatorValue
|
||||
{
|
||||
NSString *operatorString = [[self.stringValue componentsSeparatedByString:@" "] componentsJoinedByString:@""];
|
||||
NSDecimalNumber *value = [NSDecimalNumber one];
|
||||
for (NSUInteger charIndex = 0; charIndex < operatorString.length; charIndex++) {
|
||||
NSString *operator = [operatorString substringWithRange:NSMakeRange(charIndex, 1)];
|
||||
if ([operator isEqualToString:@"-"]) {
|
||||
value = [value decimalNumberByMultiplyingBy:[[NSDecimalNumber alloc] initWithInteger:-1]];
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
- (NSDecimalNumber *)number
|
||||
{
|
||||
return [NSDecimalNumber decimalNumberWithString:self.stringValue
|
||||
locale:[NSLocale currentLocale]];
|
||||
}
|
||||
|
||||
- (NSString *)variable
|
||||
{
|
||||
return self.stringValue;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user