Archived
1

Added some methods to „Working With the Expression Tree“ section

This commit is contained in:
Kim Wittenburg
2014-04-23 03:10:17 +02:00
parent 24c53bde2e
commit 3c944f3fc0
4 changed files with 57 additions and 5 deletions

View File

@@ -44,13 +44,17 @@ extern NSString *MPDivisionOperator;
- (instancetype)initWithString:(NSString *)aString; - (instancetype)initWithString:(NSString *)aString;
- (instancetype)initWithFunction:(MPFunction *)aFunction; - (instancetype)initWithFunction:(MPFunction *)aFunction;
+ (instancetype)expression; + (instancetype)expression;
+ (instancetype)expressionWithString:(NSString *)aString; + (instancetype)expressionWithString:(NSString *)aString;
+ (instancetype)expressionWithFunction:(MPFunction *)aFunction; + (instancetype)expressionWithFunction:(MPFunction *)aFunction;
+ (instancetype)expressionWithSymbols:(NSArray *)symbols; + (instancetype)expressionWithSymbols:(NSArray *)symbols;
#pragma mark Working with Expressions #pragma mark Working With the Expression Tree
- (NSUInteger)indexOfSymbol:(id)symbol;
- (id)symbolAtIndexPath:(NSIndexPath *)indexPath; // May also return MPExpression
#pragma mark Working With Expressions
- (NSUInteger)length; - (NSUInteger)length;

View File

@@ -11,6 +11,7 @@
#import "MPException.h" #import "MPException.h"
#import "NSObject+MPStringTest.h" #import "NSObject+MPStringTest.h"
#import "NSIndexPath+MPRemoveFirstIndex.h"
NSString *MPAdditionOperator = @"+"; NSString *MPAdditionOperator = @"+";
NSString *MPSubtractionOperator = @"-"; NSString *MPSubtractionOperator = @"-";
@@ -214,7 +215,29 @@ NSString *MPDivisionOperator = @"/";
return [[self alloc] initWithSymbols:symbols]; return [[self alloc] initWithSymbols:symbols];
} }
#pragma mark Working with Expressions #pragma mark Working With the Expression Tree
- (NSUInteger)indexOfSymbol:(id)symbol
{
return [_symbols indexOfObject:symbol];
}
- (id)symbolAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.length == 0) {
return self;
}
id symbol = [self symbolAtIndex:[indexPath indexAtPosition:0]];
if (indexPath.length == 1) {
return symbol;
}
if ([symbol isKindOfClass:[MPFunction class]]) {
return [symbol symbolAtIndexPath:[indexPath indexPathByRemovingFirstIndex]];
}
return nil;
}
#pragma mark Working With Expressions
- (NSUInteger)length - (NSUInteger)length
{ {

View File

@@ -35,10 +35,13 @@
@interface MPFunction (MPFunctionExtensionMethods) @interface MPFunction (MPFunctionExtensionMethods)
#pragma mark Children #pragma mark Working With the Expression Tree
// May be overridden for performance improvements // May be overridden for performance improvements
- (NSArray *)children; - (NSArray *)children;
- (NSUInteger)indexOfChild:(MPExpression *)child;
- (id)symbolAtIndexPath:(NSIndexPath *)indexPath;
#pragma mark Evaluating Functions #pragma mark Evaluating Functions

View File

@@ -9,6 +9,8 @@
#import "MPFunction.h" #import "MPFunction.h"
#import "MPExpression.h" #import "MPExpression.h"
#import "NSIndexPath+MPRemoveFirstIndex.h"
@implementation MPFunction @implementation MPFunction
#pragma mark Creation Methods #pragma mark Creation Methods
@@ -90,7 +92,7 @@
@implementation MPFunction (MPFunctionExtensionMethods) @implementation MPFunction (MPFunctionExtensionMethods)
#pragma mark Children #pragma mark Working With the Expression Tree
- (NSArray *)children - (NSArray *)children
{ {
@@ -102,6 +104,26 @@
return [children copy]; return [children copy];
} }
- (NSUInteger)indexOfChild:(MPExpression *)child
{
NSUInteger index = 0;
for (; index < [self numberOfChildren]; index++) {
if ([[self childAtIndex:index] isEqualToExpression:child]) {
return index;
}
}
return NSNotFound;
}
- (id)symbolAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.length == 0) {
return self;
}
MPExpression *child = [self childAtIndex:[indexPath indexAtPosition:0]];
return [child symbolAtIndexPath:[indexPath indexPathByRemovingFirstIndex]];
}
#pragma mark Evaluating Functions #pragma mark Evaluating Functions
- (float)floatValue - (float)floatValue