view TaskManager/Fifo/FifoTaskInfo.cc @ 20:31a7ff27ee20

*** empty log message ***
author gongo
date Sun, 10 Feb 2008 13:46:26 +0900
parents 7aa4c006e4be
children
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include "FifoTaskInfo.h"

int
FifoTaskInfo::extend_pool_taskList(int num)
{
    TaskListPtr q = NULL;

    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 */
    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[0];

    while (list->next) list = list->next;

    if (list->length < TASK_MAX_SIZE) {
	return list;
    } else {
	q = get_free_taskList();
	machineTaskList[0] = append_taskList(machineTaskList[0], q);
	return q;
    }
}

void
FifoTaskInfo::clear_taskList(void)
{
    TaskListPtr p, p1;

    machineTaskList[0]->length = 0;

    p = machineTaskList[0]->next;
    while (p) {
	p1 = p;
	p = p->next;
	free_taskList(p1);
    }
}