Mercurial > hg > Members > kent > CbCTaskManager
view TaskQueue.c @ 2:803d6bf22e6d default tip
second commit.
it's far to complete..
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Dec 2009 16:19:56 +0900 |
parents | 5b089096921f |
children |
line wrap: on
line source
#include <stdlib.h> // TODO: malloc #include "List.h" #include "Queue.h" typedef struct _Queue { List *head; List *tail; int length; } Queue; Queue * newQueue() { Queue *queue; malloc(sizeof(struct _Queue)); queue->head = NULL; queue->tail = NULL; queue->length = 0; return queue; } void _QaddFirst(Queue *queue, void *) { List *oldhead = queue->head; List *newlist; newlist = malloc(sizeof(struct _List)); if (oldhead) { oldhead->prev = newlist; } newlist->next = oldhead; newlist->prev = NULL; queue->head = newlist; queue->length++; return ; } void _QaddLast(Queue *queue, void *task) { List *oldtail = queue->tail; List *newlist; newlist = malloc(sizeof(struct _List)); if (oldtail) { oldtail->next = newlist; } newlist->next = NULL; newlist->prev = oldtail; queue->tail = newlist; queue->length++; return ; } void * _QpollFirst(Queue *queue) { List *first = queue->head; List *second; void *task; if (!first) return NULL; second = first->next; task = first->task; free(first); second->prev = NULL; queue->head = second; queue->length--; return task; } void * _QpollLast(Queue *queue) { List *first = queue->tail; List *second; void *task; if (!first) return NULL; second = first->prev; task = first->task; free(first); second->next = NULL; queue->tail = second; queue->length--; return task; }