Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ArrayMap.h
- #pragma once
- #include "stdafx.h"
- #define DEFAULT_SIZE 250
- template<typename KEY, typename VALUE>
- struct Element
- {
- KEY key;
- VALUE value;
- BOOL isUsed;
- };
- template<typename KEY, typename VALUE>
- class Map
- {
- #define ELEMENT Element<KEY, VALUE>
- public:
- Map()
- {
- start = lastElement = (ELEMENT *)malloc(sizeof(ELEMENT) * DEFAULT_SIZE);
- end = lastElement + (sizeof(ELEMENT) * DEFAULT_SIZE);
- numElements = 0;
- }
- inline ELEMENT *getAt(int index)
- {
- ELEMENT *temp = (ELEMENT *)(start + (sizeof(ELEMENT) * index));
- if(temp > end)
- temp = end;
- return temp;
- }
- ELEMENT *addElement(KEY key, VALUE value)
- {
- if(current++ > end)
- {
- ELEMENT *temp = (ELEMENT *)malloc(sizeof(ELEMENT) * (numElements + DEFAULT_SIZE));
- memcpy(temp, start, sizeof(ELEMENT) * numElements);
- free(start);
- start = temp;
- }
- for(ELEMENT *e = start; e < end; e++)
- {
- if(!e->isUsed)
- {
- e->key = key;
- e->value = value;
- e->isUsed = true;
- lastElement++;
- return e;
- }
- }
- }
- BOOL removeElement(KEY key, ELEMENT *out)
- {
- ELEMENT *element = start;
- for(SIZE_T i = 0; i < numElements; i++, element++)
- {
- if(element->key == key)
- {
- memcpy(out, element, sizeof(ELEMENT));
- element->isUsed = false;
- return TRUE;
- }
- }
- return FALSE;
- }
- inline SIZE_T size()
- {
- return numElements;
- }
- inline ELEMENT *getStart()
- {
- return start;
- }
- inline ELEMENT *getEnd()
- {
- return end;
- }
- private:
- ELEMENT *start, *lastElement, *end;
- SIZE_T numElements;
- };
Add Comment
Please, Sign In to add comment