Mercurial > hg > Game > Cerium
view TaskManager/Cell/CellBufferManager.cc @ 65:519d24aa7ac8
*** empty log message ***
author | gongo |
---|---|
date | Sun, 17 Feb 2008 18:06:53 +0900 |
parents | 54355e641172 |
children | 178459e03f5c |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include "CellBufferManager.h" #include "CellTaskListInfo.h" void CellBufferManager::init(void) { BufferManager::init(); cellTaskListImpl = new CellTaskListInfo; machineTaskList = new TaskListPtr[machineNum]; for (int i = 0; i < machineNum; i++) { machineTaskList[i] = cellTaskListImpl->create(); } } /** * task の cpu type によって * それぞれの cpu に対応する active queue に task を追加する。 */ void CellBufferManager::append_activeTask(HTaskPtr task) { TaskQueuePtr q; q = taskQueueImpl->create(task); if (task->cpu_type == CPU_PPE) { activeTaskQueue = TaskQueueInfo::append(activeTaskQueue, q); } else { speActiveTaskQueue = TaskQueueInfo::append(speActiveTaskQueue, q); } } #if 0 // 継承するかもしれないので保存 void CellBufferManager::append_waitTask(HTaskPtr task) { TaskQueuePtr q; q = taskQueueImpl->create(task); waitTaskQueue = taskQueueImpl->append(waitTaskQueue, q); } TaskListPtr CellBufferManager::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 = cellTaskListImpl->create(); machineTaskList[0] = cellTaskListImpl->append(machineTaskList[0], q); return q; } } void CellBufferManager::clear_taskList(void) { TaskListPtr p, p1; machineTaskList[0]->length = 0; p = machineTaskList[0]->next; while (p) { p1 = p; p = p->next; cellTaskListImpl->free(p1); } } #endif