• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/examples/iprojekt/rpn.h

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;  // zapis originalnih odnosno editiranog stabla
00015     uint m_iExprSize, m_iEditSize;
00016     double m_pTermValues[TERMINALS+OFFSET];
00017     double m_dTermValuesArray[TERMINALS+OFFSET][MAX_JOBS];  // vrijednosti terminala za vektorsku evaluaciju
00018     int m_iTermNum;
00019     double m_pNodeFreq[TOTAL_NODES];    // double zbog lakseg kopiranja u matricu
00020     uint m_iArraySize;  // velicina polja za zajednicku evaluaciju
00021     uint m_iOffset, m_iEnd; // pocetni i krajnji element u polju indeksa poslova za koje se racuna stablo
00022     uint *pIndex;           // polje indeksa poslova - svim terminalima pristupa se preko toga polja
00023     int m_iPosition, m_iEditedPos;  // pozicija u originalnom odnosno editiranom stablu
00024     uint m_nTree;       // oznacava aktivno stablo (default = 0)
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();        // brojace terminala stavljamo na nulu
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     {   /*int i;
00065         for(i=0; i<TERMINALS+OFFSET; i++)
00066         {   if(m_pTermValuesArray[i])
00067                 delete [] m_pTermValuesArray[i];
00068             m_pTermValuesArray[i] = new double[_size];
00069         }*/
00070         m_iArraySize = m_iEnd = _size;
00071     }
00072 };
00073 
00074 #endif // RPN

Generated on Wed Sep 21 2011 13:46:53 for ECF by  doxygen 1.7.1