rOpLib.cpp

00001 //
00002 //##################################################################
00003 //                      CAM REAL OPERATOR LIB
00004 //        (FUNCTIONS USED BY CAM SYMBOLIC FUNCTION)
00005 //
00006 //##################################################################
00007 //
00008 //                                      Chris Anderson 9/10/96 (C) UCLA
00009 //
00010 //
00011 #include "rOpLib.h"
00012 #include "math.h"
00013 
00014 #include <string>
00015 #include <iostream>
00016 
00017 using namespace std;
00018 //
00019 // Static Initialization
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,          // 5 //
00043 (void*)CAMrealOperatorLib::Divide,
00044 (void*)CAMrealOperatorLib::Exponentiate,
00045 (void*)CAMrealOperatorLib::Sin,
00046 (void*)CAMrealOperatorLib::Cos,
00047 (void*)CAMrealOperatorLib::Tan,            // 10 //
00048 (void*)CAMrealOperatorLib::Asin,
00049 (void*)CAMrealOperatorLib::Acos,
00050 (void*)CAMrealOperatorLib::Atan,
00051 (void*)CAMrealOperatorLib::Atan2,           //14//
00052 (void*)CAMrealOperatorLib::Sinh,
00053 (void*)CAMrealOperatorLib::Cosh,
00054 (void*)CAMrealOperatorLib::Tanh,
00055 (void*)CAMrealOperatorLib::Ceil,
00056 (void*)CAMrealOperatorLib::Exp,
00057 (void*)CAMrealOperatorLib::Fabs,           // 20 //
00058 (void*)CAMrealOperatorLib::Floor,
00059 (void*)CAMrealOperatorLib::Fmod,
00060 (void*)CAMrealOperatorLib::Log,
00061 (void*)CAMrealOperatorLib::Log10,           // 24 //
00062 (void*)CAMrealOperatorLib::Sqrt,            // 25 //
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         switch(i)
00151     {
00152     case 0 : Plus(argPtr);               break;
00153     case 1 : Minus(argPtr);              break;
00154     case 2 : Add(argPtr);                break;
00155     case 3 : Subtract(argPtr);           break;
00156     case 4 : Times(argPtr);              break;
00157     case 5 : Divide(argPtr);             break;
00158     case 6 : Exponentiate(argPtr);       break;
00159     case 7 : Sin(argPtr);                break;
00160     case 8 : Cos(argPtr);                break;
00161     case 9 : Atan2(argPtr);              break;
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 

Generated on Wed Jan 14 09:18:14 2009 for DoubleVector by  doxygen 1.5.1-p1