Mercurial > hg > Members > kono > Cerium
diff TaskManager/Cell/CellBufferManager.cc @ 57:1f8a23cdeec3
*** empty log message ***
author | gongo |
---|---|
date | Sat, 16 Feb 2008 19:40:20 +0900 |
parents | |
children | f50c74835a9b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Cell/CellBufferManager.cc Sat Feb 16 19:40:20 2008 +0900 @@ -0,0 +1,75 @@ +#include <stdio.h> +#include <stdlib.h> +#include "CellBufferManager.h" +#include "CellTaskListInfo.h" + +void +BufferManager::init(void) +{ + tlistImpl = new CellTaskListInfo; + tqueueImpl = new TaskQueueInfo; + htaskImpl = new HTaskInfo; + + tlistImpl->init(machineNum*2); + tqueueImpl->init(TASK_MAX_SIZE*4); + htaskImpl->init(TASK_MAX_SIZE*2); + + machineTaskList = new TaskListPtr[machineNum]; + + for (int i = 0; i < machineNum; i++) { + machineTaskList[i] = tlistImpl->create(); + } +} + +#if 0 // 継承するかもしれないので保存 +void +BufferManager::append_activeTask(HTaskPtr task) +{ + TaskQueuePtr q; + + q = tqueueImpl->create(task); + activeTaskQueue = tqueueImpl->append(activeTaskQueue, q); +} + +void +BufferManager::append_waitTask(HTaskPtr task) +{ + TaskQueuePtr q; + + q = tqueueImpl->create(task); + waitTaskQueue = tqueueImpl->append(waitTaskQueue, q); +} + +TaskListPtr +BufferManager::get_available_taskList(void) +{ + TaskListPtr list, q; + + list = machineTaskList[0]; + + while (list->next) list = list->next; + + if (list->length < TASK_MAX_SIZE) { + return list; + } else { + q = tlistImpl->create(); + machineTaskList[0] = tlistImpl->append(machineTaskList[0], q); + return q; + } +} + +void +BufferManager::clear_taskList(void) +{ + TaskListPtr p, p1; + + machineTaskList[0]->length = 0; + + p = machineTaskList[0]->next; + while (p) { + p1 = p; + p = p->next; + tlistImpl->free(p1); + } +} +#endif