diff options
Diffstat (limited to 'support/tools/Burg/queue.c')
-rw-r--r-- | support/tools/Burg/queue.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/support/tools/Burg/queue.c b/support/tools/Burg/queue.c new file mode 100644 index 0000000000..76e5ea9b57 --- /dev/null +++ b/support/tools/Burg/queue.c @@ -0,0 +1,64 @@ +char rcsid_queue[] = "$Id$"; + +#include "b.h" +#include <stdio.h> + +Queue globalQ; + +Queue +newQ() +{ + Queue q; + + q = (Queue) zalloc(sizeof(struct queue)); + assert(q); + q->head = 0; + q->tail = 0; + + return q; +} + +void +addQ(q, ts) Queue q; Item_Set ts; +{ + List qe; + + assert(q); + assert(ts); + + qe = newList(ts, 0); + if (q->head) { + assert(q->tail); + q->tail->next = qe; + q->tail = qe; + } else { + q->head = q->tail = qe; + } +} + +Item_Set +popQ(q) Queue q; +{ + List qe; + Item_Set ts; + + assert(q); + + if (q->head) { + qe = q->head; + q->head = q->head->next; + ts = (Item_Set) qe->x; + zfree(qe); + return ts; + } else { + return 0; + } +} + +void +dumpQ(q) Queue q; +{ + printf("Begin Queue\n"); + foreachList((ListFn)dumpItem_Set, q->head); + printf("End Queue\n"); +} |