/*
 * scout_queue.h
 *
 * x-kernel v3.3
 *
 * Copyright (c) 1993,1991,1990,1996  Arizona Board of Regents
 *
 * $RCSfile: scout_queue.h,v $
 *
 * HISTORY
 * $Log: scout_queue.h,v $
 * Revision 1.3  1996/02/01 15:18:54  slm
 * Updated copyright and version.
 *
 * Revision 1.2  1995/08/28  16:12:53  acb
 * Initial revision for x3.3
 *
 * Revision 1.1  1994/10/26  20:17:36  hkaram
 * Initial revision
 */
#ifndef scout_queue_h
#define scout_queue_h

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

typedef struct {
    struct scout_queue_link *head;
    struct scout_queue_link *tail;
} Scout_Queue;

#define scout_queue_head(q)	((q)->head)
#define scout_queue_tail(q)	((q)->tail)

extern void	scout_queue_init (Scout_Queue *q);
extern void	scout_queue_append (Scout_Queue *q, void *element);
extern void	scout_queue_insert (Scout_Queue *q,
				    void *after, void *element);
extern void	*scout_queue_remove (Scout_Queue *q);
extern void	scout_queue_delete (Scout_Queue *q, void *after);

#endif /* scout_queue_h */
