TaskArray.h
#pragma once
#include <vector>
using namespace std;
class TaskArray
{
private:
vector<int> LiveTaskArray;
vector<int> DeadTaskArray;
int DeadTaskBegin;
vector<int> IteratorArray;
int IteratorSize;
public:
TaskArray(int size);
~TaskArray();
void Init(int size);
int AddTask();
int KillTask(int index);
int GetLiveTask(int index);
int GetDeadTask(int index);
int GetIterator(int index);
int GetDeadTaskBegin();
int GetIteratorSize();
};
TaskArray.cpp
#include "TaskArray.h"
TaskArray::TaskArray(int size)
{
LiveTaskArray.resize(size, -1);
IteratorArray.resize(size, -1);
DeadTaskArray.resize(size + 1,-1);
for (int i = 0; i < size; i++){
DeadTaskArray[i] = i;
}
DeadTaskBegin = 0;
IteratorSize = -1;
}
TaskArray::~TaskArray(){}
void TaskArray::Init()
{
for (int i = 0; i < LiveTaskArray.size(); i++){
LiveTaskArray[i] = -1;
DeadTaskArray[i] = i;
IteratorArray[i] = -1;
}
DeadTaskBegin = 0;
IteratorSize = -1;
}
int TaskArray::AddTask(){
if (DeadTaskBegin < DeadTaskArray.size() - 1){
IteratorSize++;
LiveTaskArray[DeadTaskArray[DeadTaskBegin]] = IteratorSize;
IteratorArray[IteratorSize] = DeadTaskArray[DeadTaskBegin];
DeadTaskBegin++;
return IteratorArray[IteratorSize];
}
return -1;
}
int TaskArray::KillTask(int index){
if (index < LiveTaskArray.size() && index >= 0){
IteratorArray[LiveTaskArray[index]] = IteratorArray[IteratorSize];
LiveTaskArray[IteratorArray[IteratorSize]] = LiveTaskArray[index];
DeadTaskBegin--;
DeadTaskArray[DeadTaskBegin] = index;
IteratorArray[IteratorSize] = -1;
LiveTaskArray[index] = -1;
IteratorSize--;
return 0;
}
return -1;
}
int TaskArray::GetLiveTask(int index){return index < LiveTaskArray.size() ? LiveTaskArray[index] : -1;};
int TaskArray::GetDeadTask(int index){return index < DeadTaskArray.size() ? DeadTaskArray[index] : -1;};
int TaskArray::GetIterator(int index){return index < IteratorArray.size() ? IteratorArray[index] : -1; };
int TaskArray::GetDeadTaskBegin(){ return DeadTaskBegin; };
int TaskArray::GetIteratorSize(){ return IteratorSize; };
閉じる