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 struct QueueItem * addNewItem(struct Queue * queue, void * ptr) {
19   struct QueueItem * item=RUNMALLOC(sizeof(struct QueueItem));
20   item->objectptr=ptr;
21   item->queue=queue;
22   if (queue->head==NULL) {
23     queue->head=item;
24     queue->tail=item;
25   } else {
26     item->next=queue->head;
27     queue->head->prev=item;
28     queue->head=item;
29   }
30   return item;
31 }
32
33 #ifdef RAW
34 struct QueueItem * addNewItem_I(struct Queue * queue, void * ptr) {
35   struct QueueItem * item=RUNMALLOC_I(sizeof(struct QueueItem));
36   item->objectptr=ptr;
37   item->queue=queue;
38   if (queue->head==NULL) {
39     queue->head=item;
40     queue->tail=item;
41   } else {
42     item->next=queue->head;
43     queue->head->prev=item;
44     queue->head=item;
45   }
46   return item;
47 }
48 #endif
49
50 struct QueueItem * findItem(struct Queue * queue, void *ptr) {
51   struct QueueItem * item=queue->head;
52   while(item!=NULL) {
53     if (item->objectptr==ptr)
54       return item;
55     item=item->next;
56   }
57   return NULL;
58 }
59
60 void removeItem(struct Queue * queue, struct QueueItem * item) {
61   struct QueueItem * prev=item->prev;
62   struct QueueItem * next=item->next;
63   if (queue->head==item)
64     queue->head=next;
65   else
66     prev->next=next;
67   if (queue->tail==item)
68     queue->tail=prev;
69   else
70     next->prev=prev;
71   RUNFREE(item);
72 }
73
74 struct QueueItem * getTail(struct Queue * queue) {
75   return queue->tail;
76 }
77
78 struct QueueItem * getNext(struct QueueItem * qi) {
79   return qi->next;
80 }
81
82 void * getItem(struct Queue * queue) {
83   struct QueueItem * q=queue->head;
84   void * ptr=q->objectptr;
85   queue->head=q->next;
86   RUNFREE(q);
87   return ptr;
88 }