|
Isis 3.0 Developer's Reference (API) |
Home |
00001 00023 // Calculator.h 00024 #ifndef CALCULATOR_H_ 00025 #define CALCULATOR_H_ 00026 00027 #include "Buffer.h" 00028 00029 // I'm not sure how to forward declare the iterators 00030 #include <QVector> 00031 00032 template<class T> class QStack; 00033 template<class T> class QVector; 00034 00035 namespace Isis { 00066 class Calculator { 00067 public: 00068 Calculator(); // Constructor 00070 virtual ~Calculator(); 00071 00072 // Math methods 00073 void Negative(); 00074 void Multiply(); 00075 void Add(); 00076 void Subtract(); 00077 void Divide(); 00078 void Modulus(); 00079 00080 void Exponent(); 00081 void SquareRoot(); 00082 void AbsoluteValue(); 00083 void Log(); 00084 void Log10(); 00085 00086 void LeftShift(); 00087 void RightShift(); 00088 void MinimumPixel(); 00089 void MaximumPixel(); 00090 void MinimumLine(); 00091 void MaximumLine(); 00092 void Minimum2(); 00093 void Maximum2(); 00094 void GreaterThan(); 00095 void LessThan(); 00096 void Equal(); 00097 void LessThanOrEqual(); 00098 void GreaterThanOrEqual(); 00099 void NotEqual(); 00100 void And(); 00101 void Or(); 00102 00103 void Sine(); 00104 void Cosine(); 00105 void Tangent(); 00106 void Secant(); 00107 void Cosecant(); 00108 void Cotangent(); 00109 void Arcsine(); 00110 void Arccosine(); 00111 void Arctangent(); 00112 void Arctangent2(); 00113 void SineH(); 00114 void CosineH(); 00115 void TangentH(); 00116 void ArcsineH(); 00117 void ArccosineH(); 00118 void ArctangentH(); 00119 00120 // Stack methods 00121 void Push(double scalar); 00122 void Push(Buffer &buff); 00123 void Push(QVector<double> &vect); 00124 QVector<double> Pop(bool keepSpecials = false); 00125 void PrintTop(); 00126 bool Empty(); 00127 virtual void Clear(); 00128 00129 protected: 00130 void PerformOperation(QVector<double> &results, 00131 QVector<double>::iterator arg1Start, 00132 QVector<double>::iterator arg1End, 00133 double operation(double)); 00134 void PerformOperation(QVector<double> &results, 00135 QVector<double>::iterator arg1Start, 00136 QVector<double>::iterator arg1End, 00137 QVector<double>::iterator arg2Start, 00138 QVector<double>::iterator arg2End, 00139 double operation(double, double)); 00140 00142 int StackSize(); 00143 00144 private: 00146 QStack< QVector<double> > * p_valStack; 00147 }; 00148 }; 00149 00150 #endif