/*     
 * $RCSfile: xk_queue.h,v $
 *
 * x-kernel v3.3
 *
 * Copyright (c) 1993,1991,1990,1996  Arizona Board of Regents
 *
 * $Log: xk_queue.h,v $
 * Revision 1.1  1997/03/11  20:47:08  dorgival
 * Initial revision
 *
 * Revision 1.1  1997/03/11 20:47:08  dorgival
 * Initial revision
 *
 *
 */

#ifndef __queue_h__
#define __queue_h__

/*
 * This module provides a general queueing service if producers and
 * consumers operate synchronously (i.e., under control of
 * scout_thread.c).
 */

typedef struct Queue *		Queue;
typedef struct QueueEl *	QueueEl;

struct QueueEl {
    QueueEl	next;
};

struct Queue {
    QueueEl	head;
    QueueEl	tail;
};

extern void	queueInit (Queue q);
extern void	queueAppend (Queue q, void * element);
extern void	queueInsert (Queue q, void * after, void * element);
extern void *	queueRemove (Queue q);
extern void	queueDelete (Queue q, void * after);
extern QueueEl	queueHead (Queue q);
extern QueueEl	queueTail (Queue q);

#define queueHead( q ) ((q)->head)
#define queueTail( q ) ((q)->tail)

#endif /* __queue_h__ */
