/* ARISA - simple pointer queue, structures and function prototypes */ /* Copyright (C) 2003 Carl Ritson */ #define _ARISA_PQUEUE_H /* Structures */ typedef struct pqueueb_t { void *ptr; struct pqueueb_t *next; } pqueueb_t; typedef struct pqueue_t { lock_t *lock; int fd; // notification file descriptor pqueueb_t *front; pqueueb_t *back; unsigned int length; } pqueue_t; /* Functions */ pqueue_t *pqueue_init(pqueue_t *q, int lockable); void pqueue_clear(pqueue_t *q, void (*ptrfree)(void *), int doclose); void pqueue_deinit(pqueue_t *q, void (*ptrfree)(void *), int doclose); void pqueue_free(pqueue_t *q, void (*ptrfree)(void *)); void pqueue_push_front(pqueue_t *q, void *ptr); void pqueue_push_back(pqueue_t *q, void *ptr); void *pqueue_pop_front(pqueue_t *q); void *pqueue_pop_back(pqueue_t *q); unsigned int pqueue_length(pqueue_t *q); void pqueue_set_notification_fd(pqueue_t *q, int fd);