view TaskManager/kernel/schedule/TaskGroup.cc @ 483:0b933bef0328

renew task worked. but not test_nogl...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 05 Oct 2009 20:29:28 +0900
parents 5bda98b0b56d
children eacbcdb23986
line wrap: on
line source

#include "TaskGroup.h"

void
TaskGroup::add(TaskPtr add_task) {
    TaskQueuePtr q = new TaskQueue(add_task);
    group = TaskQueue::append(group, q);
}

void
TaskGroup::remove(TaskPtr delete_task) {
    TaskQueuePtr p = group;
    TaskQueuePtr p1;

    if (p == NULL) return;

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

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