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);
    }
}