72 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "top.h"
 | |
| #include "queue.h"
 | |
| 
 | |
| empty_queue(q)
 | |
| 	queue q;
 | |
| {
 | |
| 	q->head = q->tail = (instr_p) 0;
 | |
| 	q->qlen = 0;
 | |
| }
 | |
| 
 | |
| int empty(q)
 | |
| 	queue q;
 | |
| {
 | |
| 	return q->qlen == 0;
 | |
| }
 | |
| 
 | |
| remove_head(q)
 | |
| 	queue q;
 | |
| {
 | |
| 	if ( (q->head = q->head->fw) == (instr_p) 0) {
 | |
| 		q->tail = (instr_p) 0;
 | |
| 	} else {
 | |
| 		q->head->bw = (instr_p) 0;
 | |
| 	}
 | |
| 	q->qlen--;
 | |
| }
 | |
| 
 | |
| add(q,instr)
 | |
| 	register queue q;
 | |
| 	register instr_p instr;
 | |
| {
 | |
| 	if (q->qlen++ == 0) {
 | |
| 		q->head = q->tail = instr;
 | |
| 		instr->bw = (instr_p) 0;
 | |
| 	} else {
 | |
| 		q->tail->fw = instr;
 | |
| 		instr->bw = q->tail;
 | |
| 		q->tail = instr;
 | |
| 	}
 | |
| 	instr->fw = (instr_p) 0;
 | |
| }
 | |
| 
 | |
| insert(q,instr)
 | |
| 	queue q;
 | |
| 	instr_p instr;
 | |
| {
 | |
| 	if (q->qlen++ == 0) {
 | |
| 		q->head = q->tail = instr;
 | |
| 		instr->fw = (instr_p) 0;
 | |
| 	} else {
 | |
| 		q->head->bw = instr;
 | |
| 		instr->fw = q->head;
 | |
| 		q->head = instr;
 | |
| 	}
 | |
| 	instr->bw = (instr_p) 0;
 | |
| }
 | |
| 
 | |
| join_queues(q1,q2)
 | |
| 	queue q1,q2;
 | |
| {
 | |
| 	if (q1->qlen > 0) {
 | |
| 		q2->qlen += q1->qlen;
 | |
| 		q1->tail->fw = q2->head;
 | |
| 		if (q2->qlen > 0) {
 | |
| 			q2->head->bw = q1->tail;
 | |
| 		} else {
 | |
| 			q2->tail = q1->tail;
 | |
| 		}
 | |
| 		q2->head = q1->head;
 | |
| 		empty_queue(q1);
 | |
| 	}
 | |
| }
 |