d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The information contained in this file is confidential and proprietary to
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * ZNK Corporation. No part of this file may be reproduced or distributed,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * in any form or by any means for any purpose, without the express written
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * permission of ZNK Corporation.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * (c) COPYRIGHT 1998 ZNK Corporation, ALL RIGHTS RESERVED.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Single link list routines:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_init (s_list_t *, *head, *tail, cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_clear (s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_push_head (s_list_t *, s_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * s_list_entry_t * s_list_pop_head (s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_push_tail (s_list_t *, s_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * s_list_entry_t * s_list_peek_head (s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * s_list_entry_t * s_list_peek_tail (s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * s_list_entry_t * s_list_next_entry (s_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * unsigned long s_list_entry_cnt (s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * char s_list_is_empty (s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_add_head (s_list_t *, s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_add_tail (s_list_t *, s_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void s_list_split (d_list_t *, d_list_t *, d_list_entry_t *, ulong)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Double link list routines:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_init (d_list_t *, *head, *tail, cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_clear (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_push_head (d_list_t *, d_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * d_list_entry_t * d_list_pop_head (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_push_tail (d_list_t *, d_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * d_list_entry_t * d_list_pop_tail (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * d_list_entry_t * d_list_peek_head (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * d_list_entry_t * d_list_peek_tail (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * d_list_entry_t * d_list_next_entry (d_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_remove_entry(d_list_t *, d_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_insert_entry(d_list_t *, *prev, *next, *new)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * d_list_entry_t * d_list_prev_entry (d_list_entry_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * unsigned long d_list_entry_cnt (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * char d_list_is_empty (d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_add_head (d_list_t *, d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void d_list_add_tail (d_list_t *, d_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Array list routines:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void q_list_init (q_list_t *, q_list_entry *, ulong)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void q_list_clear (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void q_list_push_head (q_list_t *, q_list_entry_t)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * q_list_entry_t q_list_pop_head (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * void q_list_push_tail (q_list_t *, q_list_entry_t)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * q_list_entry_t q_list_pop_tail (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * q_list_entry_t q_list_peek_head (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * q_list_entry_t q_list_peek_tail (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * unsigned long q_list_entry_cnt (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * char q_list_is_empty (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * char q_list_is_full (q_list_t *)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 03/30/98 Hav Khauv Initial version.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Single link list.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define S_LINK_CAST(_p) ((s_list_entry_t *) (_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_init(_s_list, _head_entry, _tail_entry, _entry_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_push_head(_s_list, _s_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->tail == (s_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->head == (s_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_push_tail(_s_list, _s_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_peek_head(_s_list) ((_s_list)->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_peek_tail(_s_list) ((_s_list)->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_next_entry(_s_entry) ((_s_entry)->next)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_entry_cnt(_s_list) ((_s_list)->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_is_empty(_s_list) ((_s_list)->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_add_head(_s_list, _s_list_head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->tail->next = (_s_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_add_tail(_s_list, _s_list_tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail->next = (_s_list_tail)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_split(_s_list, _s_list_head, _split_entry, _entry_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt = (_s_list)->cnt - (_entry_cnt); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Double link list entry.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define D_LINK_CAST(_p) ((d_list_entry_t *) (_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_init(_d_list, _head_entry, _tail_entry, _entry_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_push_head(_d_list, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail == (d_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_push_tail(_d_list, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_peek_head(_d_list) ((_d_list)->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_peek_tail(_d_list) ((_d_list)->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_next_entry(_d_entry) ((_d_entry)->next)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_insert_entry(_d_list, _d_entry_prev, _d_entry_next, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail == (d_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_remove_entry(_d_list, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev->next = (_d_entry)->next; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next->prev = (_d_entry)->prev; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_prev_entry(_d_entry) ((_d_entry)->prev)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_entry_cnt(_d_list) ((_d_list)->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_is_empty(_d_list) ((_d_list)->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_add_head(_d_list, _d_list_head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list_head)->tail->next = (_d_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (_d_list_head)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_add_tail(_d_list, _d_list_tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list_tail)->head->prev = (_d_list)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (_d_list_tail)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Array list.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long max_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->last_entry_addr = q_list_arr + (max_cnt-1);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->head == q_list->first_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_entry = q_list->cnt ? *q_list->head : (q_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->head == q_list->last_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->tail == q_list->last_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (q_list->tail == q_list->first_entry_addr ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *q_list->last_entry_addr : *(q_list->tail-1)) :
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->tail == q_list->first_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_entry = q_list->cnt ? *q_list->head : (q_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (q_list->tail == q_list->first_entry_addr ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *q_list->last_entry_addr : *(q_list->tail - 1)) :
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_init(_q_list, _q_list_arr, _max_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->first_entry_addr = (_q_list_arr); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->last_entry_addr = (_q_list_arr) + ((_max_cnt) - 1); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_push_head(_q_list, _q_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->head == (_q_list)->first_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->last_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt ? *(_q_list)->head : (q_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->head == (_q_list)->last_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_push_tail(_q_list, _q_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->tail == (_q_list)->last_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt ? ((_q_list)->tail == (_q_list)->first_entry_addr ? \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(_q_list)->last_entry_addr : *((_q_list)->tail-1)) : \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->tail == (_q_list)->first_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->last_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((_q_list)->cnt ? *(_q_list)->head : (q_list_entry_t *) 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((_q_list)->cnt ? ((_q_list)->tail == (_q_list)->first_entry_addr ? \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(_q_list)->last_entry_addr : *((_q_list)->tail - 1)) : \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_entry_cnt(_q_list) ((_q_list)->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_is_empty(_q_list) ((_q_list)->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_is_full(_q_list) ((_q_list)->cnt == (_q_list)->max_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _listq_h_ */