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 *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * (c) COPYRIGHT 1998 ZNK Corporation, ALL RIGHTS RESERVED.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
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 *
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 *
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 *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * History:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 03/30/98 Hav Khauv Initial version.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _listq_h_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _listq_h_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Single link list.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _s_list_entry_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _s_list_entry_t *next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} s_list_entry_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define S_LINK_CAST(_p) ((s_list_entry_t *) (_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _s_list_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} s_list_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef _INLINE_LISTQ_CALLS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *head_entry,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *tail_entry,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long entry_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = head_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = tail_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt = entry_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_clear(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = (s_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = (s_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt = 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_push_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *s_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_entry->next = s_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(s_list->tail == (s_list_entry_t *) 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_pop_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_entry = s_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(s_list->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = s_list->head->next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(s_list->head == (s_list_entry_t *) 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = (s_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_push_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *s_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_entry->next = (s_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(s_list->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail->next = s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = s_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_peek_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return s_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_peek_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return s_list->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_next_entry(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t *s_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return s_entry->next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunsigned long
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_entry_cnt(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return s_list->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchichar
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_is_empty(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return s_list->cnt == 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_add_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list_head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(s_list->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *s_list = *s_list_head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if(s_list_head->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->tail->next = s_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = s_list_head->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt += s_list_head->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_add_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *s_list_tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(s_list->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *s_list = *s_list_tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if(s_list_tail->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail->next = s_list_tail->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = s_list_tail->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt += s_list_tail->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchis_list_split(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t * s_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t * s_list_head,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t * split_entry,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long entry_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (split_entry->next == NULL) {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->head = s_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->tail = split_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->cnt = entry_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = NULL;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->tail = NULL;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt = 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->head = s_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->tail = split_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_head->cnt = entry_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->head = split_entry->next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list->cnt = s_list->cnt - entry_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi split_entry->next = NULL;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_init(_s_list, _head_entry, _tail_entry, _entry_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (_head_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = (_tail_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt = (_entry_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_clear(_s_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (s_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = (s_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt = 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_push_head(_s_list, _s_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_entry)->next = (_s_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->tail == (s_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = (_s_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (_s_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt++
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_pop_head(_s_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (_s_list)->head->next; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->head == (s_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = (s_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_push_tail(_s_list, _s_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_entry)->next = (s_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail->next = (_s_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (_s_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = (_s_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt++
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_peek_head(_s_list) ((_s_list)->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_peek_tail(_s_list) ((_s_list)->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_next_entry(_s_entry) ((_s_entry)->next)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_entry_cnt(_s_list) ((_s_list)->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_is_empty(_s_list) ((_s_list)->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_add_head(_s_list, _s_list_head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->cnt == 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(_s_list) = *(_s_list_head); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if((_s_list_head)->cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->tail->next = (_s_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (_s_list_head)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt += (_s_list_head)->cnt; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_add_tail(_s_list, _s_list_tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_s_list)->cnt == 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(_s_list) = *(_s_list_tail); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if((_s_list_tail)->cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail->next = (_s_list_tail)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = (_s_list_tail)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt += (_s_list_tail)->cnt; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define s_list_split(_s_list, _s_list_head, _split_entry, _entry_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((_split_entry)->next == NULL) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->head = (_s_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->tail = _split_entry; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->cnt = _entry_cnt; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = NULL; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->tail = NULL; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->head = (_s_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->tail = _split_entry; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list_head)->cnt = (_entry_cnt); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->head = (_split_entry)->next; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_s_list)->cnt = (_s_list)->cnt - (_entry_cnt); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_split_entry)->next = NULL; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Double link list entry.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _d_list_entry_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _d_list_entry_t *next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _d_list_entry_t *prev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} d_list_entry_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define D_LINK_CAST(_p) ((d_list_entry_t *) (_p))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _d_list_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} d_list_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef _INLINE_LISTQ_CALLS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *head_entry,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *tail_entry,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long entry_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = head_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = tail_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt = entry_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_clear(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt = 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_push_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->prev = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->next = d_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->tail == (d_list_entry_t *) 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head->prev = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_pop_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry = d_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = d_list->head->next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head->prev = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_push_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->next = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->prev = d_list->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail->next = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_pop_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry = d_list->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = d_list->tail->prev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail->next = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = (d_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_peek_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_peek_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_list->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_next_entry(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_entry->next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_remove_entry(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->head == d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_pop_head(d_list);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if(d_list->tail == d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_pop_tail(d_list);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->prev->next = d_entry->next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->next->prev = d_entry->prev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_insert_entry(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry_prev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry_next,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (d_entry_prev == NULL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_push_head(d_list, d_entry);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (d_entry_next == NULL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_push_tail(d_list, d_entry);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->next = d_entry_next;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry->prev = d_entry_prev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry_prev->next = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_entry_next->prev = d_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_t *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_prev_entry(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t *d_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_entry->prev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunsigned long
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_entry_cnt(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_list->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchichar
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_is_empty(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return d_list->cnt == 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_add_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list_head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_head->tail->next = d_list->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head->prev = d_list_head->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = d_list_head->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = d_list_head->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt += d_list_head->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchid_list_add_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *d_list_tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_tail->head->prev = d_list->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(d_list->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail->next = d_list_tail->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->head = d_list_tail->head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->tail = d_list_tail->tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list->cnt += d_list_tail->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_init(_d_list, _head_entry, _tail_entry, _entry_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_head_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_tail_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt = (_entry_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_clear(_d_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt = 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_push_head(_d_list, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next = (_d_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail == (d_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt++
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_pop_head(_d_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_list)->head->next; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_push_tail(_d_list, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev = (_d_list)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt++
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_pop_tail(_d_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_list)->tail->prev; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_peek_head(_d_list) ((_d_list)->head)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_peek_tail(_d_list) ((_d_list)->tail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_next_entry(_d_entry) ((_d_entry)->next)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_insert_entry(_d_list, _d_entry_prev, _d_entry_next, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (_d_entry_prev == NULL ) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next = (_d_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail == (d_list_entry_t *) 0) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (_d_entry_next == NULL ) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev = (_d_list)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next = (_d_entry_next); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev = (_d_entry_prev); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry_prev)->next = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry_next)->prev = (_d_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_remove_entry(_d_list, _d_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->head == (_d_entry)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_list)->head->next; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if((_d_list)->tail == (_d_entry)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_list)->tail->prev; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (d_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->prev->next = (_d_entry)->next; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_entry)->next->prev = (_d_entry)->prev; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_prev_entry(_d_entry) ((_d_entry)->prev)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_entry_cnt(_d_list) ((_d_list)->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_is_empty(_d_list) ((_d_list)->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_add_head(_d_list, _d_list_head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list_head)->tail->next = (_d_list)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->head) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head->prev = (_d_list_head)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_list_head)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_list_head)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt += (_d_list_head)->cnt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define d_list_add_tail(_d_list, _d_list_tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list_tail)->head->prev = (_d_list)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_d_list)->tail) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail->next = (_d_list_tail)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->head = (_d_list_tail)->head; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->tail = (_d_list_tail)->tail; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_d_list)->cnt += (_d_list_tail)->cnt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Array list.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef void *q_list_entry_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _q_list_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t *head;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t *tail;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long max_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t *first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t *last_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} q_list_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef _INLINE_LISTQ_CALLS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_list_arr[],
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long max_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->max_cnt = 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
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->head = q_list->first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->tail = q_list->first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->cnt = 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_clear(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->head = q_list->first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->tail = q_list->first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->cnt = 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_push_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->cnt < q_list->max_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->head == q_list->first_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->head = q_list->last_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->head--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(q_list->head) = q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_entry_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_pop_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_entry = q_list->cnt ? *q_list->head : (q_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->head == q_list->last_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->head = q_list->first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->head++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->cnt--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_push_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_entry)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->cnt < q_list->max_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *q_list->tail = q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->tail == q_list->last_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->tail = q_list->first_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->tail++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->cnt++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_entry_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_pop_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_entry = q_list->cnt ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (q_list->tail == q_list->first_entry_addr ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *q_list->last_entry_addr : *(q_list->tail-1)) :
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (q_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(q_list->tail == q_list->first_entry_addr)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->tail = q_list->last_entry_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->tail--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list->cnt--;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_entry_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_peek_head(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_entry = q_list->cnt ? *q_list->head : (q_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_entry_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_peek_tail(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_entry_t q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_entry = q_list->cnt ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (q_list->tail == q_list->first_entry_addr ?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *q_list->last_entry_addr : *(q_list->tail - 1)) :
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (q_list_entry_t *) 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_entry;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunsigned long
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_entry_cnt(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_list->cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchichar
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_is_empty(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_list->cnt == 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchichar
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiq_list_is_full(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi q_list_t *q_list)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return q_list->cnt == q_list->max_cnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_init(_q_list, _q_list_arr, _max_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->max_cnt = (_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)->cnt = 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_clear(_q_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt = 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_push_head(_q_list, _q_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->cnt < (_q_list)->max_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->head == (_q_list)->first_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->last_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *((_q_list)->head) = (_q_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_pop_head(_q_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt ? *(_q_list)->head : (q_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->head == (_q_list)->last_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->head++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_push_tail(_q_list, _q_entry) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->cnt < (_q_list)->max_cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *(_q_list)->tail = (_q_entry); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->tail == (_q_list)->last_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_pop_tail(_q_list) \
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 (q_list_entry_t *) 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->cnt) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if((_q_list)->tail == (_q_list)->first_entry_addr) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail = (_q_list)->last_entry_addr; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->tail--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (_q_list)->cnt--; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_peek_head(_q_list) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((_q_list)->cnt ? *(_q_list)->head : (q_list_entry_t *) 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_peek_tail(_q_list) \
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 (q_list_entry_t *) 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_entry_cnt(_q_list) ((_q_list)->cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_is_empty(_q_list) ((_q_list)->cnt == 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define q_list_is_full(_q_list) ((_q_list)->cnt == (_q_list)->max_cnt)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _listq_h_ */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi