0
|
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
|