Added upstream version.
[vlp.git] / int / queue.h
1 /* Header for queue management module */
2
3 typedef lword qelem;
4 typedef qelem selem;
5 struct queuelem { qelem elem;
6                   struct queuelem *next;
7                 };
8 typedef struct queuelem *queue;
9 typedef queue stack;
10
11 #ifndef NO_PROTOTYPES
12 queue qinit(void);
13 stack push(stack,selem);
14 qelem qfront(queue);
15 queue qremove(queue);
16 queue qdelete(queue,qelem);
17 queue qrotate(queue);
18 void qfree(queue);
19 #else
20 queue qinit();
21 stack push();
22 qelem qfront();
23 queue qremove();
24 queue qdelete();
25 queue qrotate();
26 void qfree();
27 #endif
28
29 #define qinsert(q, e)   (((queue) push((stack) (q), (selem) (e)))->next)
30 #define qempty(q)       ((q) == NULL)
31 #define pinsert(q, p)   (qinsert(q, (qelem) (p)))
32 #define pfront(q)       ((word) qfront(q))
33 #define minsert(q, m)   (qinsert(q, (qelem) (m)))
34 #define mfront(q)       ((message *) qfront(q))
35 #define mdelete(q, m)   (qdelete(q, (qelem) (m)))
36 #define mpush(q, m)     ((queue) push((stack) q, (selem) m))
37 #define sfree(s)        qfree((queue) s)
38 #define sinit           qinit
39 #define pop(s)          ((stack) qremove((queue) s))
40 #define top(s)          ((selem) qfront((queue) s))