00001 #ifndef RPN_Class
00002 #define RPN_Class
00003
00004 #include <cmath>
00005 #include <stdlib.h>
00006 #include <string>
00007 #include "nodes.h"
00008 extern node Nodes[TOTAL_NODES];
00009 typedef unsigned int uint;
00010
00011 class RPN
00012 {
00013 public:
00014 int *m_pExpression[MAX_TREES], *m_pEdited;
00015 uint m_iExprSize, m_iEditSize;
00016 double m_pTermValues[TERMINALS+OFFSET];
00017 double m_dTermValuesArray[TERMINALS+OFFSET][MAX_JOBS];
00018 int m_iTermNum;
00019 double m_pNodeFreq[TOTAL_NODES];
00020 uint m_iArraySize;
00021 uint m_iOffset, m_iEnd;
00022 uint *pIndex;
00023 int m_iPosition, m_iEditedPos;
00024 uint m_nTree;
00025 std::string m_output;
00026
00027 double evaluate();
00028 void evaluate_array(double dResult[]);
00029 int edit();
00030 void copy();
00031 void ResetNodeFreq();
00032 void write();
00033 void r_write();
00034
00035 RPN()
00036 { for(int i=0; i<MAX_TREES; i++)
00037 m_pExpression[i] = NULL;
00038 m_pEdited = NULL;
00039 m_pTermValues[NUL] = 0;
00040 m_pTermValues[ONE] = 1;
00041 for(int i=0; i<MAX_JOBS; i++)
00042 { m_dTermValuesArray[NUL][i] = 0;
00043 m_dTermValuesArray[ONE][i] = 1;
00044 }
00045 m_iTermNum = TERMINALS+OFFSET;
00046 ResetNodeFreq();
00047 m_nTree = 0;
00048 }
00049 ~RPN()
00050 { for(int i=0; i<MAX_TREES; i++)
00051 if(m_pExpression[i] != NULL) delete [] m_pExpression[i];
00052 if(m_pEdited != NULL) delete [] m_pEdited;
00053 }
00054 void SetExprSize(uint _size)
00055 { for(int i=0; i<MAX_TREES; i++)
00056 { if(m_pExpression[i] != NULL) delete [] m_pExpression[i];
00057 m_pExpression[i] = new int[_size];
00058 }
00059 if(m_pEdited != NULL) delete [] m_pEdited;
00060 m_pEdited = new int[_size];
00061 m_iExprSize = _size;
00062 }
00063 void SetTermArraySize(uint _size)
00064 {
00065
00066
00067
00068
00069
00070 m_iArraySize = m_iEnd = _size;
00071 }
00072 };
00073
00074 #endif // RPN