99 lines
3.6 KiB
Objective-C
99 lines
3.6 KiB
Objective-C
//
|
|
// MPFunctionTerm.h
|
|
// MathPad
|
|
//
|
|
// Created by Kim Wittenburg on 12.11.14.
|
|
// Copyright (c) 2014 Kim Wittenburg. All rights reserved.
|
|
//
|
|
|
|
#import "MPTerm.h"
|
|
|
|
/*!
|
|
@header
|
|
This file contains the <code>MPFunctionTerm</code> class.
|
|
*/
|
|
|
|
|
|
/*!
|
|
@define MPEvaluateExpression
|
|
@abstract Evaluates the receiver's child at the specified index and assigns
|
|
the evaluation result to a variable.
|
|
|
|
@discussion If errors occur during evaluation this macro returns
|
|
<code>nil</code>. Also there has to exist a <code>NSError *__autoreleasing *</code> pointer called <code>error</code>.
|
|
|
|
@param var
|
|
The name of the variable that will be declared in this macro. It
|
|
will be of the type <code>NSDecimalNumber *</code> and contain
|
|
the result of the evaluation.
|
|
|
|
@param index
|
|
The index of the child to be evaluated.
|
|
*/
|
|
#define MPEvaluateExpression(var, index) NSDecimalNumber *var = [[self expressionAtIndex:index] evaluate:error]; if (var == nil) return nil
|
|
|
|
|
|
|
|
@class MPFunctionTerm, MPFunction, MPParsedExpression;
|
|
|
|
|
|
/*!
|
|
@class MPFunctionTerm
|
|
@abstract A function term represents the term of a generic function.
|
|
|
|
@discussion This class is an abstract class that can not be evaluated. It is
|
|
the common superclass of all terms that represent <code>@link
|
|
//apple_ref/occ/cl/MPFunction@/link</code> instances.
|
|
*/
|
|
@interface MPFunctionTerm : MPTerm
|
|
|
|
/*!
|
|
@method initWithFunction:errors:
|
|
@abstract Initializes a <code>MPFunctionTerm</code> from the specified
|
|
<code>@link //apple_ref/occ/cl/MPFunction@/link</code> instance.
|
|
|
|
@discussion This method parses the children of the specified
|
|
<code>function</code> and stores the respective parsed
|
|
expressions. They are accessible using the <code>@link
|
|
//apple_ref/occ/instm/MPFunctionTerm/expressionAtIndex:@/link</code>
|
|
method.
|
|
|
|
Whether the children should contain a variable definition is
|
|
determined using the <code>@link
|
|
//apple_ref/occ/instm/MPFunction/expectsVariableDefinitionInChildAtIndex:@/link</code>
|
|
|
|
@param function
|
|
The function to initialize the receiver with. This method parses
|
|
the function's children. If any of them contain syntax errors
|
|
they are returned indirectly through the <code>errors</code>
|
|
parameter.
|
|
|
|
@param errors
|
|
If any of the <code>function</code>'s children contain syntax
|
|
errors they are returned indirectly through this parameter. In
|
|
that case the method returns <code>nil</code>. If there are no
|
|
errors the parameter is not modified. This parameter is never set
|
|
to an empty array.
|
|
|
|
@return A new <code>MPFunctionTerm</code> instance.
|
|
*/
|
|
- (instancetype)initWithFunction:(MPFunction *)function
|
|
errors:(NSArray *__autoreleasing *)errors; /* designated initializer */
|
|
|
|
|
|
/*!
|
|
@method expressionAtIndex:
|
|
@abstract Returns a <code>@link
|
|
//apple_ref/occ/cl/MPParsedExpression@/link</code> instance that
|
|
represents the child at <code>anIndex</code> of the function that
|
|
is represented by the receiver.
|
|
|
|
@param anIndex
|
|
The index of the child.
|
|
|
|
@return A parsed expression that represents th
|
|
*/
|
|
- (MPParsedExpression *)expressionAtIndex:(NSUInteger)anIndex;
|
|
|
|
@end
|