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