Advertisement
thorium90

Stack.cpp

Nov 11th, 2011
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.88 KB | None | 0 0
  1. /*
  2.    ___|  _)  | _)       _)                         ___|                    
  3.  \___ \   |  |  |   __|  |  |   |  __ `__ \       |       _ \    __|  __ \  
  4.        |  |  |  |  (     |  |   |  |   |   |      |      (   |  |     |   |
  5.  _____/  _| _| _| \___| _| \__,_| _|  _|  _|     \____| \___/  _|     .__/  
  6.                                                                      _|  
  7. Code source libre de droit. Si vous utilisez mon code, merci à vous d'en préciser la source.
  8.  
  9. Date : 11/11/2011
  10. Auteur : Silicium Corp
  11. */
  12. #include "Stack.h"
  13.  
  14. //===============================================================
  15. Stack::Stack(boolean fifoMod)
  16. {
  17.     LENGTH = LENGTH_STACK;
  18.     isFIFO = fifoMod;
  19.     init();
  20.  
  21. }
  22. //===============================================================
  23. void Stack::init()
  24. {
  25.     for (int i = 0; i < LENGTH; i++)
  26.     {
  27.         stack[i] = 0;
  28.     }
  29.     nextPush = 0;
  30.     nextPop = 0;
  31.     nbElement = 0;
  32.     data = 0;                                                   //Si l'opérateur "=" n'est pas surcharger et que vous utiliser votre propre type d'objet à contenir dans la stack, vous allez avoir des surprises !
  33. }
  34. //===============================================================
  35. byte Stack::getNbElement()
  36. {
  37.     return(nbElement);
  38. }
  39. //===============================================================
  40. void Stack::push(byte addonContent)                            //Changer "byte" par le type de votre propre objet ou d'un autre type standard. Mettre a jour le fichier header
  41. {
  42.    
  43.     if (nbElement < LENGTH)
  44.     {
  45.         if(isFIFO)
  46.         {
  47.             if(nextPush == LENGTH)
  48.             {
  49.                 nextPush = 0;
  50.             }
  51.         }
  52.         stack[nextPush] = addonContent;
  53.         nextPush ++;
  54.         nbElement ++;
  55.        
  56.     }
  57.     else
  58.     {
  59.         Serial.print("Erreur : Stack pleine");
  60.         Serial.print("\n");
  61.     }
  62. }
  63. //===============================================================
  64. byte Stack::pop()                                              //Changer "byte" par le type de votre propre objet ou d'un autre type standard. Mettre a jour le fichier header
  65. {
  66.     //Serial.print("pop call : \n");
  67.     if (nbElement > 0)
  68.     {
  69.         nbElement -= 1;
  70.         if (isFIFO)
  71.         {
  72.             data = stack[nextPop];
  73.             stack[nextPop] = 0;
  74.             nextPop ++;
  75.             if (nextPop == LENGTH)
  76.             {
  77.                 nextPop = 0;
  78.             }
  79.         }
  80.         else
  81.         {
  82.             data = stack[nextPush - 1];
  83.             stack[nextPush - 1] = 0;
  84.             nextPush -= 1;
  85.         }
  86.     }
  87.     else
  88.     {
  89.         data = 0;
  90.         Serial.print("Erreur : Stack vide");
  91.         Serial.print("\n");
  92.     }
  93.      return (data);
  94. }
  95. //===============================================================
  96. void Stack::show()
  97. {
  98.     for (int i = 0; i < LENGTH; i++)
  99.     {
  100.         Serial.print("Emplacement[");
  101.         Serial.print(i);                                        
  102.         Serial.print("] : ");
  103.         Serial.print(stack[i]);                                //Si vous utiliser votre propre type d'objet à contenir dans la stack selectionez la methode qui vous plaira tant que Serial.print() accepte le type
  104.         Serial.print("\n");
  105.     }
  106. }
  107. //===============================================================
  108. void Stack::setFIFOmode(boolean state)
  109. {
  110.     isFIFO = state;
  111. }
  112. //===============================================================
  113. byte Stack::getLength()
  114. {
  115.     return (LENGTH);
  116. }
  117. //===============================================================
  118. byte* Stack::getStack()                                        //Changer "byte" par le type de votre propre objet ou d'un autre type standard. Mettre a jour le fichier header
  119. {
  120.     return (stack);
  121. }
  122. //===============================================================
  123. byte Stack::getNextPush()
  124. {
  125.     return (nextPush);
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement