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);