![]() |
librnr
1.14.5
RoadNarrows Robotics Common Library 1
|
Doubly linked list (dlist) of void pointers definitions. More...
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "rnr/rnrconfig.h"#include "rnr/dlist.h"#include "rnr/dlistvoid.h"#include "rnr/log.h"#include "rnr/new.h"Go to the source code of this file.
Classes | |
| struct | dlistvoid_head_t |
| Unit Tests (define to build test main) More... | |
| struct | dlistvoid_node_t |
| Doubly linked list node structure. More... | |
Macros | |
| #define | DLISTVOID_ENTRY(dnode) dlist_entry(dnode, DListVoidNode_T, m_dnode) |
| Get embedding node DListVoidNode_T. More... | |
| #define | DLISTVOID_IS_EMPTY(dvoidhead) dlist_is_empty(&((dvoidhead)->m_dnodeHead)) |
| Test if DListVoid_T* holds the empty list. More... | |
| #define | DLISTVOID_IS_EOL(dvoidhead, pdnode) ((pdnode) == &((dvoidhead)->m_dnodeHead)) |
| Test if node is at end-of-list. More... | |
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... | |
Doubly linked list (dlist) of void pointers definitions.
—
Definition in file dlistvoid.c.
| #define DLISTVOID_ENTRY | ( | dnode | ) | dlist_entry(dnode, DListVoidNode_T, m_dnode) |
Get embedding node DListVoidNode_T.
| dnode | dnode_t * |
Definition at line 75 of file dlistvoid.c.
Referenced by DListVoidDeleteAllNodes(), DListVoidFindNode(), DListVoidGetNodeAt(), DListVoidIterNodeFirst(), DListVoidIterNodeLast(), DListVoidIterNodeNext(), DListVoidIterNodePrev(), and DListVoidPrint().
| #define DLISTVOID_IS_EMPTY | ( | dvoidhead | ) | dlist_is_empty(&((dvoidhead)->m_dnodeHead)) |
Test if DListVoid_T* holds the empty list.
| dvoidhead | dnode_t * |
Definition at line 82 of file dlistvoid.c.
Referenced by DListVoidDeleteNode(), DListVoidIterNodeFirst(), and DListVoidIterNodeLast().
| #define DLISTVOID_IS_EOL | ( | dvoidhead, | |
| pdnode | |||
| ) | ((pdnode) == &((dvoidhead)->m_dnodeHead)) |
Test if node is at end-of-list.
| dvoidhead | dnode_t * |
| pdnode | dnode_t * |
Definition at line 91 of file dlistvoid.c.
Referenced by DListVoidIterNodeNext(), and DListVoidIterNodePrev().
| 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().
| 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().
| 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().
| 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().
| 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().