5 struct QueueItem * head;
6 struct QueueItem * tail;
12 struct QueueItem * next;
13 struct QueueItem * prev;
16 #define isEmpty(x) ((x)->head==NULL)
18 struct Queue * createQueue();
19 void freeQueue(struct Queue * q);
21 struct QueueItem * addNewItem(struct Queue * queue, void * ptr);
22 struct QueueItem * addNewItemBack(struct Queue * queue, void * ptr);
24 struct Queue * createQueue_I();
25 struct QueueItem * addNewItem_I(struct Queue * queue, void * ptr);
28 struct QueueItem * getTail(struct Queue * queue);
29 struct QueueItem * getHead(struct Queue * queue);
30 struct QueueItem * getNextQueueItem(struct QueueItem * qi);
32 struct QueueItem * findItem(struct Queue * queue, void * ptr);
34 void removeItem(struct Queue * queue, struct QueueItem * item);
36 void * getItem(struct Queue * queue);
37 void * getItemBack(struct Queue * queue);
39 void * peekItem(struct Queue * queue);
40 void * peekItemBack(struct Queue * queue);
42 void clearQueue(struct Queue * queue);
45 // for debugging, only included if macro is defined
48 // returns 1 if queue's pointers are valid, 0 otherwise
49 int assertQueue(struct Queue * queue);
51 // use this to print head, tail and next, prev of each item
52 void printQueue(struct Queue * queue);