5 #include "intproto.h"
\r
8 /* Queue management */
\r
9 /* Single linked circular lists with queue represented as pointer to rear */
\r
11 queue qinit() /* Initialize empty queue */
\r
17 stack push(q, e) /* Insert element into the queue */
\r
23 p = (stack) ballocate(sizeof(struct queuelem));
\r
24 if (p == NULL) errsignal(RTEMEMOV);
\r
28 p->next = p; /* the lonely element of the queue */
\r
33 p->next = q->next; /* insert at rear */
\r
40 qelem qfront(q) /* Get first element of the queue */
\r
44 fprintf( stderr, "getting first element from empty queue\n");
\r
45 errsignal(RTESYSER);
\r
47 return (q->next->elem);
\r
51 queue qremove(q) /* Remove front element from the queue */
\r
57 fprintf( stderr, "removing first element from empty queue\n");
\r
58 errsignal(RTESYSER);
\r
61 q->next = q->next->next;
\r
62 if (p == q) q = NULL; /* removing last element of the queue */
\r
68 queue qdelete(q, e) /* Delete arbitrary element */
\r
74 if (qempty(q)) return(q);
\r
77 while (p->elem != e)
\r
79 if (p == q) return(q);
\r
84 if (r == p) s = NULL;
\r
93 queue qrotate(q) /* Remove front and insert at rear */
\r
97 fprintf( stderr, "rotating empty queue\n");
\r
98 errsignal(RTESYSER);
\r
101 } /* end qrotate */
\r