Isis Developer Reference
Isis::InlineCalculator Class Reference

Provides a calculator for inline equations. More...

#include <InlineCalculator.h>

Inheritance diagram for Isis::InlineCalculator:
Inheritance graph
Collaboration diagram for Isis::InlineCalculator:
Collaboration graph

Public Member Functions

 InlineCalculator ()
 Constructs an InlineCalculator object by initializing the operator lookup list.
 
 InlineCalculator (const QString &equation)
 Constructs an InlineCalculator object by initializing the operator lookup list and compiles the given equation to prepare for evaluation.
 
virtual ~InlineCalculator ()
 Destroys the InlineCalculator object.
 
int size () const
 Accesses the number of functions, operators, variables, and scalars to be executed.
 
QString equation () const
 Accesses the string representation of the current equation, in postfix format.
 
bool compile (const QString &equation)
 Compiles the given equation for evaluation.
 
QVector< double > evaluate (CalculatorVariablePool *variablePool)
 Evaluate with a variable pool.
 
QVector< double > evaluate ()
 Evaluate compiled equation with existing variable pool.
 
void Negative ()
 Pops an element, negates it, then pushes the result.
 
void Multiply ()
 Pops two elements, multiplies them, then pushes the product on the stack.
 
void Add ()
 Pops two elements, adds them, then pushes the sum on the stack.
 
void Subtract ()
 Pops two elements, subtracts them, then pushes the difference on the stack.
 
void Divide ()
 Pops two, divides them, then pushes the quotient on the stack.
 
void Modulus ()
 Pops two elements, mods them, then pushes the result on the stack.
 
void Exponent ()
 Pops two elements, computes the power then pushes the result on the stack The exponent has to be a scalar.
 
void SquareRoot ()
 Pop an element, compute its square root, then push the root on the stack.
 
void AbsoluteValue ()
 Pop an element, compute its absolute value, then push the result on the stack.
 
void Log ()
 Pop an element, compute its log, then push the result on the stack.
 
void Log10 ()
 Pop an element, compute its base 10 log, then push the result on the stack.
 
void LeftShift ()
 Pop the top element, then perform a left shift with zero fill.
 
void RightShift ()
 Pop the top element, then perform a right shift with zero fill.
 
void MinimumPixel ()
 Pop two elements, then push the minimum on a pixel by pixel basis back on the stack.
 
void MaximumPixel ()
 Pop two elements, then push the maximum on a pixel by pixel basis back on the stack.
 
void MinimumLine ()
 Pop one element, then push the minimum on the stack.
 
void MaximumLine ()
 Pop one element, then push the maximum on the stack.
 
void Minimum2 ()
 Not implemented in Calculator.cpp.
 
void Maximum2 ()
 Not implemented in Calculator.cpp.
 
void GreaterThan ()
 Pop two elements off the stack and compare them to see where one is greater than the other, then push the results on the stack.
 
void LessThan ()
 Pop two elements off the stack and compare them to see where one is less than the other, then push the results on the stack.
 
void Equal ()
 Pop two elements off the stack and compare them to see where one is equal to the other, then push the results on the stack.
 
void LessThanOrEqual ()
 Pop two elements off the stack and compare them to see where one is less than or equal to the other, then push the results on the stack.
 
void GreaterThanOrEqual ()
 Pop two elements off the stack and compare them to see where one is greater than or equal to the other, then push the results on the stack.
 
void NotEqual ()
 Pop two elements off the stack and compare them to see where one is not equal to the other, then push the results on the stack.
 
void And ()
 Pop two elements, AND them, then push the result on the stack.
 
void Or ()
 Pop two elements, OR them, then push the result on the stack.
 
void Sine ()
 Pops one element and push the sine.
 
void Cosine ()
 Pops one element and push the cosine.
 
void Tangent ()
 Pops one element and push the tangent.
 
void Secant ()
 Pops one element and push the secant.
 
void Cosecant ()
 Pops one element and push the cosecant.
 
void Cotangent ()
 Pops one element and push the cotangent.
 
void Arcsine ()
 Pops one element and push the arcsine.
 
void Arccosine ()
 Pops one element and push the arccosine.
 
void Arctangent ()
 Pops one element and push the arctangent.
 
void Arctangent2 ()
 Pops two elements and push the arctangent.
 
void SineH ()
 Pops one element and push the hyperbolic sine.
 
void CosineH ()
 Pops one element and push the hyperbolic cosine.
 
void TangentH ()
 Pops one element and push the hyperbolic tangent.
 
void ArcsineH ()
 Pops one element and push the inverse hyperbolic sine.
 
void ArccosineH ()
 Pops one element and push the inverse hyperbolic cosine.
 
void ArctangentH ()
 Pops one element and push the inverse hyperbolic tangent.
 
void Push (double scalar)
 Push a scalar onto the stack.
 
void Push (Buffer &buff)
 Push a buffer onto the stack.
 
void Push (QVector< double > &vect)
 Push a vector onto the stack.
 
QVector< double > Pop (bool keepSpecials=false)
 Pop an element off the stack.
 
void PrintTop ()
 Print the vector at the top of the stack.
 
bool Empty ()
 Check if the stack is empty.
 
virtual void Clear ()
 Clear out the stack.
 

Protected Types

typedef FxBinderFxTypePtr
 Defintion for a FxTypePtr, a pointer to a function binder (FxBinder)
 

Protected Member Functions

void scalar (const QVariant &scalar)
 Pushes the given value onto the stack as a scalar.
 
void variable (const QVariant &variable)
 Pushes the given value onto the stack as a variable.
 
void floatModulus ()
 Pops the top two vectors off the current stack and performs the floatModulusOperator() on the corresponding components of these vectors.
 
void radians ()
 Pops the top vector off the current stack and converts from degrees to radians.
 
void degrees ()
 Pops the top vector off the current stack and converts from radians to degrees.
 
void logicalOr ()
 Pops the top two vectors off the current stack and performs a logical or on each pair.
 
void logicalAnd ()
 Pops the top two vectors off the current stack and performs a logical and on each pair.
 
void pi ()
 Pushes the PI constant onto the current stack.
 
void eConstant ()
 Pushes the Euler constant (e) onto the current stack.
 
virtual QString toPostfix (const QString &equation) const
 Converts the given string from infix to postfix format.
 
bool isScalar (const QString &scalar)
 Determines whether the given string contains a scalar value (i.e.
 
bool isVariable (const QString &str)
 Determines whether the given string is a variable.
 
bool fxExists (const QString &fxname) const
 Determines whether the given function name exists in the current function pool.
 
FxTypePtr addFunction (FxTypePtr function)
 Adds a function to the function pool.
 
virtual bool orphanTokenHandler (const QString &token)
 Default token handler if it is undefined during parsing/compilation.
 
void PerformOperation (QVector< double > &results, QVector< double >::iterator arg1Start, QVector< double >::iterator arg1End, double operation(double))
 Performs the mathematical operations on each argument.
 
void PerformOperation (QVector< double > &results, QVector< double >::iterator arg1Start, QVector< double >::iterator arg1End, QVector< double >::iterator arg2Start, QVector< double >::iterator arg2End, double operation(double, double))
 Performs the mathematical operation on each pair of arguments, or a set of agruments against a single argument.
 
int StackSize ()
 Returns the current stack size.
 

Detailed Description

Provides a calculator for inline equations.

A calculator with the ability to parse infix equations with embedded variables and scalars, known as an inline equation.

Author
2012-07-15 Kris Becker

Member Typedef Documentation

◆ FxTypePtr

Defintion for a FxTypePtr, a pointer to a function binder (FxBinder)

Constructor & Destructor Documentation

◆ InlineCalculator() [1/2]

Isis::InlineCalculator::InlineCalculator ( )

Constructs an InlineCalculator object by initializing the operator lookup list.

◆ InlineCalculator() [2/2]

Isis::InlineCalculator::InlineCalculator ( const QString & equation)

Constructs an InlineCalculator object by initializing the operator lookup list and compiles the given equation to prepare for evaluation.

Parameters
equationA string representing an equation in infix format.

References compile(), and equation().

◆ ~InlineCalculator()

Isis::InlineCalculator::~InlineCalculator ( )
virtual

Destroys the InlineCalculator object.

Member Function Documentation

◆ AbsoluteValue()

void Isis::Calculator::AbsoluteValue ( )
inherited

Pop an element, compute its absolute value, then push the result on the stack.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Add()

void Isis::Calculator::Add ( )
inherited

Pops two elements, adds them, then pushes the sum on the stack.

References Isis::AddOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ addFunction()

InlineCalculator::FxTypePtr Isis::InlineCalculator::addFunction ( InlineCalculator::FxTypePtr function)
protected

Adds a function to the function pool.

Once in the pool, functions cannot be overwritten. This method will throw an exception if we attempt to add a function with the same name as one already in the pool.

Parameters
functionThe function type pointer to be added to the pool
Returns
InlineCalculator::FxTypePtr The function type pointer that has been added to the pool.
Exceptions
IException::Programmer"Function operator exists! Cannot replace existing functions in the pool"

References _FILEINFO_, and Isis::IException::Programmer.

Referenced by compile().

◆ And()

void Isis::Calculator::And ( )
inherited

Pop two elements, AND them, then push the result on the stack.

References Isis::BitwiseAndOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

◆ Arccosine()

void Isis::Calculator::Arccosine ( )
inherited

◆ ArccosineH()

void Isis::Calculator::ArccosineH ( )
inherited

Pops one element and push the inverse hyperbolic cosine.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

◆ Arcsine()

void Isis::Calculator::Arcsine ( )
inherited

◆ ArcsineH()

void Isis::Calculator::ArcsineH ( )
inherited

Pops one element and push the inverse hyperbolic sine.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

◆ Arctangent()

void Isis::Calculator::Arctangent ( )
inherited

◆ Arctangent2()

void Isis::Calculator::Arctangent2 ( )
inherited

◆ ArctangentH()

void Isis::Calculator::ArctangentH ( )
inherited

Pops one element and push the inverse hyperbolic tangent.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

◆ Clear()

void Isis::Calculator::Clear ( )
virtualinherited

Clear out the stack.

Reimplemented in Isis::CubeCalculator.

Referenced by Isis::CubeCalculator::Clear(), and compile().

◆ compile()

bool Isis::InlineCalculator::compile ( const QString & equation)

Compiles the given equation for evaluation.

This method first converts the given infix equation into a postfix equation for evaluation and saves the postfix formatted string. It then ensures that the equation is ready for evaluation by parsing and verifying that all tokens are recognized.

Parameters
equationA string representing an equation to be compiled, in infix format.
Returns
bool Indicates whether the compilation was successful.
Exceptions
IException::User"Error parsing inline equation. Equation element invalid - token not recognized."

References _FILEINFO_, addFunction(), Isis::Calculator::Clear(), equation(), isScalar(), isVariable(), orphanTokenHandler(), scalar(), toPostfix(), Isis::IException::User, and variable().

Referenced by InlineCalculator().

◆ Cosecant()

void Isis::Calculator::Cosecant ( )
inherited

◆ Cosine()

void Isis::Calculator::Cosine ( )
inherited

◆ CosineH()

void Isis::Calculator::CosineH ( )
inherited

Pops one element and push the hyperbolic cosine.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Cotangent()

void Isis::Calculator::Cotangent ( )
inherited

◆ degrees()

void Isis::InlineCalculator::degrees ( )
protected

Pops the top vector off the current stack and converts from radians to degrees.

The result is then pushed back onto the stack.

References Isis::Calculator::Pop(), Isis::Calculator::Push(), and radians().

◆ Divide()

void Isis::Calculator::Divide ( )
inherited

Pops two, divides them, then pushes the quotient on the stack.

References Isis::DivideOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ eConstant()

void Isis::InlineCalculator::eConstant ( )
protected

Pushes the Euler constant (e) onto the current stack.

References Isis::E, and Isis::Calculator::Push().

◆ Empty()

bool Isis::Calculator::Empty ( )
inherited

Check if the stack is empty.

Returns
bool True if the stack is empty

◆ Equal()

void Isis::Calculator::Equal ( )
inherited

Pop two elements off the stack and compare them to see where one is equal to the other, then push the results on the stack.

References Isis::EqualOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ equation()

QString Isis::InlineCalculator::equation ( ) const

Accesses the string representation of the current equation, in postfix format.

This equation is most commonly entered using infix, but it is reformatted to postfix when set.

Returns
QString A string representing the equation, in postfix.

Referenced by compile(), InlineCalculator(), and toPostfix().

◆ evaluate() [1/2]

QVector< double > Isis::InlineCalculator::evaluate ( )

Evaluate compiled equation with existing variable pool.

This executes the operands to provide the result of the equation. The currently stored variable pool, refernenced via variables(), is used to provide the variables utilized in the equation.

This is reentrant and as long as the variable pool is unchanged between succesive calls, they all should return the same result.

Returns
QVector < double > Result of the stored equation.
Exceptions
IException::Unknown"Too many operands in the equation."

References _FILEINFO_, Isis::Calculator::Pop(), Isis::Calculator::StackSize(), and Isis::IException::Unknown.

Referenced by evaluate().

◆ evaluate() [2/2]

QVector< double > Isis::InlineCalculator::evaluate ( CalculatorVariablePool * variablePool)

Evaluate with a variable pool.

This method accepts a varible resource pool, stores it off for evaluation and then executes the operands to provide the result of the equation. It stores the variable pool for subsequent runs that should yield identical results when operator() is invoked.

Parameters
variablePoolKeyword resource for variables substituted at run time of the equation
Returns
QVector < double > Result of the stored equation given the resource.
Exceptions
IException::Programmer"Calculation with variable pool failed."

References _FILEINFO_, evaluate(), and Isis::IException::Programmer.

◆ Exponent()

void Isis::Calculator::Exponent ( )
inherited

Pops two elements, computes the power then pushes the result on the stack The exponent has to be a scalar.

Exceptions
Isis::iException::Math

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ floatModulus()

void Isis::InlineCalculator::floatModulus ( )
protected

Pops the top two vectors off the current stack and performs the floatModulusOperator() on the corresponding components of these vectors.

The result is then pushed back onto the stack.

References Isis::floatModulusOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

◆ fxExists()

bool Isis::InlineCalculator::fxExists ( const QString & fxname) const
protected

Determines whether the given function name exists in the current function pool.

Parameters
fxnameA string containing the name of the function we are looking for in the pool.
Returns
bool Indicates whether the pool contains the given function.

◆ GreaterThan()

void Isis::Calculator::GreaterThan ( )
inherited

Pop two elements off the stack and compare them to see where one is greater than the other, then push the results on the stack.

References Isis::GreaterThanOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ GreaterThanOrEqual()

void Isis::Calculator::GreaterThanOrEqual ( )
inherited

Pop two elements off the stack and compare them to see where one is greater than or equal to the other, then push the results on the stack.

References Isis::GreaterThanOrEqualOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ isScalar()

bool Isis::InlineCalculator::isScalar ( const QString & scalar)
protected

Determines whether the given string contains a scalar value (i.e.

can be converted to a double precision value).

Parameters
scalarA string to be checked.
Returns
bool Indicates whether the given string is a scalar value.

References scalar(), and Isis::toDouble().

Referenced by compile(), and isVariable().

◆ isVariable()

bool Isis::InlineCalculator::isVariable ( const QString & str)
protected

Determines whether the given string is a variable.

If the string is empty or scalar, this method returns false. Otherwise, it is assumed to be a variable and this method returns true.

Parameters
strA string to be checked.
Returns
bool Indicates whether the given string is a variable.

References isScalar().

Referenced by compile().

◆ LeftShift()

void Isis::Calculator::LeftShift ( )
inherited

Pop the top element, then perform a left shift with zero fill.

Exceptions
Isis::iException::Math

References _FILEINFO_, Isis::Calculator::Pop(), Isis::Calculator::Push(), and Isis::IException::Unknown.

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ LessThan()

void Isis::Calculator::LessThan ( )
inherited

Pop two elements off the stack and compare them to see where one is less than the other, then push the results on the stack.

References Isis::LessThanOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ LessThanOrEqual()

void Isis::Calculator::LessThanOrEqual ( )
inherited

Pop two elements off the stack and compare them to see where one is less than or equal to the other, then push the results on the stack.

References Isis::LessThanOrEqualOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Log()

void Isis::Calculator::Log ( )
inherited

Pop an element, compute its log, then push the result on the stack.

Exceptions
Isis::iException::Math

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Log10()

void Isis::Calculator::Log10 ( )
inherited

Pop an element, compute its base 10 log, then push the result on the stack.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ logicalAnd()

void Isis::InlineCalculator::logicalAnd ( )
protected

Pops the top two vectors off the current stack and performs a logical and on each pair.

Exceptions
IException::Unknown"Failed performing logical and operation, " "input vectors are of differnet lengths."

References _FILEINFO_, Isis::Calculator::Pop(), Isis::Calculator::Push(), and Isis::IException::Unknown.

◆ logicalOr()

void Isis::InlineCalculator::logicalOr ( )
protected

Pops the top two vectors off the current stack and performs a logical or on each pair.

Exceptions
IException::Unknown"Failed performing logical or operation, " "input vectors are of differnet lengths."

References _FILEINFO_, Isis::Calculator::Pop(), Isis::Calculator::Push(), and Isis::IException::Unknown.

◆ Maximum2()

void Isis::Calculator::Maximum2 ( )
inherited

Not implemented in Calculator.cpp.

◆ MaximumLine()

void Isis::Calculator::MaximumLine ( )
inherited

Pop one element, then push the maximum on the stack.

References Isis::IsSpecial(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ MaximumPixel()

void Isis::Calculator::MaximumPixel ( )
inherited

Pop two elements, then push the maximum on a pixel by pixel basis back on the stack.

References Isis::MaximumOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Minimum2()

void Isis::Calculator::Minimum2 ( )
inherited

Not implemented in Calculator.cpp.

◆ MinimumLine()

void Isis::Calculator::MinimumLine ( )
inherited

Pop one element, then push the minimum on the stack.

References Isis::IsSpecial(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ MinimumPixel()

void Isis::Calculator::MinimumPixel ( )
inherited

Pop two elements, then push the minimum on a pixel by pixel basis back on the stack.

References Isis::MinimumOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Modulus()

void Isis::Calculator::Modulus ( )
inherited

Pops two elements, mods them, then pushes the result on the stack.

References Isis::ModulusOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Multiply()

void Isis::Calculator::Multiply ( )
inherited

Pops two elements, multiplies them, then pushes the product on the stack.

References Isis::MultiplyOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Negative()

void Isis::Calculator::Negative ( )
inherited

◆ NotEqual()

void Isis::Calculator::NotEqual ( )
inherited

Pop two elements off the stack and compare them to see where one is not equal to the other, then push the results on the stack.

References Isis::NotEqualOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Or()

void Isis::Calculator::Or ( )
inherited

Pop two elements, OR them, then push the result on the stack.

References Isis::BitwiseOrOperator(), Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

◆ orphanTokenHandler()

bool Isis::InlineCalculator::orphanTokenHandler ( const QString & token)
protectedvirtual

Default token handler if it is undefined during parsing/compilation.

This method provides the default handling of an undefined token found while compiling an equation. Users may code their own handler that, for example, could provide additional further functionality.

If the virtualized reimplementation is unable to process it, it can throw an exception which will be caught, recorded and compiling will continue until all tokens are processed. If the optional implementation cannot handle it, return false from your version and an exception will be thrown for you.

Parameters
tokenCharacter representation of the token. This could be an undefined constant, function or soemthing else that occurs in the equation that is not resolved when this is called.
Returns
bool True if it is handled, false if it cannot (which is an error and an exception will be invoked).

Referenced by compile().

◆ PerformOperation() [1/2]

void Isis::Calculator::PerformOperation ( QVector< double > & results,
QVector< double >::iterator arg1Start,
QVector< double >::iterator arg1End,
double operationdouble )
protectedinherited

◆ PerformOperation() [2/2]

void Isis::Calculator::PerformOperation ( QVector< double > & results,
QVector< double >::iterator arg1Start,
QVector< double >::iterator arg1End,
QVector< double >::iterator arg2Start,
QVector< double >::iterator arg2End,
double operationdouble, double )
protectedinherited

Performs the mathematical operation on each pair of arguments, or a set of agruments against a single argument.

Parameters
results[out] The results of the performed operation
arg1StartThe first of the primary argument to have the operation done on
arg1EndOne arguement beyond the final primary argument to have the operation done upon
arg2StartThe first of the secondaty argument to have the operation done on
arg2EndOne arguement beyond the final secondary argument to have the operation done upon
operationThe operation to be done on all pairs of arguments

References _FILEINFO_, and Isis::IException::Programmer.

◆ pi()

void Isis::InlineCalculator::pi ( )
protected

Pushes the PI constant onto the current stack.

References Isis::Calculator::Push().

◆ Pop()

QVector< double > Isis::Calculator::Pop ( bool keepSpecials = false)
inherited

Pop an element off the stack.

Parameters
keepSpecialsIf true, special pixels will be preserved; otherwise, they will be mapped to double values
Returns
The top of the stack, which gets popped

References _FILEINFO_, Isis::Hrs, Isis::Lrs, Isis::Null, and Isis::IException::Unknown.

Referenced by Isis::Calculator::AbsoluteValue(), Isis::Calculator::Add(), Isis::Calculator::And(), Isis::Calculator::Arccosine(), Isis::Calculator::ArccosineH(), Isis::Calculator::Arcsine(), Isis::Calculator::ArcsineH(), Isis::Calculator::Arctangent(), Isis::Calculator::Arctangent2(), Isis::Calculator::ArctangentH(), Isis::Calculator::Cosecant(), Isis::Calculator::Cosine(), Isis::Calculator::CosineH(), Isis::Calculator::Cotangent(), degrees(), Isis::Calculator::Divide(), Isis::Calculator::Equal(), evaluate(), Isis::Calculator::Exponent(), floatModulus(), Isis::Calculator::GreaterThan(), Isis::Calculator::GreaterThanOrEqual(), Isis::Calculator::LeftShift(), Isis::Calculator::LessThan(), Isis::Calculator::LessThanOrEqual(), Isis::Calculator::Log(), Isis::Calculator::Log10(), logicalAnd(), logicalOr(), Isis::Calculator::MaximumLine(), Isis::Calculator::MaximumPixel(), Isis::Calculator::MinimumLine(), Isis::Calculator::MinimumPixel(), Isis::Calculator::Modulus(), Isis::Calculator::Multiply(), Isis::Calculator::Negative(), Isis::Calculator::NotEqual(), Isis::Calculator::Or(), radians(), Isis::Calculator::RightShift(), Isis::CubeCalculator::runCalculations(), Isis::Calculator::Secant(), Isis::Calculator::Sine(), Isis::Calculator::SineH(), Isis::Calculator::SquareRoot(), Isis::Calculator::Subtract(), Isis::Calculator::Tangent(), and Isis::Calculator::TangentH().

◆ PrintTop()

void Isis::Calculator::PrintTop ( )
inherited

Print the vector at the top of the stack.

◆ Push() [1/3]

void Isis::Calculator::Push ( Buffer & buff)
inherited

Push a buffer onto the stack.

Parameters
buffThe buffer that will be pushed on the stack

References Isis::IsHisPixel(), Isis::IsHrsPixel(), Isis::IsLisPixel(), Isis::IsLrsPixel(), Isis::IsNullPixel(), Isis::IsSpecial(), and Isis::Calculator::Push().

◆ Push() [2/3]

void Isis::Calculator::Push ( double scalar)
inherited

Push a scalar onto the stack.

Parameters
scalarThe scalar that will be pushed on the stack

References Isis::Calculator::Push().

Referenced by Isis::Calculator::AbsoluteValue(), Isis::Calculator::Add(), Isis::Calculator::And(), Isis::Calculator::Arccosine(), Isis::Calculator::ArccosineH(), Isis::Calculator::Arcsine(), Isis::Calculator::ArcsineH(), Isis::Calculator::Arctangent(), Isis::Calculator::Arctangent2(), Isis::Calculator::ArctangentH(), Isis::Calculator::Cosecant(), Isis::Calculator::Cosine(), Isis::Calculator::CosineH(), Isis::Calculator::Cotangent(), degrees(), Isis::Calculator::Divide(), eConstant(), Isis::Calculator::Equal(), Isis::Calculator::Exponent(), floatModulus(), Isis::Calculator::GreaterThan(), Isis::Calculator::GreaterThanOrEqual(), Isis::Calculator::LeftShift(), Isis::Calculator::LessThan(), Isis::Calculator::LessThanOrEqual(), Isis::Calculator::Log(), Isis::Calculator::Log10(), logicalAnd(), logicalOr(), Isis::Calculator::MaximumLine(), Isis::Calculator::MaximumPixel(), Isis::Calculator::MinimumLine(), Isis::Calculator::MinimumPixel(), Isis::Calculator::Modulus(), Isis::Calculator::Multiply(), Isis::Calculator::Negative(), Isis::Calculator::NotEqual(), Isis::Calculator::Or(), pi(), Isis::Calculator::Push(), Isis::Calculator::Push(), radians(), Isis::Calculator::RightShift(), Isis::CubeCalculator::runCalculations(), scalar(), Isis::Calculator::Secant(), Isis::Calculator::Sine(), Isis::Calculator::SineH(), Isis::Calculator::SquareRoot(), Isis::Calculator::Subtract(), Isis::Calculator::Tangent(), Isis::Calculator::TangentH(), and variable().

◆ Push() [3/3]

void Isis::Calculator::Push ( QVector< double > & vect)
inherited

Push a vector onto the stack.

Parameters
vectThe vector that will be pushed on the stack

◆ radians()

void Isis::InlineCalculator::radians ( )
protected

Pops the top vector off the current stack and converts from degrees to radians.

The result is then pushed back onto the stack.

References Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by degrees().

◆ RightShift()

void Isis::Calculator::RightShift ( )
inherited

Pop the top element, then perform a right shift with zero fill.

Exceptions
Isis::iException::Math

References _FILEINFO_, Isis::Calculator::Pop(), Isis::Calculator::Push(), and Isis::IException::Unknown.

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ scalar()

void Isis::InlineCalculator::scalar ( const QVariant & scalar)
protected

Pushes the given value onto the stack as a scalar.

This method adds the given variant value to the stack as a scalar.

Parameters
scalarQVariant containing the scalar. Usually a QString.

References Isis::Calculator::Push(), scalar(), and Isis::toDouble().

Referenced by compile(), isScalar(), and scalar().

◆ Secant()

void Isis::Calculator::Secant ( )
inherited

◆ Sine()

void Isis::Calculator::Sine ( )
inherited

◆ SineH()

void Isis::Calculator::SineH ( )
inherited

Pops one element and push the hyperbolic sine.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ size()

int Isis::InlineCalculator::size ( ) const

Accesses the number of functions, operators, variables, and scalars to be executed.

Returns
int The number of functions, operators, variables, and scalars stored in the Calculator.

◆ SquareRoot()

void Isis::Calculator::SquareRoot ( )
inherited

Pop an element, compute its square root, then push the root on the stack.

Exceptions
Isis::iException::Math

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ StackSize()

int Isis::Calculator::StackSize ( )
protectedinherited

Returns the current stack size.

Get the current stack size.

Returns
int Number of arguments in the stack

Referenced by evaluate(), and Isis::CubeCalculator::runCalculations().

◆ Subtract()

void Isis::Calculator::Subtract ( )
inherited

Pops two elements, subtracts them, then pushes the difference on the stack.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), Isis::Calculator::Push(), and Isis::SubtractOperator().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ Tangent()

void Isis::Calculator::Tangent ( )
inherited

◆ TangentH()

void Isis::Calculator::TangentH ( )
inherited

Pops one element and push the hyperbolic tangent.

References Isis::Calculator::PerformOperation(), Isis::Calculator::Pop(), and Isis::Calculator::Push().

Referenced by Isis::CubeCalculator::prepareCalculations().

◆ toPostfix()

QString Isis::InlineCalculator::toPostfix ( const QString & equation) const
protectedvirtual

Converts the given string from infix to postfix format.

Parameters
equationA string representing an infix equation.
Returns
QString A string representing the given equation converted to postfix format.

References Isis::InfixToPostfix::convert(), and equation().

Referenced by compile().

◆ variable()

void Isis::InlineCalculator::variable ( const QVariant & variable)
protected

Pushes the given value onto the stack as a variable.

This method adds the given variant value to the stack as a variable.

Parameters
variableQVariant containing the name of the variable. Usually a QString.
Exceptions
IException::User"Could not find variable in variable pool."

References _FILEINFO_, Isis::Calculator::Push(), Isis::IException::User, and variable().

Referenced by compile(), and variable().


The documentation for this class was generated from the following files: