Changes according to Brian's comments: remove static inline functions in multicorecac...
[IRC.git] / Robust / src / Runtime / Queue.h
1 #ifndef QUEUE_H
2 #define QUEUE_H
3
4 struct Queue {
5   struct QueueItem * head;
6   struct QueueItem * tail;
7 };
8
9 struct QueueItem {
10   void * objectptr;
11   struct Queue * queue;
12   struct QueueItem * next;
13   struct QueueItem * prev;
14 };
15
16 #define isEmpty(x) ((x)->head==NULL)
17
18 void initQueue(struct Queue *);
19 struct Queue * createQueue();
20 void freeQueue(struct Queue * q);
21
22 struct QueueItem * addNewItem(struct Queue * queue, void * ptr);
23 struct QueueItem * addNewItemBack(struct Queue * queue, void * ptr);
24 #ifdef MULTICORE
25 struct Queue * createQueue_I();
26 struct QueueItem * addNewItem_I(struct Queue * queue, void * ptr);
27 #endif
28
29 struct QueueItem * getTail(struct Queue * queue);
30 struct QueueItem * getHead(struct Queue * queue);
31 struct QueueItem * getNextQueueItem(struct QueueItem * qi);
32
33 struct QueueItem * findItem(struct Queue * queue, void * ptr);
34
35 void removeItem(struct Queue * queue, struct QueueItem * item);
36
37 void * getItem(struct Queue * queue);
38 void * getItemBack(struct Queue * queue);
39
40 void * peekItem(struct Queue * queue);
41 void * peekItemBack(struct Queue * queue);
42
43 void clearQueue(struct Queue * queue);
44
45
46 // for debugging, only included if macro is defined
47 #ifdef DEBUG_QUEUE
48
49 // returns 1 if queue's pointers are valid, 0 otherwise
50 int assertQueue(struct Queue * queue);
51
52 // use this to print head, tail and next, prev of each item
53 void printQueue(struct Queue * queue);
54 #endif
55
56 #endif