Pristine Ack-5.5
[Ack-5.5.git] / mach / proto / top / queue.c
1 /* $Id: queue.c,v 1.5 1994/06/24 13:28:57 ceriel Exp $ */
2 /*
3  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
4  * See the copyright notice in the ACK home directory, in the file "Copyright".
5  */
6 #include "top.h"
7 #include "queue.h"
8
9 empty_queue(q)
10         register queue q;
11 {
12         q->head = q->tail = (instr_p) 0;
13         q->qlen = 0;
14 }
15
16 int empty(q)
17         queue q;
18 {
19         return q->qlen == 0;
20 }
21
22 remove_head(q)
23         register queue q;
24 {
25         if ( (q->head = q->head->fw) == (instr_p) 0) {
26                 q->tail = (instr_p) 0;
27         } else {
28                 q->head->bw = (instr_p) 0;
29         }
30         q->qlen--;
31 }
32
33 add(q,instr)
34         register queue q;
35         register instr_p instr;
36 {
37         if (q->qlen++ == 0) {
38                 q->head = q->tail = instr;
39                 instr->bw = (instr_p) 0;
40         } else {
41                 q->tail->fw = instr;
42                 instr->bw = q->tail;
43                 q->tail = instr;
44         }
45         instr->fw = (instr_p) 0;
46 }
47
48 insert(q,instr)
49         register queue q;
50         register instr_p instr;
51 {
52         if (q->qlen++ == 0) {
53                 q->head = q->tail = instr;
54                 instr->fw = (instr_p) 0;
55         } else {
56                 q->head->bw = instr;
57                 instr->fw = q->head;
58                 q->head = instr;
59         }
60         instr->bw = (instr_p) 0;
61 }
62
63 join_queues(q1,q2)
64         register queue q1,q2;
65 {
66         if (q1->qlen > 0) {
67                 q2->qlen += q1->qlen;
68                 q1->tail->fw = q2->head;
69                 if (q2->qlen > 0) {
70                         q2->head->bw = q1->tail;
71                 } else {
72                         q2->tail = q1->tail;
73                 }
74                 q2->head = q1->head;
75                 empty_queue(q1);
76         }
77 }