Files
banban/ql-kernel/threadx/common/include/utlLinkedList.h

80 lines
3.6 KiB
C

/*****************************************************************************
* Utility Library
*
* Singly linked-list utilities header file
*
*****************************************************************************/
#ifndef _UTL_LINKED_LIST_INCLUDED
#define _UTL_LINKED_LIST_INCLUDED
/*--- Data Types ------------------------------------------------------------*/
typedef struct utlLinkedListNode_S *utlLinkedListNode_P;
typedef struct utlLinkedListNode_S {
utlLinkedListNode_P next_p;
unsigned char data[0]; /* variable-sized array */
} utlLinkedListNode_T;
typedef const utlLinkedListNode_T *utlLinkedListNode_P2c;
#define utlNULL_LINKED_LIST_NODE {NULL, {0}}
typedef unsigned int utlNodeCount_T;
typedef struct utlLinkedList_S {
utlLinkedListNode_P head_p;
utlLinkedListNode_P tail_p;
utlNodeCount_T node_count;
} utlLinkedList_T, *utlLinkedList_P;
typedef const utlLinkedList_T *utlLinkedList_P2c;
#define utlEMPTY_LINKED_LIST {NULL, NULL, 0}
/*--- Macros ----------------------------------------------------------------*/
#define utlIsListEmpty(list) ((list).head_p == (utlLinkedListNode_P) NULL)
#define utlQueryPrevNode(list_p, node_type, node_p) (node_type *) utlDoQueryPrevNode(list_p, (utlLinkedListNode_P) node_p)
#define utlGetHeadNode(list_p, node_type) (node_type *) utlDoGetHeadNode (list_p)
#define utlGetNode(list_p, node_type, prev_p, node_p) (node_type *) utlDoGetNode (list_p, (utlLinkedListNode_P) prev_p, (utlLinkedListNode_P) node_p)
#define utlGetTailNode(list_p, node_type) (node_type *) utlDoGetTailNode (list_p)
#define utlPutHeadNode(list_p, node_type, node_p) utlDoPutHeadNode (list_p, (utlLinkedListNode_P) node_p)
#define utlPutNode(list_p, node_type, here_p, node_p) utlDoPutNode (list_p, (utlLinkedListNode_P) here_p, (utlLinkedListNode_P) node_p)
#define utlPutTailNode(list_p, node_type, node_p) utlDoPutTailNode (list_p, (utlLinkedListNode_P) node_p)
/*--- Prototypes ------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
extern void utlInitLinkedList (const utlLinkedList_P list_p);
extern utlLinkedListNode_P utlDoQueryPrevNode(const utlLinkedList_P list_p,
const utlLinkedListNode_P node_p);
extern utlLinkedListNode_P utlDoGetHeadNode (const utlLinkedList_P list_p);
extern utlLinkedListNode_P utlDoGetNode (const utlLinkedList_P list_p,
const utlLinkedListNode_P prev_p,
const utlLinkedListNode_P node_p);
extern utlLinkedListNode_P utlDoGetTailNode (const utlLinkedList_P list_p);
extern void utlDoPutHeadNode (const utlLinkedList_P list_p,
const utlLinkedListNode_P node_p);
extern void utlDoPutNode (const utlLinkedList_P list_p,
const utlLinkedListNode_P here_p,
const utlLinkedListNode_P node_p);
extern void utlDoPutTailNode (const utlLinkedList_P list_p,
const utlLinkedListNode_P node_p);
extern void utlPutHeadList (const utlLinkedList_P list1_p,
const utlLinkedList_P list2_p);
extern void utlPutTailList (const utlLinkedList_P list1_p,
const utlLinkedList_P list2_p);
#ifdef __cplusplus
}
#endif
#endif /* _UTL_LINKED_LIST_INCLUDED */