53 #ifndef _RNR_DLISTVOID_H 54 #include <sys/types.h> 56 #endif // _RNR_DLISTVOID_H 75 #define DLIST_DNAME Void 78 #define _DLIST_DERIVED 80 #define _DLIST_NAME DLIST_DNAME 91 #define DLIST_DTYPE void 93 #define _DLIST_TYPE DLIST_DTYPE 100 #define _CONCAT_(x, y) x ## y 101 #define _CONCAT(x, y) _CONCAT_(x, y)
106 #undef _DLIST_DEFPREFACE 107 #define _DLIST_DEFPREFACE _CONCAT(DList, _DLIST_NAME) 113 #define _DLIST_DEF(name) _CONCAT(_DLIST_DEFPREFACE, name) 118 #define _DLIST_HEAD _DLIST_DEF(_T) 119 #define _DLIST_NODE _DLIST_DEF(Node_T)
120 #define _DLIST_ITER _DLIST_DEF(Iter_T)
127 #ifndef _RNR_DLISTVOID_H 132 #undef DLIST_INSERT_AT_END 133 #define DLIST_INSERT_AT_END (-1) 173 #endif // _RNR_DLISTVOID_H 180 #ifdef _DLIST_DERIVED 189 const _DLIST_TYPE *);
197 typedef void (*
_DLIST_DEF(FuncDataDelete_T))(_DLIST_TYPE *);
205 typedef void (*
_DLIST_DEF(FuncDataPrint_T))(FILE *, _DLIST_TYPE *);
219 #endif // _DLIST_DERIVED 226 #ifndef _RNR_DLISTVOID_H 410 #endif // _RNR_DLISTVOID_H 417 #ifdef _DLIST_DERIVED 451 static inline void _DLIST_DEF(Delete)(_DLIST_HEAD *pHead)
468 static inline void _DLIST_DEF(DeleteAllNodes)(_DLIST_HEAD *pHead)
486 static inline void _DLIST_DEF(DeleteNode)(_DLIST_HEAD *pHead,
505 static inline void _DLIST_DEF(DeleteNodeAt)(_DLIST_HEAD *pHead,
int iIndex)
523 static inline _DLIST_NODE *
_DLIST_DEF(UnlinkNodeAt)(_DLIST_HEAD *pHead,
542 static inline _DLIST_TYPE *
_DLIST_DEF(UnlinkDataAt)(_DLIST_HEAD *pHead,
559 static inline _DLIST_NODE *
_DLIST_DEF(Append)(_DLIST_HEAD *pHead,
576 static inline _DLIST_NODE *
_DLIST_DEF(Prepend)(_DLIST_HEAD *pHead,
597 static inline _DLIST_NODE *
_DLIST_DEF(Insert)(_DLIST_HEAD *pHead,
615 static inline _DLIST_NODE *
_DLIST_DEF(GetNodeAt)(_DLIST_HEAD *pHead,
int iIndex)
630 static inline _DLIST_TYPE *
_DLIST_DEF(GetData)(_DLIST_NODE *pNode)
646 static inline _DLIST_TYPE *
_DLIST_DEF(GetDataAt)(_DLIST_HEAD *pHead,
int iIndex)
661 static inline int _DLIST_DEF(Count)(_DLIST_HEAD *pHead)
679 static inline _DLIST_NODE *
_DLIST_DEF(IterNodeFirst)(_DLIST_HEAD *pHead,
697 static inline _DLIST_NODE *
_DLIST_DEF(IterNodeNext)(_DLIST_ITER *pIter)
715 static inline _DLIST_NODE *
_DLIST_DEF(IterNodeLast)(_DLIST_HEAD *pHead,
733 static inline _DLIST_NODE *
_DLIST_DEF(IterNodePrev)(_DLIST_ITER *pIter)
753 static inline _DLIST_NODE *
_DLIST_DEF(FindNode)(_DLIST_HEAD *pHead,
754 const _DLIST_TYPE *pData)
769 static inline void _DLIST_DEF(Print)(_DLIST_HEAD *pHead,
791 static inline _DLIST_NODE *
_DLIST_DEF(Push)(_DLIST_HEAD *pHead,
812 static inline _DLIST_TYPE *
_DLIST_DEF(Pop)(_DLIST_HEAD *pHead)
831 static inline _DLIST_NODE *
_DLIST_DEF(Queue)(_DLIST_HEAD *pHead,
852 static inline _DLIST_TYPE *
_DLIST_DEF(Dequeue)(_DLIST_HEAD *pHead)
870 static inline _DLIST_TYPE *
_DLIST_DEF(IterDataFirst)(_DLIST_HEAD *pHead,
888 static inline _DLIST_TYPE *
_DLIST_DEF(IterDataNext)(_DLIST_ITER *pIter)
906 static inline _DLIST_TYPE *
_DLIST_DEF(IterDataLast)(_DLIST_HEAD *pHead,
924 static inline _DLIST_TYPE *
_DLIST_DEF(IterDataPrev)(_DLIST_ITER *pIter)
929 #endif // _DLIST_DERIVED 943 #undef _DLIST_DERIVED 950 #define _RNR_DLISTVOID_H DListVoidNode_T * DListVoidIterNodeFirst(DListVoid_T *pHead, DListVoidIter_T *pIter)
Initialize dlist iterator and return the first node in dlist.
void * DListVoidGetDataAt(DListVoid_T *pHead, int iIndex)
Get the user data from the dlist at the given index.
void DListVoidDeleteAllNodes(DListVoid_T *pHead)
Unlink and delete all nodes and data from dlist, leaving dlist empty.
void * m_pNext
pointer to next dnode
int(* DListVoidFuncDataCmp_T)(const void *, const void *)
Base: Node data comparator callback function type.
Base dlist iterator structure.
DListVoidNode_T * DListVoidInsert(DListVoid_T *pHead, int iIndex, void *pData)
Attach the user data to a new node and insert before the dlist index.
#define _DLIST_DEF(name)
DList (base or derived) definition name.
void DListVoidDeleteNodeAt(DListVoid_T *pHead, int iIndex)
Unlink the node from the dlist at the given index and delete it and it's attached user data...
DListVoidNode_T * DListVoidFindNode(DListVoid_T *pHead, const void *pData)
Find the first node with the matching data.
void DListVoidDelete(DListVoid_T *pHead)
Delete entire dlist.
DListVoidNode_T * DListVoidUnlinkNodeAt(DListVoid_T *pHead, int iIndex)
Unlink the node from the dlist at the given index.
static void * DListVoidIterDataNext(DListVoidIter_T *pIter)
Get the data in the next iterated node in dlist.
void * m_pThis
pointer to current dnode
#define _DLIST_HEAD
dlist head
void * DListVoidGetNodeAt(DListVoid_T *pHead, int iIndex)
Get the node at the given dlist index.
DListVoidNode_T * DListVoidIterNodeLast(DListVoid_T *pHead, DListVoidIter_T *pIter)
Initialize dlist iterator and return the last node in dlist.
#define C_DECLS_BEGIN
C declaration block begin in C.
static void * DListVoidIterDataFirst(DListVoid_T *pHead, DListVoidIter_T *pIter)
Initialize dlist iterator and return the data in first node in dlist.
static DListVoidNode_T * DListVoidPush(DListVoid_T *pHead, void *pData)
Attach user data to a new node and push on dlist stack.
DListVoidNode_T * DListVoidIterNodeNext(DListVoidIter_T *pIter)
Get the next iterated node in dlist.
void DListVoidDeleteNode(DListVoid_T *pHead, DListVoidNode_T *pNode)
Unlink node from the dlist and delete the node and it's attached user data.
void(* DListVoidFuncDataDelete_T)(void *)
Base: Node data delete callback function type.
DListVoidNode_T * DListVoidIterNodePrev(DListVoidIter_T *pIter)
Get the previous iterated node in dlist.
#define _DLIST_NODE
dlist node
#define C_DECLS_END
C declaration block end in C.
DListVoidNode_T * DListVoidPrepend(DListVoid_T *pHead, void *pData)
Attach the user data to a new node and link to the start of dlist.
void DListVoidPrint(DListVoid_T *pHead, DListVoidFuncDataPrint_T fnDataPr, FILE *fp)
Traverse dlist and print.
Unit Tests (define to build test main)
Doubly linked list node structure.
void * DListVoidGetData(DListVoidNode_T *pNode)
Get the user data from the given node.
void * DListVoidUnlinkDataAt(DListVoid_T *pHead, int iIndex)
Unlink the user data from the dlist at the given index.
static DListVoidNode_T * DListVoidQueue(DListVoid_T *pHead, void *pData)
Attach user data to a new node and queue on dlist queue.
void(* DListVoidFuncDataPrint_T)(FILE *, void *)
Base: Print node data callback function type.
int DListVoidCount(DListVoid_T *pHead)
Get the number of nodes in dlist.
DListVoidNode_T * DListVoidAppend(DListVoid_T *pHead, void *pData)
Attach user data to a new node and link to the end of dlist.
#define _DLIST_ITER
dlist iterator
#define _DLIST_TYPE
dlist data type
DListVoid_T * DListVoidNew(DListVoidFuncDataCmp_T fnDataCmp, DListVoidFuncDataDelete_T fnDataDelete)
Allocate and initialize new empty dlist.
static void * DListVoidPop(DListVoid_T *pHead)
Unlink node at top of dlist stack.
static void * DListVoidDequeue(DListVoid_T *pHead)
Attach user data to a new node and queue on dlist queue.
DListVoid_T * m_pHead
pointer to dlistvoid head