00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __EXPRESSION_TRANSFORM__
00009 #define __EXPRESSION_TRANSFROM__
00010 #include "symfunimpexp.h"
00011
00012 #ifndef _OPERATOR_LIB__
00013 class CAMoperatorLib;
00014 #endif
00015
00016 class __IMPEXP__ expressionTransform
00017 {
00018 public :
00019
00020 expressionTransform();
00021 expressionTransform(const expressionTransform& E);
00022
00023 expressionTransform(char** V, int Vcount, char* S, CAMoperatorLib* O);
00024 expressionTransform(char** V, int Vcount, char** C, int Ccount,
00025 char* S,CAMoperatorLib* O);
00026
00027 ~expressionTransform();
00028
00029 int initialize();
00030 int initialize(char** V, int Vcount, char* S, CAMoperatorLib* O);
00031 int initialize(char** V, int Vcount, char** C, int Ccount, char* S,
00032 CAMoperatorLib* O);
00033
00034 void destroy();
00035
00036 int createTransform(char** V, int Vcount, char** C, int Ccount, char* S);
00037
00038
00039
00040 char** getSymbolNamesPtr() const {return sNames;};
00041 long getSymbolCount() const {return symbolCount;};
00042 long getEvaluationDataSize() const {return evaluationDataSize;};
00043 long* getExecutionArrayPtr() const {return executionArray;};
00044 long getExecutionArraySize() const {return executionArraySize;};
00045
00046
00047
00048
00049 private :
00050
00051 int variableCount;
00052 int constantCount;
00053
00054 char** sNames;
00055 long symbolCount;
00056
00057 long* executionArray;
00058 long executionArraySize;
00059
00060 long evaluationDataSize;
00061
00062 CAMoperatorLib* opLib;
00063
00064 enum{DELIM = -2, VAR =-1, NOOP = 0};
00065 enum{LEFTP = -1, COMMA = 0, RIGHTP = 1};
00066
00067 int separateIntoTokens(char* inputS, char* outputS);
00068
00069 int encodeExpression(char* inputS,long Ssize,char** sNames,
00070 long vCount, long cCount, long sCount,long* expressionCode,
00071 long& expressionCodeSize);
00072
00073 int setupEvaluation(long* eCode, int iStart, int iEnd,
00074 long* execArray, long& execIndex, long& dIndex);
00075
00076 void errorHandler();
00077 };
00078 #endif
00079