Added some methods to „Working With the Expression Tree“ section
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user