view TaskManager/kernel/schedule/TaskGroup.cc @ 499:eacbcdb23986

still fixing...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 11 Oct 2009 15:42:00 +0900
parents 0b933bef0328
children 14428eda75ba
line wrap: on
line source

#include "TaskGroup.h"
#include <stdlib.h>

void
TaskGroup::add(TaskPtr add_task) {
    struct groupQueue *q = (struct groupQueue *)malloc(sizeof(struct groupQueue));
    q->next = group;
    group = q;
}

void
TaskGroup::remove(TaskPtr delete_task) {
    struct groupQueue * p = group;
    struct groupQueue * p1;

    if (p == NULL) return;

    if (p->task == delete_task) {
	group = group->next;
	free( p);
    } else {
	p1 = p->next;
	while (p1 && p1->task != delete_task) {
	    p1 = p1->next;
	    p = p->next;
	}
	if (p1) {
	    p->next = p1->next;
	    free( p1);
	}
    }
}

/**
 * 自分が持つ TaskGroup に Task が残っていれば NULL を返す。
 * もう全てのタスクが終了していれば、この TaskGroup を作った
 * (一番最初にタスク内タスク生成を行った)タスクが PPE に返すべきだった
 * command を返す。
 */
unsigned int
TaskGroup::status() {
    /**                                                                     
     * bool の                                                              
     *  true == 1;                                                          
     *  false == 0;                                                         
     * って保証されてるんだっけ?                                           
     */
#if 1
    return (group == NULL) * command;
#else
    if (group.empty()) {
	return command;
    } else {
	return 0;
    }
#endif
}