template<class T>
class Vector
{
public:
void InitVec(int _max = 255)
{
maxcount = _max;
count = 0;
items = (T**)malloc(sizeof(T*) * maxcount);
for (auto i = 0; i < 255; i++)
items[i] = 0;
}
void AddItem(T* item)
{
if (count >= maxcount)
return;
for (auto i = 0; i < maxcount; i++)
if (items[i] == 0)
{
items[i] = item;
count++;
break;
}
}
void UnlinkItem(T* item)
{
for (auto i = 0; i < count; i++)
if (items[i] == item)
{
items[i] = 0;
count--;
}
}
T* Get(int index)
{
if (index <= count && items[index] != 0)
return items[index];
return 0;
}
T* Get()
{
for (auto i = 0; i < maxcount; i++)
if (items[i] != 0)
return items[i];
return 0;
}
T* GetAndUnlink()
{
for (auto i = 0; i < count; i++)
if (items[i] != 0)
{
T* it = items[i];
items[i] = 0;
count--;
return it;
}
return 0;
}
int Size()
{
return count;
}
void Clear()
{
for (auto i = 0; i < count; i++)
if (items[i] != 0)
{
free(items[i]);
items[i] = 0;
}
count = 0;
}
private:
T** items = NULL;
int count = 0, maxcount = 0;
};