bug fixes
[IRC.git] / Robust / src / Runtime / Queue.c
1 #include "mem.h"
2 #include "Queue.h"
3 #ifdef DMALLOC
4 #include "dmalloc.h"
5 #endif
6
7 struct Queue * createQueue() {
8   return RUNMALLOC(sizeof(struct Queue));
9 }
10
11 void freeQueue(struct Queue * q) {
12   RUNFREE(q);
13 }
14
15 int isEmpty(struct Queue *queue) {
16   return queue->head==NULL;
17 }
18
19 struct QueueItem * addNewItem(struct Queue * queue, void * ptr) {
20   struct QueueItem * item=RUNMALLOC(sizeof(struct QueueItem));
21   item->objectptr=ptr;
22   item->queue=queue;
23   if (queue->head==NULL) {
24     queue->head=item;
25     queue->tail=item;
26   } else {
27     item->next=queue->head;
28     queue->head->prev=item;
29     queue->head=item;
30   }
31   return item;
32 }
33
34 struct QueueItem * findItem(struct Queue * queue, void *ptr) {
35   struct QueueItem * item=queue->head;
36   while(item!=NULL) {
37     if (item->objectptr==ptr)
38       return item;
39     item=item->next;
40   }
41   return NULL;
42 }
43
44 void removeItem(struct Queue * queue, struct QueueItem * item) {
45   struct QueueItem * prev=item->prev;
46   struct QueueItem * next=item->next;
47   if (queue->head==item)
48     queue->head=next;
49   else
50     prev->next=next;
51   if (queue->tail==item)
52     queue->tail=prev;
53   else
54     next->prev=prev;
55   RUNFREE(item);
56 }
57
58 struct QueueItem * getTail(struct Queue * queue) {
59   return queue->tail;
60 }
61
62 struct QueueItem * getNext(struct QueueItem * qi) {
63   return qi->next;
64 }