Isis Developer Reference
|
Calculator for arrays. More...
#include <Calculator.h>
Public Member Functions | |
Calculator () | |
The code that performs math operations is designed to call a function and use the result. | |
virtual | ~Calculator () |
Virtual Constructor. | |
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 Member Functions | |
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. | |
Calculator for arrays.
This class is a RPN calculator on arrays. It uses classic push/pop/operator methods. That is, push array1, push array2, add, pop arrayResult.
Isis::Calculator::Calculator | ( | ) |
The code that performs math operations is designed to call a function and use the result.
These helper methods convert standard operators into functions which perform the desired operations. See the implementation of Calculator::Negative for an example. Constructor
|
virtual |
Virtual Constructor.
Destructor.
void Isis::Calculator::AbsoluteValue | ( | ) |
Pop an element, compute its absolute value, then push the result on the stack.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Add | ( | ) |
Pops two elements, adds them, then pushes the sum on the stack.
References Isis::AddOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::And | ( | ) |
Pop two elements, AND them, then push the result on the stack.
References Isis::BitwiseAndOperator(), PerformOperation(), Pop(), and Push().
void Isis::Calculator::Arccosine | ( | ) |
Pops one element and push the arccosine.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::ArccosineH | ( | ) |
Pops one element and push the inverse hyperbolic cosine.
References PerformOperation(), Pop(), and Push().
void Isis::Calculator::Arcsine | ( | ) |
Pops one element and push the arcsine.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::ArcsineH | ( | ) |
Pops one element and push the inverse hyperbolic sine.
References PerformOperation(), Pop(), and Push().
void Isis::Calculator::Arctangent | ( | ) |
Pops one element and push the arctangent.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Arctangent2 | ( | ) |
Pops two elements and push the arctangent.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::ArctangentH | ( | ) |
Pops one element and push the inverse hyperbolic tangent.
References PerformOperation(), Pop(), and Push().
|
virtual |
Clear out the stack.
Reimplemented in Isis::CubeCalculator.
Referenced by Isis::CubeCalculator::Clear(), and Isis::InlineCalculator::compile().
void Isis::Calculator::Cosecant | ( | ) |
Pops one element and push the cosecant.
References Isis::CosecantOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Cosine | ( | ) |
Pops one element and push the cosine.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::CosineH | ( | ) |
Pops one element and push the hyperbolic cosine.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Cotangent | ( | ) |
Pops one element and push the cotangent.
References Isis::CotangentOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Divide | ( | ) |
Pops two, divides them, then pushes the quotient on the stack.
References Isis::DivideOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
bool Isis::Calculator::Empty | ( | ) |
Check if the stack is empty.
void Isis::Calculator::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.
References Isis::EqualOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Exponent | ( | ) |
Pops two elements, computes the power then pushes the result on the stack The exponent has to be a scalar.
Isis::iException::Math |
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::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.
References Isis::GreaterThanOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::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.
References Isis::GreaterThanOrEqualOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::LeftShift | ( | ) |
Pop the top element, then perform a left shift with zero fill.
Isis::iException::Math |
References _FILEINFO_, Pop(), Push(), and Isis::IException::Unknown.
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::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.
References Isis::LessThanOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::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.
References Isis::LessThanOrEqualOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Log | ( | ) |
Pop an element, compute its log, then push the result on the stack.
Isis::iException::Math |
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Log10 | ( | ) |
Pop an element, compute its base 10 log, then push the result on the stack.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Maximum2 | ( | ) |
Not implemented in Calculator.cpp.
void Isis::Calculator::MaximumLine | ( | ) |
Pop one element, then push the maximum on the stack.
References Isis::IsSpecial(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::MaximumPixel | ( | ) |
Pop two elements, then push the maximum on a pixel by pixel basis back on the stack.
References Isis::MaximumOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Minimum2 | ( | ) |
Not implemented in Calculator.cpp.
void Isis::Calculator::MinimumLine | ( | ) |
Pop one element, then push the minimum on the stack.
References Isis::IsSpecial(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::MinimumPixel | ( | ) |
Pop two elements, then push the minimum on a pixel by pixel basis back on the stack.
References Isis::MinimumOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Modulus | ( | ) |
Pops two elements, mods them, then pushes the result on the stack.
References Isis::ModulusOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Multiply | ( | ) |
Pops two elements, multiplies them, then pushes the product on the stack.
References Isis::MultiplyOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Negative | ( | ) |
Pops an element, negates it, then pushes the result.
References Isis::NegateOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::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.
References Isis::NotEqualOperator(), PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Or | ( | ) |
Pop two elements, OR them, then push the result on the stack.
References Isis::BitwiseOrOperator(), PerformOperation(), Pop(), and Push().
|
protected |
Performs the mathematical operations on each argument.
results | [out] The results of the performed operation |
arg1Start | The first argument to have the operation done on |
arg1End | One argument beyond the final argument to have the operation done upon |
operation | The operation to be done on all arguments |
Referenced by AbsoluteValue(), Add(), And(), Arccosine(), ArccosineH(), Arcsine(), ArcsineH(), Arctangent(), Arctangent2(), ArctangentH(), Cosecant(), Cosine(), CosineH(), Cotangent(), Divide(), Equal(), Exponent(), Isis::InlineCalculator::floatModulus(), GreaterThan(), GreaterThanOrEqual(), LessThan(), LessThanOrEqual(), Log(), Log10(), MaximumPixel(), MinimumPixel(), Modulus(), Multiply(), Negative(), NotEqual(), Or(), Secant(), Sine(), SineH(), SquareRoot(), Subtract(), Tangent(), and TangentH().
|
protected |
Performs the mathematical operation on each pair of arguments, or a set of agruments against a single argument.
results | [out] The results of the performed operation |
arg1Start | The first of the primary argument to have the operation done on |
arg1End | One arguement beyond the final primary argument to have the operation done upon |
arg2Start | The first of the secondaty argument to have the operation done on |
arg2End | One arguement beyond the final secondary argument to have the operation done upon |
operation | The operation to be done on all pairs of arguments |
References _FILEINFO_, and Isis::IException::Programmer.
QVector< double > Isis::Calculator::Pop | ( | bool | keepSpecials = false | ) |
Pop an element off the stack.
keepSpecials | If true, special pixels will be preserved; otherwise, they will be mapped to double values |
References _FILEINFO_, Isis::Hrs, Isis::Lrs, Isis::Null, and Isis::IException::Unknown.
Referenced by AbsoluteValue(), Add(), And(), Arccosine(), ArccosineH(), Arcsine(), ArcsineH(), Arctangent(), Arctangent2(), ArctangentH(), Cosecant(), Cosine(), CosineH(), Cotangent(), Isis::InlineCalculator::degrees(), Divide(), Equal(), Isis::InlineCalculator::evaluate(), Exponent(), Isis::InlineCalculator::floatModulus(), GreaterThan(), GreaterThanOrEqual(), LeftShift(), LessThan(), LessThanOrEqual(), Log(), Log10(), Isis::InlineCalculator::logicalAnd(), Isis::InlineCalculator::logicalOr(), MaximumLine(), MaximumPixel(), MinimumLine(), MinimumPixel(), Modulus(), Multiply(), Negative(), NotEqual(), Or(), Isis::InlineCalculator::radians(), RightShift(), Isis::CubeCalculator::runCalculations(), Secant(), Sine(), SineH(), SquareRoot(), Subtract(), Tangent(), and TangentH().
void Isis::Calculator::PrintTop | ( | ) |
Print the vector at the top of the stack.
void Isis::Calculator::Push | ( | Buffer & | buff | ) |
Push a buffer onto the stack.
buff | The buffer that will be pushed on the stack |
References Isis::IsHisPixel(), Isis::IsHrsPixel(), Isis::IsLisPixel(), Isis::IsLrsPixel(), Isis::IsNullPixel(), Isis::IsSpecial(), and Push().
void Isis::Calculator::Push | ( | double | scalar | ) |
Push a scalar onto the stack.
scalar | The scalar that will be pushed on the stack |
References Push().
Referenced by AbsoluteValue(), Add(), And(), Arccosine(), ArccosineH(), Arcsine(), ArcsineH(), Arctangent(), Arctangent2(), ArctangentH(), Cosecant(), Cosine(), CosineH(), Cotangent(), Isis::InlineCalculator::degrees(), Divide(), Isis::InlineCalculator::eConstant(), Equal(), Exponent(), Isis::InlineCalculator::floatModulus(), GreaterThan(), GreaterThanOrEqual(), LeftShift(), LessThan(), LessThanOrEqual(), Log(), Log10(), Isis::InlineCalculator::logicalAnd(), Isis::InlineCalculator::logicalOr(), MaximumLine(), MaximumPixel(), MinimumLine(), MinimumPixel(), Modulus(), Multiply(), Negative(), NotEqual(), Or(), Isis::InlineCalculator::pi(), Push(), Push(), Isis::InlineCalculator::radians(), RightShift(), Isis::CubeCalculator::runCalculations(), Isis::InlineCalculator::scalar(), Secant(), Sine(), SineH(), SquareRoot(), Subtract(), Tangent(), TangentH(), and Isis::InlineCalculator::variable().
void Isis::Calculator::Push | ( | QVector< double > & | vect | ) |
Push a vector onto the stack.
vect | The vector that will be pushed on the stack |
void Isis::Calculator::RightShift | ( | ) |
Pop the top element, then perform a right shift with zero fill.
Isis::iException::Math |
References _FILEINFO_, Pop(), Push(), and Isis::IException::Unknown.
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Secant | ( | ) |
Pops one element and push the secant.
References PerformOperation(), Pop(), Push(), and Isis::SecantOperator().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Sine | ( | ) |
Pops one element and push the sine.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::SineH | ( | ) |
Pops one element and push the hyperbolic sine.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::SquareRoot | ( | ) |
Pop an element, compute its square root, then push the root on the stack.
Isis::iException::Math |
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
|
protected |
Returns the current stack size.
Get the current stack size.
Referenced by Isis::InlineCalculator::evaluate(), and Isis::CubeCalculator::runCalculations().
void Isis::Calculator::Subtract | ( | ) |
Pops two elements, subtracts them, then pushes the difference on the stack.
References PerformOperation(), Pop(), Push(), and Isis::SubtractOperator().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::Tangent | ( | ) |
Pops one element and push the tangent.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().
void Isis::Calculator::TangentH | ( | ) |
Pops one element and push the hyperbolic tangent.
References PerformOperation(), Pop(), and Push().
Referenced by Isis::CubeCalculator::prepareCalculations().