1
0
Files
irix-657m-src/irix/lib/klib/include/queue.h
2022-09-29 17:59:04 +03:00

63 lines
1.9 KiB
C

#ident "$Header: "
/* List element header
*/
typedef struct element_s {
struct element_s *next;
struct element_s *prev;
} element_t;
/* Some useful macros
*/
#define ENQUEUE(list, elem) enqueue((element_t **)list, (element_t *)elem)
#define DEQUEUE(list) dequeue((element_t **)list)
#define FINDQUEUE(list, elem) findqueue((element_t **)list, (element_t *)elem)
#define REMQUEUE(list, elem) remqueue((element_t **)list, (element_t *)elem)
typedef struct list_of_ptrs {
element_t elem;
unsigned long long val64;
} list_of_ptrs_t;
#define FINDLIST_QUEUE(list, elem, compare) \
findlist_queue((list_of_ptrs_t **)list, (list_of_ptrs_t *)elem, compare)
/**
** Function prototypes
**/
/* Add a new element to the tail of a doubly linked list.
*/
void kl_enqueue(
element_t** /* pointer to head of list */,
element_t* /* pointer to element to add to the list */);
/* Remove an element from the head of a doubly linked list. A pointer
* to the element will be returned. In the event that the list is
* empty, a NULL pointer will be returned.
*/
element_t *kl_dequeue(
element_t** /* pointer to head of list (first item will be removed) */);
/* Checks to see if a particular element is in a list. If it is, a
* value of one (1) will be returned. Otherwise, a value of zero (0)
* will be returned.
*/
int kl_findqueue(
element_t** /* pointer to head of list */,
element_t* /* pointer to element to find on list */);
/* Walks through a list of pointers to queues and looks for a
* particular list.
*/
int findlist_queue(
list_of_ptrs_t** /* pointer to list of lists */,
list_of_ptrs_t* /* pointer to list to look for */,
int(*)() /* pointer to compare function */);
/* Remove specified element from doubly linked list.
*/
void kl_remqueue(
element_t** /*pointer to head of list */,
element_t* /* pointer to element to remove from list */);