1 #ifndef InlineCalculator_h
2 #define InlineCalculator_h
40 class CalculatorVariablePool;
49 #define CALL_MEMBER_FN(object, ptrToMember) ((object).*(ptrToMember))
77 bool compile(
const QString &equation);
96 virtual QString
toPostfix(
const QString &equation)
const;
102 bool fxExists(
const QString &fxname)
const;
141 virtual bool exists(
const QString &variable)
const;
143 const int &index = 0)
const;
160 QString
name()
const;
169 virtual QVariant
args();
QList< CalculatorVariablePool * > m_variablePoolList
The list of variable pool pointers.
virtual QString toPostfix(const QString &equation) const
Converts the given string from infix to postfix format.
void floatModulus()
Pops the top two vectors off the current stack and performs the floatModulusOperator() on the corresp...
CalculatorVariablePool()
Constructs a CalculatorVariablePool object.
void variable(const QVariant &variable)
Pushes the given value onto the stack as a variable.
virtual void add(const QString &key, QVector< double > &values)
Add a parameter to the variable pool.
QString m_name
Name of function.
void dispatch()
Calls the function corresponding to this object using its stored InlineCalculator, InlineCalculator operator, and arguments.
This is a simple class to model a Calculator Variable Pool.
virtual ~FxBinder()
Destroys the FxBinder object.
FxBinder(const QString &name)
Constructs a function binder given a name.
void degrees()
Pops the top vector off the current stack and converts from radians to degrees.
void(InlineCalculator::* calcOp)()
Defines an InlineCalculator function that takes no arguments.
InlineCalculator * m_calc
The Calculator used to evaluate this function.
virtual ~InlineCalculator()
Destroys the InlineCalculator object.
bool fxExists(const QString &fxname) const
Determines whether the given function name exists in the current function pool.
Provides a calculator for inline equations.
virtual bool orphanTokenHandler(const QString &token)
Default token handler if it is undefined during parsing/compilation.
FxPoolType m_fxPool
The map between function names and equation lists.
FxBinder * FxTypePtr
Defintion for a FxTypePtr, a pointer to a function binder (FxBinder)
int size() const
Accesses the number of functions, operators, variables, and scalars to be executed.
bool isScalar(const QString &scalar)
Determines whether the given string contains a scalar value (i.e.
InlineVoidFx(const QString &name, calcOp function, InlineCalculator *calculator)
Constructs an InlineVoid function from the given name, InlineCalculator operator, and InlineCalculato...
InlineCalculator * m_calc
The InlineCalculator used to evaluate this function.
void(Calculator::* calcOp)()
Defines a Calculator function that takes no arguments.
virtual ~InlineVoidFx()
Destroys the InlineVoidFx object.
QVector< double > evaluate()
Evaluate compiled equation with existing variable pool.
bool compile(const QString &equation)
Compiles the given equation for evaluation.
QVector< FxTypePtr > FxEqList
Definition for a FxEqList, a vector of function type pointers.
QMap< QString, FxTypePtr > FxPoolType
Definition for a FxPoolType, a map between a string and function type pointer.
double floatModulusOperator(double a, double b)
Determines the remainder of the quotient a/b whose sign is the same as that of a. ...
InlineCalculator * m_calc
The InlineCalculator used to evaluate this function.
bool isVariable(const QString &str)
Determines whether the given string is a variable.
void popVariables()
Removes the last variable pool in the current variable pool list.
QString equation() const
Accesses the string representation of the current equation, in postfix format.
virtual QVector< double > value(const QString &variable, const int &index=0) const
Return vector of doubles for Calculator functions.
This is the parent class to the various function classes.
FxEqList m_functions
The list of pointers to function equations for the calculator.
virtual ~ParameterFx()
Destroys the ParameterFx object.
This class is used to bind function names with corresponding Calculator functions that do not take pa...
calcOp m_func
The InlineCalculator operator that takes parameters.
void destruct()
Discard of all the function pool and class resources.
void operator()()
Executes the function.
void initialize()
Adds the recognized functions to the function pool.
calcOp m_func
The Calculator operator that takes no parameters.
void pushVariables(CalculatorVariablePool *variablePool)
Push the given variable pool onto the current variable pool list.
void pi()
Pushes the PI constant onto the current stack.
void radians()
Pops the top vector off the current stack and converts from degrees to radians.
FxTypePtr find(const QString &fxname)
Gets a pointer to the function from the current pool that corresponds to the given function name...
ParameterFx(const QString &name, calcOp function, InlineCalculator *calculator)
Constructs a Parameter function from the given name (containing the appropriate parameters), InlineCalculator operator, and InlineCalculator.
calcOp m_func
The InlineCalculator operator that takes no parameters.
QString name() const
The name assigned to this function binder.
This class is used to bind function names with corresponding InlineCalculator functions that do not t...
virtual bool exists(const QString &variable) const
Returns true so the real error can be reported.
virtual QVariant args()
Accesses the arguments for this function.
virtual ~VoidFx()
Destroys the VoidFx object.
void execute()
Executes the function.
void dispatch()
Calls the function corresponding to this object using its stored Calculator and Calculator operator...
VoidFx(const QString &name, calcOp function, InlineCalculator *calculator)
Constructs a Void function from the given name, Calculator operator, and Calculator.
InlineCalculator()
Constructs an InlineCalculator object by initializing the operator lookup list.
QString m_equation
The equation to be evaluated.
void eConstant()
Pushes the Euler constant (e) onto the current stack.
virtual void dispatch()=0
This method defines how to execute this function.
FxTypePtr addFunction(FxTypePtr function)
Adds a function to the function pool.
~CalculatorVariablePool()
Destroys the CalculatorVariablePool object.
void scalar(const QVariant &scalar)
Pushes the given value onto the stack as a scalar.
void dispatch()
Calls the function corresponding to this object using its stored InlineCalculator and InlineCalculato...
void(InlineCalculator::* calcOp)(const QVariant &arg)
Defines an InlineCalculator function that takes arguments.
This class is used to bind function names with corresponding Calculator functions that take a paramet...
CalculatorVariablePool * variables()
Accesses the last variable pool in the current pool list.