From 6874324d00f4872f50fbe620638f269d7f4c73ca Mon Sep 17 00:00:00 2001 From: Kim Wittenburg Date: Fri, 18 Apr 2014 16:46:25 +0200 Subject: [PATCH] Added MPExpression and MPFunction Interfaces --- MathPad/MPExpression.h | 103 +++++++++++++++++++++++++++++++++++++++++ MathPad/MPFunction.h | 47 +++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 MathPad/MPExpression.h create mode 100644 MathPad/MPFunction.h diff --git a/MathPad/MPExpression.h b/MathPad/MPExpression.h new file mode 100644 index 0000000..204c1bd --- /dev/null +++ b/MathPad/MPExpression.h @@ -0,0 +1,103 @@ +// +// MPExpression.h +// MathPad +// +// Created by Kim Wittenburg on 17.04.14. +// Copyright (c) 2014 Kim Wittenburg. All rights reserved. +// + +@class MPExpression, MPFunction; + +@interface MPExpression : NSObject + +#pragma mark Creation Methods + +- (instancetype)initWithSymbols:(NSArray *)symbols; + +#pragma mark Primitive Methods + +- (NSUInteger)numberOfSymbols; +- (id)symbolAtIndex:(NSUInteger)index; // Either an NSString or a MPFunction + +- (double)doubleValue; // Evaluates Expression + +@end + +@interface MPExpression (MPExpressionExtensionMethods) + +#pragma mark Creation Methods + +- (id)init; +- (instancetype)initWithString:(NSString *)aString; +- (instancetype)initWithFunction:(MPFunction *)aFunction; + + ++ (instancetype)expression; ++ (instancetype)expressionWithString:(NSString *)aString; ++ (instancetype)expressionWithFunction:(MPFunction *)aFunction; ++ (instancetype)expressionWithSymbols:(NSArray *)symbols; + +#pragma mark Working with Expressions + +- (NSUInteger)length; + +- (MPExpression *)subexpressionFromIndex:(NSUInteger)from; +- (MPExpression *)subexpressionToIndex:(NSUInteger)to; +- (MPExpression *)subexpressionWithRange:(NSRange)range; + +- (BOOL)isEqualToExpression:(MPExpression *)anExpression; + +// TODO: prefix and suffix operator +/* +- (BOOL)hasPrefix:(NSString *)aString; +- (BOOL)hasSuffix:(NSString *)aString; +*/ + +- (MPExpression *)expressionByAppendingString:(NSString *)aString; +- (MPExpression *)expressionByAppendingFunction:(MPFunction *)aFunction; +- (MPExpression *)expressionByAppendingExpression:(MPExpression *)anExpression; +- (MPExpression *)expressionByAppendingSymbols:(NSArray *)symbols; + +#pragma mark Evaluating Expressions + +- (float)floatValue; +- (int)intValue; +- (NSInteger)integerValue; +- (long long)longLongValue; + +#pragma mark Querying an Expression's Contents + +- (NSArray *)symbols; + +- (NSString *)description; + +- (NSUInteger)hash; + +@end + +@interface MPMutableExpression : MPExpression + +- (void)replaceSymbolsInRange:(NSRange)range withExpression:(MPExpression *)anExpression; + +@end + +@interface MPMutableExpression (MPMutableExpressionExtensionMethods) + +- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc; +- (void)insertFunction:(MPFunction *)aFunction atIndex:(NSUInteger)loc; +- (void)insertExpression:(MPExpression *)anExpression atIndex:(NSUInteger)loc; +- (void)insertSymbols:(NSArray *)symbols atIndex:(NSUInteger)loc; + +- (void)deleteSymbolsInRange:(NSRange)range; + +- (void)appendString:(NSString *)aString; +- (void)appendFunction:(MPFunction *)aFunction; +- (void)appendExpression:(MPExpression *)anExpression; +- (void)appendSymbols:(NSArray *)symbols; + +- (void)setString:(NSString *)aString; +- (void)setFunction:(MPFunction *)aFunction; +- (void)setExpression:(MPExpression *)anExpression; +- (void)setSymbols:(NSArray *)symbols; + +@end diff --git a/MathPad/MPFunction.h b/MathPad/MPFunction.h new file mode 100644 index 0000000..e1ccc1c --- /dev/null +++ b/MathPad/MPFunction.h @@ -0,0 +1,47 @@ +// +// MPFunction.h +// MathPad +// +// Created by Kim Wittenburg on 18.04.14. +// Copyright (c) 2014 Kim Wittenburg. All rights reserved. +// + +@class MPFunction, MPExpression; + +@interface MPFunction : NSObject + +#pragma mark Creation Methods + +- (instancetype)init; + +#pragma mark Children + +- (NSUInteger)numberOfChildren; +- (MPExpression *)childAtIndex; +- (void)setChild:(MPExpression *)child atIndex:(NSUInteger)index; + +#pragma mark Evaluating Functions + +- (double)doubleValue; + +@end + +@interface MPFunction (MPFunctionExtensionMethods) + +#pragma mark Children + +- (NSArray *)children; + +#pragma mark Evaluating Expressions + +- (float)floatValue; +- (int)intValue; +- (NSInteger)integerValue; +- (long long)longLongValue; +- (NSString *)stringValue; + +- (NSString *)description; + +- (NSUInteger)hash; + +@end