Isis 3 Programmer Reference
Isis::Calculator Class Reference

Calculator for arrays. More...

#include <Calculator.h>

Inheritance diagram for Isis::Calculator:
Inheritance graph
Collaboration diagram for Isis::Calculator:
Collaboration graph

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.
 

Private Attributes

QStack< QVector< double > > * p_valStack
 The current stack of arguments.
 

Detailed Description

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.

Author
2007-04-01 Sean Crosby
History

2007-06-11 Jeff Anderson - Fixed bug in Push(Buffer) method. NAN was not computed properly.

2007-08-21 Steven Lambright - Moved the infix to postfix conversion into its own class.

2008-01-28 Steven Lambright - Added more support for the power operator

2008-03-28 Steven Lambright - Condensed math methods to just call PerformOperation(...). Converted valarray's to vectors (in order to use iterators).

2008-06-18 Christopher Austin - Added as well as fixed documentation

2010-02-23 Steven Lambright - Added Minimum2, Maximum2 and all min/max operations now ignore special pixels.

2010-04-08 Steven Lambright - Made min, max have proper implementations and vectors are now QVectors.

2017-08-30 Summer Stapleton - Updated documentation. References #4807.

2017-08-30 Tyler Wilson and Ian Humphrey - provided std:: namespace for isnan to fix ambiguity error when using c++11. References #4809.

2018-09-27 Kaitlyn Lee - Fixed the cout in PrintTop() so that -nan is printed as nan. Updated code up to standards. References #5520.

Definition at line 55 of file Calculator.h.

Constructor & Destructor Documentation

◆ Calculator()

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

Definition at line 32 of file Calculator.cpp.

References p_valStack.

◆ ~Calculator()

Isis::Calculator::~Calculator ( )
virtual

Virtual Constructor.

Destructor.

Definition at line 39 of file Calculator.cpp.

References p_valStack.

Member Function Documentation

◆ AbsoluteValue()

void Isis::Calculator::AbsoluteValue ( )

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

Definition at line 407 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Add()

void Isis::Calculator::Add ( )

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

Definition at line 330 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ And()

void Isis::Calculator::And ( )

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

Definition at line 679 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize().

◆ Arccosine()

void Isis::Calculator::Arccosine ( )

Pops one element and push the arccosine.

Definition at line 777 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ ArccosineH()

void Isis::Calculator::ArccosineH ( )

Pops one element and push the inverse hyperbolic cosine.

Definition at line 807 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

◆ Arcsine()

void Isis::Calculator::Arcsine ( )

Pops one element and push the arcsine.

Definition at line 767 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ ArcsineH()

void Isis::Calculator::ArcsineH ( )

Pops one element and push the inverse hyperbolic sine.

Definition at line 797 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

◆ Arctangent()

void Isis::Calculator::Arctangent ( )

Pops one element and push the arctangent.

Definition at line 787 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Arctangent2()

void Isis::Calculator::Arctangent2 ( )

Pops two elements and push the arctangent.

Definition at line 827 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ ArctangentH()

void Isis::Calculator::ArctangentH ( )

Pops one element and push the inverse hyperbolic tangent.

Definition at line 817 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

◆ Clear()

void Isis::Calculator::Clear ( )
virtual

Clear out the stack.

Reimplemented in Isis::CubeCalculator.

Definition at line 1021 of file Calculator.cpp.

References p_valStack.

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

◆ Cosecant()

void Isis::Calculator::Cosecant ( )

Pops one element and push the cosecant.

Definition at line 737 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Cosine()

void Isis::Calculator::Cosine ( )

Pops one element and push the cosine.

Definition at line 717 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ CosineH()

void Isis::Calculator::CosineH ( )

Pops one element and push the hyperbolic cosine.

Definition at line 850 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

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

◆ Cotangent()

void Isis::Calculator::Cotangent ( )

Pops one element and push the cotangent.

Definition at line 757 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Divide()

void Isis::Calculator::Divide ( )

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

Definition at line 354 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Empty()

bool Isis::Calculator::Empty ( )

Check if the stack is empty.

Returns
bool True if the stack is empty

Definition at line 1013 of file Calculator.cpp.

References p_valStack.

◆ Equal()

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.

Definition at line 617 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Exponent()

void Isis::Calculator::Exponent ( )

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

Exceptions
Isis::iException::Math

Definition at line 382 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ GreaterThan()

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.

Definition at line 587 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ GreaterThanOrEqual()

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.

Definition at line 632 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ LeftShift()

void Isis::Calculator::LeftShift ( )

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

Exceptions
Isis::iException::Math

Definition at line 441 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ LessThan()

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.

Definition at line 602 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ LessThanOrEqual()

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.

Definition at line 647 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Log()

void Isis::Calculator::Log ( )

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

Exceptions
Isis::iException::Math

Definition at line 419 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Log10()

void Isis::Calculator::Log10 ( )

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

Definition at line 429 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Maximum2()

void Isis::Calculator::Maximum2 ( )

Not implemented in Calculator.cpp.

◆ MaximumLine()

void Isis::Calculator::MaximumLine ( )

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

Definition at line 537 of file Calculator.cpp.

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

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

◆ MaximumPixel()

void Isis::Calculator::MaximumPixel ( )

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

Definition at line 572 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Minimum2()

void Isis::Calculator::Minimum2 ( )

Not implemented in Calculator.cpp.

◆ MinimumLine()

void Isis::Calculator::MinimumLine ( )

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

Definition at line 518 of file Calculator.cpp.

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

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

◆ MinimumPixel()

void Isis::Calculator::MinimumPixel ( )

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

Definition at line 557 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Modulus()

void Isis::Calculator::Modulus ( )

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

Definition at line 366 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Multiply()

void Isis::Calculator::Multiply ( )

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

Definition at line 317 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Negative()

void Isis::Calculator::Negative ( )

Pops an element, negates it, then pushes the result.

Definition at line 307 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ NotEqual()

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.

Definition at line 662 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Or()

void Isis::Calculator::Or ( )

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

Definition at line 693 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize().

◆ PerformOperation() [1/2]

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

Performs the mathematical operations on each argument.

Parameters
results[out] The results of the performed operation
arg1StartThe first argument to have the operation done on
arg1EndOne argument beyond the final argument to have the operation done upon
operationThe operation to be done on all arguments

Definition at line 1037 of file Calculator.cpp.

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().

◆ 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 )
protected

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

Definition at line 1066 of file Calculator.cpp.

References Isis::IException::Programmer.

◆ Pop()

◆ PrintTop()

void Isis::Calculator::PrintTop ( )

Print the vector at the top of the stack.

Definition at line 989 of file Calculator.cpp.

References p_valStack.

◆ Push() [1/3]

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

Push a buffer onto the stack.

Parameters
buffThe buffer that will be pushed on the stack

Definition at line 905 of file Calculator.cpp.

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

◆ Push() [2/3]

◆ Push() [3/3]

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

Push a vector onto the stack.

Parameters
vectThe vector that will be pushed on the stack

Definition at line 883 of file Calculator.cpp.

References p_valStack.

◆ RightShift()

void Isis::Calculator::RightShift ( )

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

Exceptions
Isis::iException::Math

Definition at line 480 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Secant()

void Isis::Calculator::Secant ( )

Pops one element and push the secant.

Definition at line 747 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Sine()

void Isis::Calculator::Sine ( )

Pops one element and push the sine.

Definition at line 707 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ SineH()

void Isis::Calculator::SineH ( )

Pops one element and push the hyperbolic sine.

Definition at line 840 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

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

◆ SquareRoot()

void Isis::Calculator::SquareRoot ( )

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

Exceptions
Isis::iException::Math

Definition at line 397 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ StackSize()

int Isis::Calculator::StackSize ( )
protected

Returns the current stack size.

Get the current stack size.

Returns
int Number of arguments in the stack

Definition at line 874 of file Calculator.cpp.

References p_valStack.

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

◆ Subtract()

void Isis::Calculator::Subtract ( )

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

Definition at line 342 of file Calculator.cpp.

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

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ Tangent()

void Isis::Calculator::Tangent ( )

Pops one element and push the tangent.

Definition at line 727 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

Referenced by Isis::InlineCalculator::initialize(), and Isis::CubeCalculator::prepareCalculations().

◆ TangentH()

void Isis::Calculator::TangentH ( )

Pops one element and push the hyperbolic tangent.

Definition at line 860 of file Calculator.cpp.

References PerformOperation(), Pop(), and Push().

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

Member Data Documentation

◆ p_valStack

QStack< QVector<double> >* Isis::Calculator::p_valStack
private

The current stack of arguments.

Definition at line 135 of file Calculator.h.

Referenced by Calculator(), Clear(), Empty(), Pop(), PrintTop(), Push(), StackSize(), and ~Calculator().


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