view include/TaskManager/TaskInfo.h @ 42:aa11038dbdc1

*** empty log message ***
author gongo
date Thu, 14 Feb 2008 18:27:37 +0900
parents 31a7ff27ee20
children 494a19b053c5
line wrap: on
line source

#ifndef INCLUDED_TASK_INFO
#define INCLUDED_TASK_INFO

#ifndef INCLUDED_TASK
#  include "task.h"
#endif

class TaskInfo {
public:
    /* constructor */
    TaskInfo(int num = 1);
    virtual ~TaskInfo(void);
    
    /* variables */
    TaskListPtr taskListPool;
    TaskListPtr freeTaskList;
    
    TaskQueuePtr taskQueuePool;
    TaskQueuePtr freeTaskQueue;
    TaskQueuePtr waitTaskQueue;
    TaskQueuePtr activeTaskQueue;

    HTaskPtr taskPool;
    HTaskPtr freeTask;

    TaskListPtr *machineTaskList;

    /* function */
    void init(void);

    // task list
    int init_taskList(int num);
    virtual int extend_pool_taskList(int num) = 0;
    virtual TaskListPtr get_available_taskList(void) = 0;
    TaskListPtr get_free_taskList(void);

    // task queue
    int init_taskQueue(int num);
    TaskQueuePtr get_free_taskQueue(HTaskPtr);
    int extend_pool_taskQueue(int num);

    // task
    int init_task(int num);
    int extend_pool_task(int num);
    HTaskPtr get_free_task(int cmd, int size,
			  unsigned long long in_addr,
			  unsigned long long out_addr);

    void finish(void);
    void destroy_taskList(void);
    void destroy_taskQueue(void);
    void destroy_task(void);

    virtual void clear_taskList(void) = 0;

    virtual void append_activeTask(HTaskPtr);
    virtual void append_waitTask(HTaskPtr);

    void free_taskList(TaskListPtr q);
    void free_taskQueue(TaskQueuePtr q);
    void free_task(HTaskPtr q);

    void check_task_finish(HTaskPtr task);
    void notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list);
    TaskQueuePtr remove_taskQueue(TaskQueuePtr list, TaskQueuePtr task);
    TaskQueuePtr remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task);

private:
    int machineNum;
};

extern TaskQueuePtr append_taskQueue(TaskQueuePtr, TaskQueuePtr);
extern TaskListPtr append_taskList(TaskListPtr list, TaskListPtr q);

#endif