#include
class CTask{
public:
int Element;
CTask *Next;
CTask *Prev;
CTask(CTask *Prev, int Element){
this->Prev = Prev;
this->Element = Element;
}
void InsertNext(CTask *Next){
this->Next = Next;
}
void InsertPrev(CTask *Prev){
this->Prev = Prev;
}
void PrintElement(){
printf("%d\n", this->Element);
}
};
class CList{
private:
CTask *ActiveTask;
CTask *PassiveTask;
public:
CList(int max){
int i;
CTask *task;
ActiveTask = new CTask(ActiveTask, 0);
ActiveTask->InsertNext(ActiveTask);
PassiveTask = new CTask(NULL, 0);
for(i=1, task=PassiveTask; iNext){
task->InsertNext(new CTask(NULL, i));
}
}
~CList(){
CTask *task1 = NULL, *task2 = NULL;
for(task1 = ActiveTask->Next; task1!=ActiveTask; task1=task2){
task2 = task1->Next;
delete task1;
}
delete ActiveTask;
for(task1 = PassiveTask; task1!=NULL; task1=task2){
task2 = task1->Next;
delete task1;
}
}
};
int main(void){
CList *List;
List = new CList(10);
getchar();
return 0;
}
とりあえずやりたかったことは、
PassiveTaskという単方向環状リストにあらかじめ指定された数のノードを用意しておいて、
何かでノートを使うことになったとき(STGで言うなら的が弾を発射した時)にPassiveTaskから1つノードを取り出してActiveTaskという双方向環状リストに登録。
ActiveTaskに登録されているノードが破棄されるとき(STGで言うなら弾がヒット、あるいは画面外に出たとき)にそれを取り出してPassiveTaskに登録する。
…といった感じのこと。
CTaskのElementの部分をゆくゆくはCObjectみたいな全てのクラスのスーパークラスにしてやれば、タスクシステムっぽいものができるかなー、なんて思ったりしたわけなんですけれど…。
うーん、まずそれがタスクシステムというので合っているのかどうかが怖い。
で、まぁこれを実行した結果、getchar()が実行されていない様…。
加えてコマンドフロンプトの今までの実行結果が消去されてることから、
絶対これまずいことになってるだろ!? と言わざるを得ない。
エラーの場所がわっかんねぇ。どうすんべさ。