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