![]() |
librnr
1.14.5
RoadNarrows Robotics Common Library 1
|
Doubly linked list (dlist) of data pointers #defines, types, and declarations. More...
#include <sys/types.h>#include <stdio.h>Go to the source code of this file.
Classes | |
| struct | DListVoidIter_T |
| Base dlist iterator structure. More... | |
Macros | |
| #define | DLIST_DNAME Void |
| not a "derived" dlist More... | |
| #define | _DLIST_NAME DLIST_DNAME |
| dlist name | |
| #define | DLIST_DTYPE void |
| base dlist data type More... | |
| #define | _DLIST_TYPE DLIST_DTYPE |
| dlist data type | |
| #define | _CONCAT_(x, y) x ## y |
| build concatenation operator More... | |
| #define | _CONCAT(x, y) _CONCAT_(x, y) |
| now concatenate | |
| #define | _DLIST_DEFPREFACE _CONCAT(DList, _DLIST_NAME) |
| DList (base or derived) definition preface. | |
| #define | _DLIST_DEF(name) _CONCAT(_DLIST_DEFPREFACE, name) |
| DList (base or derived) definition name. | |
| #define | _DLIST_HEAD _DLIST_DEF(_T) |
| dlist head More... | |
| #define | _DLIST_NODE _DLIST_DEF(Node_T) |
| dlist node | |
| #define | _DLIST_ITER _DLIST_DEF(Iter_T) |
| dlist iterator | |
| #define | DLIST_INSERT_AT_END (-1) |
| Special dlist index value to insert before end-of-list. | |
| #define | _RNR_DLISTVOID_H |
| include base declaration only once More... | |
Typedefs | |
| typedef int(* | DListVoidFuncDataCmp_T) (const void *, const void *) |
| Base: Node data comparator callback function type. More... | |
| typedef void(* | DListVoidFuncDataDelete_T) (void *) |
| Base: Node data delete callback function type. | |
| typedef void(* | DListVoidFuncDataPrint_T) (FILE *, void *) |
| Base: Print node data callback function type. More... | |
| typedef struct dlistvoid_head_t | DListVoid_T |
| base dlist head More... | |
| typedef struct dlistvoid_node_t | DListVoidNode_T |
| base dlist node | |
Functions | |
| DListVoid_T * | DListVoidNew (DListVoidFuncDataCmp_T fnDataCmp, DListVoidFuncDataDelete_T fnDataDelete) |
| Allocate and initialize new empty dlist. More... | |
| void | DListVoidDelete (DListVoid_T *pHead) |
| Delete entire dlist. More... | |
| void | DListVoidDeleteAllNodes (DListVoid_T *pHead) |
| Unlink and delete all nodes and data from dlist, leaving dlist empty. More... | |
| void | DListVoidDeleteNode (DListVoid_T *pHead, DListVoidNode_T *pNode) |
| Unlink node from the dlist and delete the node and it's attached user data. More... | |
| 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. More... | |
| DListVoidNode_T * | DListVoidUnlinkNodeAt (DListVoid_T *pHead, int iIndex) |
| Unlink the node from the dlist at the given index. More... | |
| void * | DListVoidUnlinkDataAt (DListVoid_T *pHead, int iIndex) |
| Unlink the user data from the dlist at the given index. More... | |
| DListVoidNode_T * | DListVoidAppend (DListVoid_T *pHead, void *pData) |
| Attach user data to a new node and link to the end of dlist. More... | |
| DListVoidNode_T * | DListVoidPrepend (DListVoid_T *pHead, void *pData) |
| Attach the user data to a new node and link to the start of dlist. More... | |
| DListVoidNode_T * | DListVoidInsert (DListVoid_T *pHead, int iIndex, void *pData) |
| Attach the user data to a new node and insert before the dlist index. More... | |
| void * | DListVoidGetNodeAt (DListVoid_T *pHead, int iIndex) |
| Get the node at the given dlist index. More... | |
| void * | DListVoidGetData (DListVoidNode_T *pNode) |
| Get the user data from the given node. More... | |
| void * | DListVoidGetDataAt (DListVoid_T *pHead, int iIndex) |
| Get the user data from the dlist at the given index. More... | |
| int | DListVoidCount (DListVoid_T *pHead) |
| Get the number of nodes in dlist. More... | |
| DListVoidNode_T * | DListVoidIterNodeFirst (DListVoid_T *pHead, DListVoidIter_T *pIter) |
| Initialize dlist iterator and return the first node in dlist. More... | |
| DListVoidNode_T * | DListVoidIterNodeNext (DListVoidIter_T *pIter) |
| Get the next iterated node in dlist. More... | |
| DListVoidNode_T * | DListVoidIterNodeLast (DListVoid_T *pHead, DListVoidIter_T *pIter) |
| Initialize dlist iterator and return the last node in dlist. More... | |
| DListVoidNode_T * | DListVoidIterNodePrev (DListVoidIter_T *pIter) |
| Get the previous iterated node in dlist. More... | |
| DListVoidNode_T * | DListVoidFindNode (DListVoid_T *pHead, const void *pData) |
| Find the first node with the matching data. More... | |
| void | DListVoidPrint (DListVoid_T *pHead, DListVoidFuncDataPrint_T fnDataPr, FILE *fp) |
| Traverse dlist and print. More... | |
| static DListVoidNode_T * | DListVoidPush (DListVoid_T *pHead, void *pData) |
| Attach user data to a new node and push on dlist stack. More... | |
| static void * | DListVoidPop (DListVoid_T *pHead) |
| Unlink node at top of dlist stack. More... | |
| static DListVoidNode_T * | DListVoidQueue (DListVoid_T *pHead, void *pData) |
| Attach user data to a new node and queue on dlist queue. More... | |
| static void * | DListVoidDequeue (DListVoid_T *pHead) |
| Attach user data to a new node and queue on dlist queue. More... | |
| static void * | DListVoidIterDataFirst (DListVoid_T *pHead, DListVoidIter_T *pIter) |
| Initialize dlist iterator and return the data in first node in dlist. More... | |
| static void * | DListVoidIterDataNext (DListVoidIter_T *pIter) |
| Get the data in the next iterated node in dlist. More... | |
Doubly linked list (dlist) of data pointers #defines, types, and declarations.
This file is configured to support a "poor man's" C version of class inheritance and templating.
The "base" set of dlist data types and functions are DListVoid<x> named definitions with data types returning void*. These definitions are defined in librnr.
A "derived" dlist can be defined using two #define's (usually in a header file). Follow these #defines with the inclusion of the this header file:
Multiple dlist derived types and the base type may be used in the same C source.
—
Definition in file dlistvoid.h.
| #define _CONCAT_ | ( | x, | |
| y | |||
| ) | x ## y |
build concatenation operator
Useful string concatenation macros.
Definition at line 100 of file dlistvoid.h.
| #define _DLIST_HEAD _DLIST_DEF(_T) |
| #define _RNR_DLISTVOID_H |
include base declaration only once
Undefine macros to allow redefinition.
Definition at line 950 of file dlistvoid.h.
| #define DLIST_DNAME Void |
not a "derived" dlist
Define the dlist name (must be literal).
If DLIST_DNAME is defined then a new set of dlist data types and functions will be defined, prefaced by DList<DLIST_DNAME>.
If DLIST_DNAME is not defined, then the base set DListVoid<x> data types and functions will be used.base dlist name
Definition at line 75 of file dlistvoid.h.
| #define DLIST_DTYPE void |
base dlist data type
Define the derived dlist data type (must be literal).
If DLIST_DTYPE is defined then the data stored in the dlist and returned to the user or to callbacks will be DLIST_DTYPE*.
If DLIST_DTYPE is not defined, then void is used.
Definition at line 91 of file dlistvoid.h.
| typedef struct dlistvoid_head_t DListVoid_T |
| typedef int(* DListVoidFuncDataCmp_T) (const void *, const void *) |
Base: Node data comparator callback function type.
Definition at line 141 of file dlistvoid.h.
| typedef void(* DListVoidFuncDataPrint_T) (FILE *, void *) |
Base: Print node data callback function type.
Definition at line 152 of file dlistvoid.h.
| DListVoidNode_T* DListVoidAppend | ( | DListVoid_T * | pHead, |
| void * | pData | ||
| ) |
Attach user data to a new node and link to the end of dlist.
| pHead | Pointer to dlist (head). |
| pData | Pointer to user (allocated) data. |
Definition at line 325 of file dlistvoid.c.
References _TPTR, CHKPTR, dlist_append(), LOGDIAG4, LOGDIAG4CALL, dlistvoid_node_t::m_dnode, dlistvoid_head_t::m_dnodeHead, dlistvoid_head_t::m_nNumNodes, dlistvoid_node_t::m_pData, NEW, and NULL.
Referenced by DListVoidInsert(), DListVoidIterDataNext(), and DListVoidQueue().
| int DListVoidCount | ( | DListVoid_T * | pHead | ) |
Get the number of nodes in dlist.
| pHead | Pointer to dlist (head). |
Definition at line 517 of file dlistvoid.c.
References dlistvoid_head_t::m_nNumNodes, and NULL.
Referenced by DListVoidInsert(), and DListVoidIterDataNext().
| void DListVoidDelete | ( | DListVoid_T * | pHead | ) |
Delete entire dlist.
All user data are deleted with a per node callback to the user-supplied data delete function, if any. All nodes in the dlist and the dlist itself will be deleted. The dlist pointer will no longer be valid after this call.
| pHead | Pointer to dlist (head). |
Definition at line 140 of file dlistvoid.c.
References _TPTR, DListVoidDeleteAllNodes(), LOGDIAG4CALL, and NULL.
Referenced by DListVoidIterDataNext().
| void DListVoidDeleteAllNodes | ( | DListVoid_T * | pHead | ) |
Unlink and delete all nodes and data from dlist, leaving dlist empty.
User data are deleted with a per node callback to the user-supplied data delete function, if any.
| pHead | Pointer to dlist (head). |
Definition at line 161 of file dlistvoid.c.
References _TPTR, dlist_for_each_safe, DLISTVOID_ENTRY, DListVoidDeleteNode(), LOGDIAG4CALL, dlistvoid_head_t::m_dnodeHead, and NULL.
Referenced by DListVoidDelete(), DListVoidIterDataNext(), and DListVoidPrint().
| void DListVoidDeleteNode | ( | DListVoid_T * | pHead, |
| DListVoidNode_T * | pNode | ||
| ) |
Unlink node from the dlist and delete the node and it's attached user data.
User data are deleted with a callback to the user-supplied data delete function, if any.
| pHead | Pointer to dlist (head). |
| pNode | Pointer to node to be deleted. |
Definition at line 190 of file dlistvoid.c.
References _TPTR, CHKPTR, dlist_delete(), DLISTVOID_IS_EMPTY, LOGDIAG4CALL, LOGERROR, dlistvoid_node_t::m_dnode, dlistvoid_head_t::m_fnDataDelete, dlistvoid_head_t::m_nNumNodes, dlistvoid_node_t::m_pData, and NULL.
Referenced by DListVoidDeleteAllNodes(), DListVoidDeleteNodeAt(), DListVoidIterDataNext(), and DListVoidPrint().
| 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.
User data are deleted with a callback to the user-supplied data delete function, if any.
| pHead | Pointer to dlist (head). |
| iIndex | Index to dlist entry to delete. |
Definition at line 228 of file dlistvoid.c.
References _TINT, _TPTR, CHKPTR, DListVoidDeleteNode(), DListVoidGetNodeAt(), LOGDIAG4CALL, and NULL.
Referenced by DListVoidIterDataNext().
|
inlinestatic |
Attach user data to a new node and queue on dlist queue.
Unlink node at the front of dlist queue.
The dlist can serve as a FIFO queue (first in, first out) by using the queue and dequeue operators.
| pHead | Pointer to dlist (head). |
Returns pointer to dequeued node on success.
NULL on empty queue or on failure.
Definition at line 369 of file dlistvoid.h.
References DListVoidUnlinkDataAt().
| DListVoidNode_T* DListVoidFindNode | ( | DListVoid_T * | pHead, |
| const void * | pData | ||
| ) |
Find the first node with the matching data.
The user provided comparator function is used, if any.
| pHead | Pointer to dlist (head). |
| pData | Pointer to data to find. |
Definition at line 645 of file dlistvoid.c.
References _TPTR, CHKPTR, dlist_for_each_safe, DLISTVOID_ENTRY, LOGDIAG4CALL, dlistvoid_head_t::m_dnodeHead, dlistvoid_head_t::m_fnDataCmp, dlistvoid_node_t::m_pData, and NULL.
Referenced by DListVoidIterDataNext().
| void* DListVoidGetData | ( | DListVoidNode_T * | pNode | ) |
Get the user data from the given node.
| pNode | Pointer to node with data. |
Definition at line 483 of file dlistvoid.c.
References dlistvoid_node_t::m_pData, and NULL.
Referenced by DListVoidGetDataAt(), DListVoidIterDataFirst(), DListVoidIterDataNext(), and DListVoidPrint().
| void* DListVoidGetDataAt | ( | DListVoid_T * | pHead, |
| int | iIndex | ||
| ) |
Get the user data from the dlist at the given index.
| pHead | Pointer to dlist (head). |
| iIndex | Index to dlist entry. |
Definition at line 496 of file dlistvoid.c.
References DListVoidGetData(), DListVoidGetNodeAt(), and NULL.
Referenced by DListVoidIterDataNext().
| void* DListVoidGetNodeAt | ( | DListVoid_T * | pHead, |
| int | iIndex | ||
| ) |
Get the node at the given dlist index.
| pHead | Pointer to dlist (head). |
| iIndex | Index to dlist entry to find. |
Definition at line 442 of file dlistvoid.c.
References _TINT, _TPTR, CHKPTR, dlist_for_each_safe, DLIST_INSERT_AT_END, DLISTVOID_ENTRY, LOGDIAG4CALL, LOGERROR, dlistvoid_head_t::m_dnodeHead, dlistvoid_head_t::m_nNumNodes, and NULL.
Referenced by DListVoidDeleteNodeAt(), DListVoidGetDataAt(), DListVoidInsert(), DListVoidIterDataNext(), DListVoidUnlinkDataAt(), and DListVoidUnlinkNodeAt().
| DListVoidNode_T* DListVoidInsert | ( | DListVoid_T * | pHead, |
| int | iIndex, | ||
| void * | pData | ||
| ) |
Attach the user data to a new node and insert before the dlist index.
The special index value DLIST_INSERT_AT_END will insert at end-of-list (append).
| pHead | Pointer to dlist (head). |
| iIndex | Index to dlist entry where insertion occurs. |
| pData | Pointer to user (allocated) data. |
Definition at line 393 of file dlistvoid.c.
References _dlist_add(), _TINT, _TPTR, CHKPTR, DLIST_INSERT_AT_END, DListVoidAppend(), DListVoidCount(), DListVoidGetNodeAt(), DListVoidPrepend(), LOGDIAG4, LOGDIAG4CALL, dlistvoid_node_t::m_dnode, dlistvoid_head_t::m_nNumNodes, dlistvoid_node_t::m_pData, NEW, NULL, and dlist_node::prev.
Referenced by DListVoidIterDataNext().
|
inlinestatic |
Initialize dlist iterator and return the data in first node in dlist.
| pHead | Pointer to dlist (head). |
| pIter | Pointer to iterator. |
Definition at line 387 of file dlistvoid.h.
References DListVoidGetData(), and DListVoidIterNodeFirst().
|
inlinestatic |
Get the data in the next iterated node in dlist.
| pIter | Pointer to initialized iterator. |
Definition at line 405 of file dlistvoid.h.
References _DLIST_DEF, C_DECLS_END, DListVoidAppend(), DListVoidCount(), DListVoidDelete(), DListVoidDeleteAllNodes(), DListVoidDeleteNode(), DListVoidDeleteNodeAt(), DListVoidFindNode(), DListVoidGetData(), DListVoidGetDataAt(), DListVoidGetNodeAt(), DListVoidInsert(), DListVoidIterNodeFirst(), DListVoidIterNodeLast(), DListVoidIterNodeNext(), DListVoidIterNodePrev(), DListVoidNew(), DListVoidPrepend(), DListVoidPrint(), DListVoidUnlinkDataAt(), and DListVoidUnlinkNodeAt().
| DListVoidNode_T* DListVoidIterNodeFirst | ( | DListVoid_T * | pHead, |
| DListVoidIter_T * | pIter | ||
| ) |
Initialize dlist iterator and return the first node in dlist.
| pHead | Pointer to dlist (head). |
| pIter | Pointer to iterator. |
Definition at line 531 of file dlistvoid.c.
References CHKPTR, DLISTVOID_ENTRY, DLISTVOID_IS_EMPTY, dlistvoid_head_t::m_dnodeHead, DListVoidIter_T::m_pHead, DListVoidIter_T::m_pNext, DListVoidIter_T::m_pThis, dlist_node::next, and NULL.
Referenced by DListVoidIterDataFirst(), and DListVoidIterDataNext().
| DListVoidNode_T* DListVoidIterNodeLast | ( | DListVoid_T * | pHead, |
| DListVoidIter_T * | pIter | ||
| ) |
Initialize dlist iterator and return the last node in dlist.
| pHead | Pointer to dlist (head). |
| pIter | Pointer to iterator. |
Definition at line 587 of file dlistvoid.c.
References CHKPTR, DLISTVOID_ENTRY, DLISTVOID_IS_EMPTY, dlistvoid_head_t::m_dnodeHead, DListVoidIter_T::m_pHead, DListVoidIter_T::m_pNext, DListVoidIter_T::m_pThis, NULL, and dlist_node::prev.
Referenced by DListVoidIterDataNext().
| DListVoidNode_T* DListVoidIterNodeNext | ( | DListVoidIter_T * | pIter | ) |
Get the next iterated node in dlist.
| pIter | Pointer to initialized iterator. |
Definition at line 559 of file dlistvoid.c.
References CHKPTR, DLISTVOID_ENTRY, DLISTVOID_IS_EOL, DListVoidIter_T::m_pHead, DListVoidIter_T::m_pNext, DListVoidIter_T::m_pThis, and NULL.
Referenced by DListVoidIterDataNext().
| DListVoidNode_T* DListVoidIterNodePrev | ( | DListVoidIter_T * | pIter | ) |
Get the previous iterated node in dlist.
| pIter | Pointer to initialized iterator. |
Definition at line 615 of file dlistvoid.c.
References CHKPTR, DLISTVOID_ENTRY, DLISTVOID_IS_EOL, DListVoidIter_T::m_pHead, DListVoidIter_T::m_pNext, DListVoidIter_T::m_pThis, and NULL.
Referenced by DListVoidIterDataNext().
| DListVoid_T* DListVoidNew | ( | DListVoidFuncDataCmp_T | fnDataCmp, |
| DListVoidFuncDataDelete_T | fnDataDelete | ||
| ) |
Allocate and initialize new empty dlist.
| fnDataCmp | User-supplied data comparator function. NULL will disable some functions such as searches. |
| fnDataDelete | User-supplied data deallocator. NULL will cause user data not to be deleted. |
Definition at line 110 of file dlistvoid.c.
References _TPTR, DLIST_NODE_INIT, LOGDIAG4, LOGDIAG4CALL, dlistvoid_head_t::m_dnodeHead, dlistvoid_head_t::m_fnDataCmp, dlistvoid_head_t::m_fnDataDelete, dlistvoid_head_t::m_nNumNodes, and NEW.
Referenced by DListVoidIterDataNext(), and DListVoidPrint().
|
inlinestatic |
Unlink node at top of dlist stack.
The dlist can serve as a LIFO stack (last in, first out) by using the push and pop operators.
| pHead | Pointer to dlist (head). |
Definition at line 329 of file dlistvoid.h.
References DListVoidUnlinkDataAt().
| DListVoidNode_T* DListVoidPrepend | ( | DListVoid_T * | pHead, |
| void * | pData | ||
| ) |
Attach the user data to a new node and link to the start of dlist.
| pHead | Pointer to dlist (head). |
| pData | Pointer to user (allocated) data. |
Definition at line 357 of file dlistvoid.c.
References _TPTR, CHKPTR, dlist_prepend(), LOGDIAG4, LOGDIAG4CALL, dlistvoid_node_t::m_dnode, dlistvoid_head_t::m_dnodeHead, dlistvoid_head_t::m_nNumNodes, dlistvoid_node_t::m_pData, NEW, and NULL.
Referenced by DListVoidInsert(), DListVoidIterDataNext(), and DListVoidPush().
| void DListVoidPrint | ( | DListVoid_T * | pHead, |
| DListVoidFuncDataPrint_T | fnDataPr, | ||
| FILE * | fp | ||
| ) |
Traverse dlist and print.
| pHead | Pointer to dlist (head). |
| fnDataPr | User data printing fucntion. |
| fp | Output file pointer |
Definition at line 679 of file dlistvoid.c.
References dlist_for_each_safe, DLISTVOID_ENTRY, DListVoidDeleteAllNodes(), DListVoidDeleteNode(), DListVoidGetData(), DListVoidNew(), dlistvoid_head_t::m_dnodeHead, dlistvoid_node_t::m_pData, and NULL.
Referenced by DListVoidIterDataNext().
|
inlinestatic |
Attach user data to a new node and push on dlist stack.
The dlist can serve as a LIFO stack (last in, first out) by using the push and pop operators.
| pHead | Pointer to dlist (head). |
| pData | Pointer to user (allocated) data. |
Definition at line 308 of file dlistvoid.h.
References DListVoidPrepend().
|
inlinestatic |
Attach user data to a new node and queue on dlist queue.
The dlist can serve as a FIFO queue (first in, first out) by using the queue and dequeue operators.
| pHead | Pointer to dlist (head). |
| pData | Pointer to user (allocated) data. |
Definition at line 348 of file dlistvoid.h.
References DListVoidAppend().
| void* DListVoidUnlinkDataAt | ( | DListVoid_T * | pHead, |
| int | iIndex | ||
| ) |
Unlink the user data from the dlist at the given index.
The node is deleted, but not the attached data.
| pHead | Pointer to dlist (head). |
| iIndex | Index to dlist entry to unlink. |
Definition at line 287 of file dlistvoid.c.
References _TINT, _TPTR, CHKPTR, dlist_delete(), DListVoidGetNodeAt(), LOGDIAG4CALL, dlistvoid_node_t::m_dnode, dlistvoid_head_t::m_nNumNodes, dlistvoid_node_t::m_pData, and NULL.
Referenced by DListVoidDequeue(), DListVoidIterDataNext(), and DListVoidPop().
| DListVoidNode_T* DListVoidUnlinkNodeAt | ( | DListVoid_T * | pHead, |
| int | iIndex | ||
| ) |
Unlink the node from the dlist at the given index.
The node and it's attached data are not deleted.
| pHead | Pointer to dlist (head). |
| iIndex | Index to dlist entry to unlink. |
Definition at line 253 of file dlistvoid.c.
References _TINT, _TPTR, CHKPTR, dlist_delete(), DListVoidGetNodeAt(), LOGDIAG4CALL, dlistvoid_node_t::m_dnode, dlistvoid_head_t::m_nNumNodes, and NULL.
Referenced by DListVoidIterDataNext().