Mercurial > hg > Members > kent > CbCTaskManager
view TaskQueue.c @ 0:5b089096921f
first commit.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Dec 2009 21:57:05 +0900 |
parents | |
children | 803d6bf22e6d |
line wrap: on
line source
#include"TaskList.h" typedef struct _TaskQueue { TaskList *head; TaskList *tail; int length; } TaskQueue; TaskQueue * newTaskQueue() { TaskQueue *queue; /* TODO: mallocはあとで独自実装に書き直し! */ malloc(sizeof(struct _TaskQueue)); queue->head = NULL; queue->tail = NULL; queue->length = 0; return queue; } void queueAddFirst(TaskQueue *queue, Task *) { TaskList *oldhead = queue->head; TaskList *newlist; newlist = malloc(sizeof(struct _TaskList)); if (oldhead) { oldhead->prev = newlist; } newlist->next = oldhead; newlist->prev = NULL; queue->head = newlist; queue->length++; return ; } void queueAddLast(TaskQueue *queue, Task *task) { TaskList *oldtail = queue->tail; TaskList *newlist; newlist = malloc(sizeof(struct _TaskList)); if (oldtail) { oldtail->next = newlist; } newlist->next = NULL; newlist->prev = oldtail; queue->tail = newlist; queue->length++; return ; } Task * queuePollFirst(TaskQueue *queue) { TaskList *first = queue->head; TaskList *second; Task *task; if (!first) return NULL; second = first->next; task = first->task; free(first); second->prev = NULL; queue->head = second; queue->length--; return task; } Task * queuePollLast(TaskQueue *queue) { TaskList *first = queue->tail; TaskList *second; Task *task; if (!first) return NULL; second = first->prev; task = first->task; free(first); second->next = NULL; queue->tail = second; queue->length--; return task; }