11 typedef struct _Queue {
12 Id *elements; // current elements
13 int count; // current number of elements (minimal size for elements pointer)
14 Id *alloc; // this is whats actually allocated, elements > alloc if shifted
15 int left; // space left in alloc *after* elements+count
20 #define QUEUEEMPTY(q) ((q)->alloc ? ((q)->left += ((q)->elements - (q)->alloc) + (q)->count, (q)->elements = (q)->alloc, (q)->count = 0) : ((q)->left += (q)->count, (q)->count = 0))
22 extern void clonequeue(Queue *t, Queue *s);
23 extern void queueinit(Queue *q);
24 extern void queueinit_buffer(Queue *q, Id *buf, int size);
25 extern void queuefree(Queue *q);
26 extern Id queueshift(Queue *q);
27 extern void queuepush(Queue *q, Id id);
28 extern void queuepushunique(Queue *q, Id id);