00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "rOpLib.h"
00012 #include "math.h"
00013
00014 #include <string>
00015 #include <iostream>
00016
00017 using namespace std;
00018
00019
00020
00021 int CAMrealOperatorLib::operatorCount = 26;
00022
00023 char* CAMrealOperatorLib::Symbols[26] =
00024 {"+", "-", "+", "-", "*", "/","^","sin", "cos",
00025 "tan","asin","acos","atan","atan2",
00026 "sinh","cosh","tanh",
00027 "ceil","exp","fabs","floor","fmod","log","log10","sqrt","pow"};
00028
00029
00030 int CAMrealOperatorLib::Priority[26] =
00031 {3,3,5,5,4,4,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
00032
00033 int CAMrealOperatorLib::ArgCount[26] =
00034 {1,1,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2};
00035
00036 void* CAMrealOperatorLib::FunctionArray[26] =
00037 {
00038 (void*)CAMrealOperatorLib::Plus,
00039 (void*)CAMrealOperatorLib::Minus,
00040 (void*)CAMrealOperatorLib::Add,
00041 (void*)CAMrealOperatorLib::Subtract,
00042 (void*)CAMrealOperatorLib::Times,
00043 (void*)CAMrealOperatorLib::Divide,
00044 (void*)CAMrealOperatorLib::Exponentiate,
00045 (void*)CAMrealOperatorLib::Sin,
00046 (void*)CAMrealOperatorLib::Cos,
00047 (void*)CAMrealOperatorLib::Tan,
00048 (void*)CAMrealOperatorLib::Asin,
00049 (void*)CAMrealOperatorLib::Acos,
00050 (void*)CAMrealOperatorLib::Atan,
00051 (void*)CAMrealOperatorLib::Atan2,
00052 (void*)CAMrealOperatorLib::Sinh,
00053 (void*)CAMrealOperatorLib::Cosh,
00054 (void*)CAMrealOperatorLib::Tanh,
00055 (void*)CAMrealOperatorLib::Ceil,
00056 (void*)CAMrealOperatorLib::Exp,
00057 (void*)CAMrealOperatorLib::Fabs,
00058 (void*)CAMrealOperatorLib::Floor,
00059 (void*)CAMrealOperatorLib::Fmod,
00060 (void*)CAMrealOperatorLib::Log,
00061 (void*)CAMrealOperatorLib::Log10,
00062 (void*)CAMrealOperatorLib::Sqrt,
00063 (void*)CAMrealOperatorLib::Pow
00064 };
00065
00066
00067 void CAMrealOperatorLib::Plus(double** argPtr)
00068 { *argPtr[1] = +(*argPtr[0]); }
00069
00070 void CAMrealOperatorLib::Minus(double** argPtr)
00071 { *argPtr[1] = -(*argPtr[0]); }
00072
00073
00074 void CAMrealOperatorLib::Add(double** argPtr)
00075 { *argPtr[2] = (*argPtr[0])+(*argPtr[1]); }
00076
00077 void CAMrealOperatorLib::Subtract(double** argPtr)
00078 { *argPtr[2] = (*argPtr[0])-(*argPtr[1]); }
00079
00080 void CAMrealOperatorLib::Times(double** argPtr)
00081 { *argPtr[2] = (*argPtr[0])*(*argPtr[1]); }
00082
00083 void CAMrealOperatorLib::Divide(double** argPtr)
00084 { *argPtr[2] = (*argPtr[0])/(*argPtr[1]); }
00085
00086 void CAMrealOperatorLib::Exponentiate(double** argPtr)
00087 { *argPtr[2] = pow(*argPtr[0],*argPtr[1]); }
00088
00089 void CAMrealOperatorLib::Sin(double** argPtr)
00090 { *argPtr[1] = sin(*argPtr[0]); }
00091
00092 void CAMrealOperatorLib::Cos(double** argPtr)
00093 { *argPtr[1] = cos(*argPtr[0]); }
00094
00095 void CAMrealOperatorLib::Tan(double** argPtr)
00096 { *argPtr[1] = tan(*argPtr[0]); }
00097
00098 void CAMrealOperatorLib::Asin(double** argPtr)
00099 { *argPtr[1] = asin(*argPtr[0]); }
00100
00101 void CAMrealOperatorLib::Acos(double** argPtr)
00102 { *argPtr[1] = acos(*argPtr[0]); }
00103
00104 void CAMrealOperatorLib::Atan(double** argPtr)
00105 { *argPtr[1] = atan(*argPtr[0]); }
00106
00107 void CAMrealOperatorLib::Atan2(double** argPtr)
00108 { *argPtr[2] = atan2(*argPtr[0],*argPtr[1]);}
00109
00110 void CAMrealOperatorLib::Sinh(double** argPtr)
00111 { *argPtr[1] = sinh(*argPtr[0]); }
00112
00113 void CAMrealOperatorLib::Cosh(double** argPtr)
00114 { *argPtr[1] = cosh(*argPtr[0]); }
00115
00116 void CAMrealOperatorLib::Tanh(double** argPtr)
00117 { *argPtr[1] = tanh(*argPtr[0]); }
00118
00119 void CAMrealOperatorLib::Ceil(double** argPtr)
00120 { *argPtr[1] = ceil(*argPtr[0]); }
00121
00122 void CAMrealOperatorLib::Exp(double** argPtr)
00123 { *argPtr[1] = exp(*argPtr[0]); }
00124
00125 void CAMrealOperatorLib::Fabs(double** argPtr)
00126 { *argPtr[1] = fabs(*argPtr[0]); }
00127
00128 void CAMrealOperatorLib::Floor(double** argPtr)
00129 { *argPtr[1] = floor(*argPtr[0]); }
00130
00131 void CAMrealOperatorLib::Fmod(double** argPtr)
00132 { *argPtr[2] = fmod(*argPtr[0],*argPtr[1]);}
00133
00134 void CAMrealOperatorLib::Log(double** argPtr)
00135 { *argPtr[1] = log(*argPtr[0]); }
00136
00137 void CAMrealOperatorLib::Log10(double** argPtr)
00138 { *argPtr[1] = log10(*argPtr[0]); }
00139
00140 void CAMrealOperatorLib::Sqrt(double** argPtr)
00141 { *argPtr[1] = sqrt(*argPtr[0]); }
00142
00143 void CAMrealOperatorLib::Pow(double** argPtr)
00144 { *argPtr[2] = pow(*argPtr[0],*argPtr[1]);}
00145
00146
00147 void CAMrealOperatorLib::evaluate(int, double** )
00148 {
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 }
00165
00166
00167 int CAMrealOperatorLib::getOperatorIndex(char* Sym)
00168 {
00169 int ireturn = -1;
00170 int i;
00171 for(i=0; i< operatorCount; i++)
00172 {
00173 if(strcmp(Sym,Symbols[i]) == 0) ireturn = i;
00174 }
00175 return ireturn;
00176 }
00177
00178 int CAMrealOperatorLib::getUnaryOperatorIndex(char* Sym)
00179 {
00180 int ireturn = -1;
00181 if(strcmp(Sym,"+") == 0) ireturn = 0;
00182 if(strcmp(Sym,"-") == 0) ireturn = 1;
00183 return ireturn;
00184 }
00185
00186 int CAMrealOperatorLib::getBinaryOperatorIndex(char* Sym)
00187 {
00188 int ireturn = -1;
00189 if(strcmp(Sym,"+") == 0) ireturn = 2;
00190 if(strcmp(Sym,"-") == 0) ireturn = 3;
00191 return ireturn;
00192 }
00193
00194 int CAMrealOperatorLib::getOperatorPriority(int index)
00195 {
00196 return Priority[index];
00197 }
00198
00199 int CAMrealOperatorLib::getOperatorArgCount(int index)
00200 {
00201 return ArgCount[index];
00202 }
00203
00204 int CAMrealOperatorLib::getOperatorCount()
00205 {
00206 return operatorCount;
00207 }
00208
00209 char* CAMrealOperatorLib::getOperatorSymbol(int index)
00210 {
00211 return Symbols[index];
00212 }
00213 void** CAMrealOperatorLib::getFunctionArrayPtr()
00214 {return FunctionArray;};
00215