comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:5b089096921f
1 #include"TaskList.h"
2
3 typedef struct _TaskQueue {
4 TaskList *head;
5 TaskList *tail;
6 int length;
7 } TaskQueue;
8
9 TaskQueue *
10 newTaskQueue()
11 {
12 TaskQueue *queue;
13 /* TODO: mallocはあとで独自実装に書き直し! */
14 malloc(sizeof(struct _TaskQueue));
15 queue->head = NULL;
16 queue->tail = NULL;
17 queue->length = 0;
18 return queue;
19 }
20
21 void
22 queueAddFirst(TaskQueue *queue, Task *)
23 {
24 TaskList *oldhead = queue->head;
25 TaskList *newlist;
26 newlist = malloc(sizeof(struct _TaskList));
27
28 if (oldhead) {
29 oldhead->prev = newlist;
30 }
31 newlist->next = oldhead;
32 newlist->prev = NULL;
33 queue->head = newlist;
34 queue->length++;
35 return ;
36 }
37
38 void
39 queueAddLast(TaskQueue *queue, Task *task)
40 {
41 TaskList *oldtail = queue->tail;
42 TaskList *newlist;
43 newlist = malloc(sizeof(struct _TaskList));
44
45 if (oldtail) {
46 oldtail->next = newlist;
47 }
48 newlist->next = NULL;
49 newlist->prev = oldtail;
50 queue->tail = newlist;
51 queue->length++;
52 return ;
53 }
54
55 Task *
56 queuePollFirst(TaskQueue *queue)
57 {
58 TaskList *first = queue->head;
59 TaskList *second;
60 Task *task;
61 if (!first) return NULL;
62
63 second = first->next;
64 task = first->task;
65 free(first);
66
67 second->prev = NULL;
68 queue->head = second;
69 queue->length--;
70 return task;
71 }
72
73 Task *
74 queuePollLast(TaskQueue *queue)
75 {
76 TaskList *first = queue->tail;
77 TaskList *second;
78 Task *task;
79 if (!first) return NULL;
80
81 second = first->prev;
82 task = first->task;
83 free(first);
84
85 second->next = NULL;
86 queue->tail = second;
87 queue->length--;
88 return task;
89 }
90
91
92