Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 20th, 2012  |  syntax: None  |  size: 2.95 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #pragma once
  2.  
  3. template<class T>
  4. class List
  5. {
  6. private:
  7.         int bufferSize,top,sizeCap;
  8. public:
  9.         T* buffer;
  10.  
  11.         //void func ( void (*f)(int) );
  12.  
  13.         int Contains(T value)
  14.         {
  15.                 if(buffer != NULL && top > 0)
  16.                 {
  17.                         for(int i = 0; i < top;i++)
  18.                         {
  19.                                 if(buffer[i] == value)
  20.                                         return true;
  21.                         }
  22.                 }
  23.                 return false;
  24.         }
  25.  
  26.         int IndexOf(T value)
  27.         {
  28.                 if(buffer != NULL && top > 0)
  29.                 {
  30.                         for(int i = 0; i < top;i++)
  31.                         {
  32.                                 if(buffer[i] == value)
  33.                                         return i;
  34.                         }
  35.                 }
  36.                 return -1;
  37.         }
  38.  
  39.         void ForEach(void (*f)(T,int))
  40.         {
  41.                 if(buffer != NULL && top > 0)
  42.                 {
  43.                         for(int i = 0; i < top; i++)
  44.                         {
  45.                                 f(buffer[i],i);
  46.                         }
  47.                 }
  48.         }
  49.  
  50.         int MemorySize()
  51.         {
  52.                 return bufferSize * sizeof(T);
  53.         }
  54.  
  55.         int Count()
  56.         {
  57.                 if(buffer != NULL)
  58.                         return top;
  59.                 return 0;
  60.         }
  61.  
  62.         int Capacity()
  63.         {
  64.                 if(sizeCap > 0)
  65.                         return sizeCap;
  66.                 return -1;
  67.         }
  68.  
  69.         List(int size = 32,int cap = 0)
  70.         {
  71.                 sizeCap = cap;
  72.                 if(size > 0)
  73.                 {
  74.                         buffer = new T[size];
  75.                         bufferSize = size;
  76.                 }
  77.                 else
  78.                 {
  79.                         buffer = new T[1];
  80.                         bufferSize = 1;
  81.                 }
  82.                 top = 0;
  83.         }
  84.  
  85.         void Init(int size = 32,int cap = 0)
  86.         {
  87.                 sizeCap = cap;
  88.                 if(size > 0)
  89.                 {
  90.                         buffer = new T[size];
  91.                         bufferSize = size;
  92.                 }
  93.                 else
  94.                 {
  95.                         buffer = new T[1];
  96.                         bufferSize = 1;
  97.                 }
  98.                 top = 0;
  99.         }
  100.  
  101.         void Clear()
  102.         {
  103.                 top = 0;
  104.         }
  105.  
  106.         ~List()
  107.         {
  108.                 Release(false);
  109.         }
  110.  
  111.         void Release(int del = false)
  112.         {
  113.                 if(del)
  114.                 {
  115.                         delete this;
  116.                 }
  117.                 else if(buffer)
  118.                 {
  119.                         delete buffer;
  120.                         buffer = NULL;
  121.                 }
  122.         }
  123.  
  124.         void Push(const T & item)
  125.         {
  126.                 Add(item);
  127.         }
  128.  
  129.         T Pop()
  130.         {
  131.                 return Grab(top-1);
  132.         }
  133.  
  134.         T Dequeue()
  135.         {
  136.                 return Grab(0);
  137.         }
  138.  
  139.         void Enqueue(const T & item)
  140.         {
  141.                 Add(item);
  142.         }
  143.  
  144.         void Insert(const T & item, int i)
  145.         {
  146.                 if(i == top)
  147.                         Add(item);
  148.                 else if(i < top && i >= 0)
  149.                 {
  150.                         memcpy(&buffer[i+1],&buffer[i],(top - i) * sizeof(T));
  151.                         buffer[i] = item;
  152.                         top++;
  153.                         if(top >= bufferSize)
  154.                         {
  155.                                 int newSize = bufferSize * 2;
  156.                                 T* newBuff = new T[newSize];
  157.                                 memcpy(newBuff,buffer,newSize * sizeof(T));
  158.                                 delete buffer;
  159.                                 buffer = newBuff;
  160.                                 bufferSize = newSize;
  161.                         }
  162.                 }
  163.         }
  164.  
  165.         void Add(const T & item)
  166.         {
  167.                 if(sizeCap <= 0 || (top < sizeCap))
  168.                 {
  169.                         buffer[top] = item;
  170.                         top++;
  171.                         if(top >= bufferSize)
  172.                         {
  173.                                 int newSize = bufferSize * 2;
  174.                                 T* newBuff = new T[newSize];
  175.                                 memcpy(newBuff,buffer,newSize * sizeof(T));
  176.                                 delete buffer;
  177.                                 buffer = newBuff;
  178.                                 bufferSize = newSize;
  179.                         }
  180.                 }
  181.         }
  182.  
  183.         void Remove(int i)
  184.         {
  185.                 if(buffer != NULL)
  186.                 {
  187.                         if(i < top && i >= 0)
  188.                         {
  189.                                 int ntop = top - 1;
  190.                                 int cpyCount = ntop - i;
  191.                                 if(cpyCount > 0)
  192.                                 {
  193.                                         int cpyStart = i + 1;
  194.                                         void* memLoc = &buffer[i];
  195.                                         void* memSrc = &buffer[cpyStart];
  196.                                         memcpy(memLoc,memSrc,cpyCount * sizeof(T));
  197.                                 }
  198.                                 top--;
  199.                         }
  200.                 }
  201.         }
  202.  
  203.         int TryRemove(T value)
  204.         {
  205.                 int i = IndexOf(value);
  206.                 if(i != -1)
  207.                 {
  208.                         Remove(i);
  209.                         return true;
  210.                 }
  211.                 return false;
  212.         }
  213.  
  214.         T& operator[](int i)
  215.         {
  216.                 if(buffer && i < top && i >= 0)
  217.                 {
  218.                         return buffer[i];
  219.                 }
  220.         }
  221.  
  222.         T Grab(int i)
  223.         {
  224.                 if(buffer)
  225.                 {
  226.                         if(i < top && i >= 0)
  227.                         {
  228.                                 T result = buffer[i];
  229.                                 Remove(i);
  230.                                 return result;
  231.                         }
  232.                 }
  233.         }
  234. };