Mercurial > hg > Members > kent > CbCTaskManager
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 |