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