Mercurial > hg > Members > kono > Cerium
view TaskManager/Fifo/FifoTaskInfo.cc @ 3:2356238ebea7
*** empty log message ***
author | gongo |
---|---|
date | Tue, 05 Feb 2008 20:22:50 +0900 |
parents | |
children | 75f184d16fa5 |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include "FifoTaskInfo.h" void FifoTaskInfo::init(void) { init_pool_taskQueue(TASK_MAX_SIZE*4); init_pool_task(TASK_MAX_SIZE*2); init_pool_taskList(2); machineTaskList = get_free_taskList(); } int FifoTaskInfo::extend_pool_taskList(int num) { TaskListPtr q; q = (TaskListPtr)malloc(sizeof(TaskList)*(num+1)); if (q == NULL) { return -1; } q->next = taskListPool; taskListPool = q; /* Connect all free pack_list in the pool */ q = taskListPool + 1; for (q = taskListPool + 1; num-- > 0; q++) { q->next = q + 1; } q->next = freeTaskList; freeTaskList = taskListPool + 1; return 0; } TaskListPtr FifoTaskInfo::get_available_taskList(void) { TaskListPtr list, q; list = machineTaskList; while (list->next) list = list->next; if (list->length < TASK_MAX_SIZE) { return list; } else { q = get_free_taskList(); machineTaskList = append_taskList(machineTaskList, q); return q; } } void FifoTaskInfo::clear_taskList(void) { TaskListPtr p, p1; machineTaskList->length = 0; p = machineTaskList->next; while (p) { p1 = p; p = p->next; free_taskList(p1); } }