20 #include <freetds/bool.h>
24 #if !defined(DLIST_PREFIX) || !defined(DLIST_ITEM_TYPE) || !defined(DLIST_LIST_TYPE)
25 #error Required defines for dlist missing!
28 #if defined(DLIST_NAME) || defined(DLIST_PASTER) || \
29 defined(DLIST_EVALUATOR) || defined(DLIST_ITEM)
30 #error Some internal dlist macros already defined
38 #define DLIST_PASTER(x,y) x ## _ ## y
39 #define DLIST_EVALUATOR(x,y) DLIST_PASTER(x,y)
40 #define DLIST_NAME(suffix) DLIST_EVALUATOR(DLIST_PREFIX, suffix)
41 #define DLIST_ITEM(ring) \
42 ((DLIST_ITEM_TYPE *) (((char *) (ring)) - TDS_OFFSET(DLIST_ITEM_TYPE, DLIST_NAME(item))))
46 #if ENABLE_EXTRA_CHECKS
54 list->ring.next = list->ring.prev = &list->ring;
60 return list->ring.next == &list->ring ?
NULL :
DLIST_ITEM(list->ring.next);
65 return list->ring.prev == &list->ring ?
NULL :
DLIST_ITEM(list->ring.prev);
70 return item->DLIST_NAME(item).next == &list->ring ?
NULL :
DLIST_ITEM(item->DLIST_NAME(item).next);
75 return item->DLIST_NAME(item).prev == &list->ring ?
NULL :
DLIST_ITEM(item->DLIST_NAME(item).prev);
100 item->DLIST_NAME(item).prev =
NULL;
101 item->DLIST_NAME(item).next =
NULL;
108 return item->DLIST_NAME(item).prev !=
NULL || item->DLIST_NAME(item).next !=
NULL;
113 #undef DLIST_ITEM_TYPE
114 #undef DLIST_LIST_TYPE
117 #undef DLIST_EVALUATOR
static void DLIST_NAME() init(DLIST_LIST_TYPE *list)
static void DLIST_NAME() prepend(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static void DLIST_NAME() append(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() last(DLIST_LIST_TYPE *list)
static void DLIST_NAME() check(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() prev(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static bool DLIST_NAME() in_list(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static void DLIST_NAME() remove(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
static void dlist_insert_after(dlist_ring *ring_pos, dlist_ring *ring_item)
#define DLIST_NAME(suffix)