/*****************************************************************************
* Definitions, visible to others, of Priority Queue module:			  *
*****************************************************************************/

#ifndef PRIOR_Q_GH
#define PRIOR_Q_GH

typedef struct PriorQue
	{
	struct PriorQue *Right, *Left;	/* Pointers to two sons of this node. */
	void * Data;				  /* Pointers to the data itself. */
	} PriorQue;

typedef int (*PQCompFuncType)( void *, void *);	  /* Comparison function. */

/* And global function prototypes: */
void PQInit(PriorQue **PQ);
int PQEmpty(PriorQue *PQ);
void PQCompFunc(PQCompFuncType NewCompFunc);
void * PQFirst(PriorQue **PQ, int Delete);
void * PQInsert(PriorQue **PQ, void * NewItem);
void * PQDelete(PriorQue **PQ, void * NewItem);
void * PQFind(PriorQue *PQ, void * OldItem);
void * PQNext(PriorQue *PQ, void * CmpItem, void * BiggerThan);
void PQPrint(PriorQue *PQ, void (*PrintFunc)());
void PQFree(PriorQue *PQ, int FreeItems);
void PQFreeFunc(PriorQue *PQ, void (*FreeFunc)(void *));

#endif /* PRIOR_Q_GH */