This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 #include "mem.h"
2 #include "Queue.h"
3 #ifdef DMALLOC
4 #include "dmalloc.h"
5 #endif
6
7 struct Queue * createQueue() {
8   struct Queue * queue = (struct Queue *)RUNMALLOC(sizeof(struct Queue));
9   queue->head = NULL;
10   queue->tail = NULL;
11   return queue;
12 }
13
14 void freeQueue(struct Queue * q) {
15   RUNFREE(q);
16 }
17
18 int isEmpty(struct Queue *queue) {
19   return queue->head==NULL;
20 }
21
22 struct QueueItem * addNewItem(struct Queue * queue, void * ptr) {
23   struct QueueItem * item=RUNMALLOC(sizeof(struct QueueItem));
24   item->objectptr=ptr;
25   item->queue=queue;
26   if (queue->head==NULL) {
27     queue->head=item;
28     queue->tail=item;
29   } else {
30     item->next=queue->head;
31     queue->head->prev=item;
32     queue->head=item;
33   }
34   return item;
35 }
36
37 #ifdef RAW
38 struct QueueItem * addNewItem_I(struct Queue * queue, void * ptr) {
39   struct QueueItem * item=RUNMALLOC_I(sizeof(struct QueueItem));
40   item->objectptr=ptr;
41   item->queue=queue;
42   if (queue->head==NULL) {
43     queue->head=item;
44     queue->tail=item;
45   } else {
46     item->next=queue->head;
47     queue->head->prev=item;
48     queue->head=item;
49   }
50   return item;
51 }
52 #endif
53
54 struct QueueItem * findItem(struct Queue * queue, void *ptr) {
55   struct QueueItem * item=queue->head;
56   while(item!=NULL) {
57     if (item->objectptr==ptr)
58       return item;
59     item=item->next;
60   }
61   return NULL;
62 }
63
64 void removeItem(struct Queue * queue, struct QueueItem * item) {
65   struct QueueItem * prev=item->prev;
66   struct QueueItem * next=item->next;
67   if (queue->head==item)
68     queue->head=next;
69   else
70     prev->next=next;
71   if (queue->tail==item)
72     queue->tail=prev;
73   else
74     next->prev=prev;
75   RUNFREE(item);
76 }
77
78 struct QueueItem * getTail(struct Queue * queue) {
79   return queue->tail;
80 }
81
82 struct QueueItem * getNext(struct QueueItem * qi) {
83   return qi->next;
84 }