home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / C / OOPSV / OOPSLIB.ZIP / STATELIS.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-16  |  2.2 KB  |  133 lines

  1. #ifdef TRACE
  2. #include <iostream.h>
  3. #endif
  4.  
  5. #include "statelis.hpp"
  6. #include "stateerr.hpp"
  7. #include "state.hpp"
  8.  
  9. /* ========== Classe "StateListElem" ========== */
  10. StateListElem::StateListElem(State* contenuS,int contenuC)
  11. {
  12.   valeur    = contenuS;
  13.   code      = contenuC;
  14.   precedent = 0;
  15. }
  16.  
  17. StateListElem::~StateListElem()
  18. {
  19.   delete valeur;
  20.   precedent = 0;
  21. }
  22.  
  23.  
  24. /* ========== Classe "StateList" ========== */
  25. StateList::StateList()
  26. {
  27.   premier = 0;
  28.   dernier = 0;
  29. }
  30.  
  31. StateList::~StateList()
  32. {
  33.   this->purge();
  34. }
  35.  
  36. int    StateList::estVide()
  37. {
  38.   return (premier==0);
  39. }
  40.  
  41. void   StateList::addLast(State* elem,int code)
  42. {
  43. #ifdef TRACE
  44.   cout << "StateList::addLast" << endl;
  45. #endif
  46.  
  47.   StateListElem* ptr = new StateListElem(elem,code);
  48.   ptr->precedent     = dernier;
  49.   dernier            = ptr;
  50.   if (!premier)
  51.   {
  52.     premier = ptr;
  53.   }
  54. }
  55.  
  56. void   StateList::removeLast()
  57. {
  58. #ifdef TRACE
  59.   cout << "StateList::removeLast" << endl;
  60. #endif
  61.  
  62.   if(dernier)
  63.   {
  64.     if (premier==dernier)
  65.     {
  66.       premier = 0;
  67.     }
  68.     StateListElem* ptr = dernier->precedent;
  69.     delete dernier;
  70.     dernier = ptr;
  71.   }
  72. }
  73.  
  74. void   StateList::purge()
  75. {
  76. #ifdef TRACE
  77.   cout << "StateList::purge" << endl;
  78. #endif
  79.  
  80.   while(premier)
  81.   {
  82.     this->removeLast();
  83.   }
  84. }
  85.  
  86. int    StateList::size()
  87. {
  88.   int            result = 0;
  89.   StateListElem* ptr    = dernier;
  90.   while(ptr)
  91.   {
  92.     ptr = ptr->precedent;
  93.     result++;
  94.   }
  95.   return result;
  96. }
  97.  
  98. State* StateList::getLastState()
  99. {
  100.   if(dernier)
  101.   {
  102.     return dernier->valeur;
  103.   }
  104.   if (!State::globalError)
  105.   { /* pour ne pas perdre la cause initiale de l'erreur */
  106.     State::globalError = 5;
  107.   }
  108. #if STATE_USE_EXCEPT == 1
  109.   throw  StateInternalError(5);
  110. #else
  111.   State::terminate();
  112. #endif
  113.   return (State*)0;  /* pour calmer lint */
  114. }
  115.  
  116. int StateList::getLastCode()
  117. {
  118.   if(dernier)
  119.   {
  120.     return dernier->code;
  121.   }
  122.   if (!State::globalError)   
  123.   { /* pour ne pas perdre la cause initiale de l'erreur */
  124.     State::globalError = 5;
  125.   }
  126. #if STATE_USE_EXCEPT == 1
  127.   throw  StateInternalError(5);
  128. #else
  129.   State::terminate();
  130. #endif
  131.   return -1;  /* pour calmer lint */
  132. }
  133.