95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/******************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** QUEUE.H:
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**    ADT Queue Implementation
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** This file is part of Apt Abstract Data Types (ADT)
							 | 
						||
| 
								 | 
							
								** Copyright (c) 1991 -- Apt Technologies
							 | 
						||
| 
								 | 
							
								** All rights reserved
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								******************************************************************/
							 | 
						||
| 
								 | 
							
								//http://www.koders.com/c/fid7B82D8DDECE4EDC672F17D970458033C4079A615.aspx?s=queue
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								** This ADT, originally written in 1989, provides a general queue
							 | 
						||
| 
								 | 
							
								** implementation--in C--which is the equivalent of the Java Vector.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef QUEUE_H
							 | 
						||
| 
								 | 
							
								#define QUEUE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ---------- Headers */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "apt.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ---------- Types */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _QueueItem {
							 | 
						||
| 
								 | 
							
								  void *element;
							 | 
						||
| 
								 | 
							
								  int type;
							 | 
						||
| 
								 | 
							
								  struct _QueueItem *next;
							 | 
						||
| 
								 | 
							
								} _QueueItem, *QueueItem;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _Queue {
							 | 
						||
| 
								 | 
							
								  struct _QueueItem *head;
							 | 
						||
| 
								 | 
							
								  struct _QueueItem *tail;
							 | 
						||
| 
								 | 
							
								  int size;
							 | 
						||
| 
								 | 
							
								} _Queue, *Queue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ---------- Exported Function Prototypes */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __ANSI_C__
							 | 
						||
| 
								 | 
							
								void QueueApply(Queue, ApplyFunction);
							 | 
						||
| 
								 | 
							
								void QueueApply1(Queue, void*, ApplyFunction1);
							 | 
						||
| 
								 | 
							
								void QueueApply2(Queue, void*, void*, ApplyFunction2);
							 | 
						||
| 
								 | 
							
								void QueueApply3(Queue, void*, void*, void*, ApplyFunction3);
							 | 
						||
| 
								 | 
							
								void *QueueCAR(Queue);
							 | 
						||
| 
								 | 
							
								Queue QueueCDR(Queue);
							 | 
						||
| 
								 | 
							
								void QueueDispose(Queue, DisposeFunction);
							 | 
						||
| 
								 | 
							
								void *QueueFind(Queue, void*, ComparisonFunction);
							 | 
						||
| 
								 | 
							
								void *QueueFindAndRemove(Queue, void*, ComparisonFunction);
							 | 
						||
| 
								 | 
							
								void *QueueFindAndRemoveType(Queue, void*, ComparisonFunction, int);
							 | 
						||
| 
								 | 
							
								void *QueueFindType(Queue, int);
							 | 
						||
| 
								 | 
							
								void *QueueFindTypeAndRemove(Queue, int);
							 | 
						||
| 
								 | 
							
								void *QueueGet(Queue);
							 | 
						||
| 
								 | 
							
								QueueItem QueueHead(Queue);
							 | 
						||
| 
								 | 
							
								void *QueueItemElement(QueueItem);
							 | 
						||
| 
								 | 
							
								int QueueItemType(QueueItem);
							 | 
						||
| 
								 | 
							
								void *QueueLook(Queue);
							 | 
						||
| 
								 | 
							
								Queue QueueNew(void);
							 | 
						||
| 
								 | 
							
								QueueItem QueueNext(QueueItem);
							 | 
						||
| 
								 | 
							
								void QueuePut(Queue, void*, int);
							 | 
						||
| 
								 | 
							
								void QueuePutOnPriority(Queue, void*, int, ComparisonFunction);
							 | 
						||
| 
								 | 
							
								QueueItem QueueSeek(Queue,int);
							 | 
						||
| 
								 | 
							
								int QueueSize(Queue);
							 | 
						||
| 
								 | 
							
								QueueItem QueueTail(Queue);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								void QueueApply();
							 | 
						||
| 
								 | 
							
								void QueueApply1();
							 | 
						||
| 
								 | 
							
								void QueueApply2();
							 | 
						||
| 
								 | 
							
								void QueueApply3();
							 | 
						||
| 
								 | 
							
								void *QueueCAR();
							 | 
						||
| 
								 | 
							
								Queue QueueCDR();
							 | 
						||
| 
								 | 
							
								void QueueDispose();
							 | 
						||
| 
								 | 
							
								void *QueueFind();
							 | 
						||
| 
								 | 
							
								void *QueueFindAndRemove();
							 | 
						||
| 
								 | 
							
								void *QueueFindAndRemoveType();
							 | 
						||
| 
								 | 
							
								void *QueueFindType();
							 | 
						||
| 
								 | 
							
								void *QueueFindTypeAndRemove();
							 | 
						||
| 
								 | 
							
								void *QueueGet();
							 | 
						||
| 
								 | 
							
								QueueItem QueueHead();
							 | 
						||
| 
								 | 
							
								void *QueueItemElement();
							 | 
						||
| 
								 | 
							
								int QueueItemType();
							 | 
						||
| 
								 | 
							
								void *QueueLook();
							 | 
						||
| 
								 | 
							
								Queue QueueNew();
							 | 
						||
| 
								 | 
							
								QueueItem QueueNext();
							 | 
						||
| 
								 | 
							
								void QueuePut();
							 | 
						||
| 
								 | 
							
								void QueuePutOnPriority();
							 | 
						||
| 
								 | 
							
								QueueItem QueueSeek();
							 | 
						||
| 
								 | 
							
								int QueueSize();
							 | 
						||
| 
								 | 
							
								QueueItem QueueTail();
							 | 
						||
| 
								 | 
							
								#endif /* __ANSI_C__ */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* QUEUE_H */
							 |