home *** CD-ROM | disk | FTP | other *** search
/ Geek 6 / Geek-006.iso / linux / video / xmovie-1.5.3.tar.gz / xmovie-1.5.3.tar / xmovie-1.5.3 / guicast / arraylist.h next >
C/C++ Source or Header  |  2000-11-29  |  3KB  |  179 lines

  1. #ifndef ARRAYLIST_H
  2. #define ARRAYLIST_H
  3.  
  4. // designed for lists of track numbers
  5.  
  6. template<class TYPE>
  7. class ArrayList
  8. {
  9. public:
  10.     ArrayList();
  11.     virtual ~ArrayList();
  12.  
  13.     TYPE append(TYPE value);
  14.     TYPE append();
  15.  
  16. // remove last pointer from end
  17.     void remove();          
  18. // remove last pointer and object from end
  19.     void remove_object();          
  20. // remove pointer to object from list
  21.     void remove(TYPE value);       
  22. // remove object and pointer to it from list
  23.     void remove_object(TYPE value);     
  24. // remove pointer to item numbered
  25.     void remove_number(int number);     
  26.     void remove_all();
  27. // Remove pointer and objects for each array entry
  28.     void remove_all_objects();
  29.  
  30.     void sort();
  31.  
  32.     TYPE* values;
  33.     long total;
  34.  
  35. private:
  36.     long available;
  37. };
  38.  
  39. template<class TYPE>
  40. ArrayList<TYPE>::ArrayList()
  41. {
  42.     total = 0;
  43.     available = 1;
  44.     values = new TYPE[available];
  45. }
  46.  
  47.  
  48. template<class TYPE>
  49. ArrayList<TYPE>::~ArrayList()
  50. {
  51. // Just remove the pointer
  52.     delete [] values;
  53. }
  54.  
  55.  
  56. template<class TYPE>
  57. TYPE ArrayList<TYPE>::append(TYPE value)            // add to end of list
  58. {
  59.     if(total + 1 > available) 
  60.     {
  61.         available *= 2;
  62.         TYPE* newvalues = new TYPE[available];
  63.         for(int i = 0; i < total; i++) newvalues[i] = values[i];
  64.         delete [] values;
  65.         values = newvalues;
  66.     }
  67.     
  68.     values[total++] = value;
  69.     return value;
  70. }
  71.  
  72. template<class TYPE>
  73. TYPE ArrayList<TYPE>::append()            // add to end of list
  74. {
  75.     if(total + 1 > available)
  76.     {
  77.         available *= 2;
  78.         TYPE* newvalues = new TYPE[available];
  79.         for(int i = 0; i < total; i++) newvalues[i] = values[i];
  80.         delete [] values;
  81.         values = newvalues;
  82.     }
  83.     total++;
  84.  
  85.     return values[total - 1];
  86. }
  87.  
  88. template<class TYPE>
  89. void ArrayList<TYPE>::remove(TYPE value)                   // remove value from anywhere in list
  90. {
  91.     int in, out;
  92.  
  93.     for(in = 0, out = 0; in < total;)
  94.     {
  95.         if(values[in] != value) values[out++] = values[in++];
  96.         else 
  97.         {
  98.             in++; 
  99.         }
  100.     }
  101.     total = out;
  102. }
  103.  
  104.  
  105.  
  106. template<class TYPE>
  107. void ArrayList<TYPE>::remove_object(TYPE value)                   // remove value from anywhere in list
  108. {
  109.     remove(value);
  110.     delete value;
  111. }
  112.  
  113.  
  114.  
  115. template<class TYPE>
  116. void ArrayList<TYPE>::remove_object()                   // remove value from anywhere in list
  117. {
  118.     delete values[total - 1];
  119.     remove();
  120. }
  121.  
  122.  
  123.  
  124. template<class TYPE>
  125. void ArrayList<TYPE>::remove()
  126. {
  127.     total--;
  128. }
  129.  
  130. template<class TYPE>
  131. void ArrayList<TYPE>::remove_number(int number)                   // remove value from anywhere in list
  132. {
  133.     static int in, out;
  134.     
  135.     for(in = 0, out = 0; in < total;)
  136.     {
  137.         if(in != number) values[out++] = values[in++];
  138.         else  in++;       // need to delete it here
  139.     }
  140.     total = out;
  141. }
  142.  
  143. template<class TYPE>
  144. void ArrayList<TYPE>::remove_all_objects()
  145. {
  146.     for(int i = 0; i < total; i++) delete values[i];
  147.     total = 0;
  148. }
  149.  
  150. template<class TYPE>
  151. void ArrayList<TYPE>::remove_all()
  152. {
  153.     total = 0;
  154. }
  155.  
  156. template<class TYPE>
  157. void ArrayList<TYPE>::sort()                    // sort from least to greatest value
  158. {
  159.     int result = 1;
  160.     TYPE temp;
  161.  
  162.     while(result)
  163.     {
  164.         result = 0;
  165.         for(int i = 0, j = 1; j < total; i++, j++)
  166.         {
  167.             if(values[j] < values[i])
  168.             {
  169.                 temp = values[i];
  170.                 values[i] = values[j];
  171.                 values[j] = temp;
  172.                 result = 1;
  173.             }
  174.         }
  175.     }
  176. }
  177.  
  178. #endif
  179.