Guest User

Untitled

a guest
May 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. // ArrayMap.h
  2. #pragma once
  3. #include "stdafx.h"
  4.  
  5. #define DEFAULT_SIZE 250
  6.  
  7. template<typename KEY, typename VALUE>
  8. struct Element
  9. {
  10.     KEY key;
  11.     VALUE value;
  12.     BOOL isUsed;
  13. };
  14.  
  15. template<typename KEY, typename VALUE>
  16. class Map
  17. {
  18. #define ELEMENT Element<KEY, VALUE>
  19. public:
  20.     Map()
  21.     {
  22.         start = lastElement =  (ELEMENT *)malloc(sizeof(ELEMENT) * DEFAULT_SIZE);
  23.         end = lastElement + (sizeof(ELEMENT) * DEFAULT_SIZE);
  24.         numElements = 0;
  25.     }
  26.  
  27.     inline ELEMENT *getAt(int index)
  28.     {
  29.         ELEMENT *temp = (ELEMENT *)(start + (sizeof(ELEMENT) * index));
  30.         if(temp > end)
  31.             temp = end;
  32.         return temp;
  33.     }
  34.  
  35.     ELEMENT *addElement(KEY key, VALUE value)
  36.     {
  37.         if(current++ > end)
  38.         {
  39.             ELEMENT *temp = (ELEMENT *)malloc(sizeof(ELEMENT) * (numElements + DEFAULT_SIZE));
  40.             memcpy(temp, start, sizeof(ELEMENT) * numElements);
  41.             free(start);
  42.             start = temp;
  43.         }
  44.         for(ELEMENT *e = start; e < end; e++)
  45.         {
  46.             if(!e->isUsed)
  47.             {
  48.                 e->key = key;
  49.                 e->value = value;
  50.                 e->isUsed = true;
  51.                 lastElement++;
  52.                 return e;
  53.             }
  54.         }
  55.     }
  56.  
  57.     BOOL removeElement(KEY key, ELEMENT *out)
  58.     {
  59.         ELEMENT *element = start;
  60.         for(SIZE_T i = 0; i < numElements; i++, element++)
  61.         {
  62.             if(element->key == key)
  63.             {
  64.                 memcpy(out, element, sizeof(ELEMENT));
  65.                 element->isUsed = false;
  66.                 return TRUE;
  67.             }
  68.         }
  69.         return FALSE;
  70.     }
  71.  
  72.     inline SIZE_T size()
  73.     {
  74.         return numElements;
  75.     }
  76.  
  77.     inline ELEMENT *getStart()
  78.     {
  79.         return start;
  80.     }
  81.  
  82.     inline ELEMENT *getEnd()
  83.     {
  84.         return end;
  85.     }
  86.  
  87. private:
  88.     ELEMENT *start, *lastElement, *end;
  89.     SIZE_T numElements;
  90. };
Add Comment
Please, Sign In to add comment