| 
    Zephyr Project API
    3.4.0
    
   A Scalable Open Source RTOS 
   | 
 
Doubly-linked list implementation. More...
Go to the source code of this file.
Macros | |
| #define | SYS_DLIST_FOR_EACH_NODE(__dl, __dn) | 
| Provide the primitive to iterate on a list Note: the loop is unsafe and thus __dn should not be removed.  More... | |
| #define | SYS_DLIST_ITERATE_FROM_NODE(__dl, __dn) | 
| Provide the primitive to iterate on a list, from a node in the list Note: the loop is unsafe and thus __dn should not be removed.  More... | |
| #define | SYS_DLIST_FOR_EACH_NODE_SAFE(__dl, __dn, __dns) | 
| Provide the primitive to safely iterate on a list Note: __dn can be removed, it will not break the loop.  More... | |
| #define | SYS_DLIST_CONTAINER(__dn, __cn, __n) ((__dn != NULL) ? CONTAINER_OF(__dn, __typeof__(*__cn), __n) : NULL) | 
| #define | SYS_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n) SYS_DLIST_CONTAINER(sys_dlist_peek_head(__dl), __cn, __n) | 
| #define | SYS_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n) | 
| #define | SYS_DLIST_FOR_EACH_CONTAINER(__dl, __cn, __n) | 
| Provide the primitive to iterate on a list under a container Note: the loop is unsafe and thus __cn should not be detached.  More... | |
| #define | SYS_DLIST_FOR_EACH_CONTAINER_SAFE(__dl, __cn, __cns, __n) | 
| Provide the primitive to safely iterate on a list under a container Note: __cn can be detached, it will not break the loop.  More... | |
| #define | SYS_DLIST_STATIC_INIT(ptr_to_list) { {(ptr_to_list)}, {(ptr_to_list)} } | 
Typedefs | |
| typedef struct _dnode | sys_dlist_t | 
| typedef struct _dnode | sys_dnode_t | 
Functions | |
| static void | sys_dlist_init (sys_dlist_t *list) | 
| initialize list to its empty state  More... | |
| static void | sys_dnode_init (sys_dnode_t *node) | 
| initialize node to its state when not in a list  More... | |
| static bool | sys_dnode_is_linked (const sys_dnode_t *node) | 
| check if a node is a member of any list  More... | |
| static bool | sys_dlist_is_head (sys_dlist_t *list, sys_dnode_t *node) | 
| check if a node is the list's head  More... | |
| static bool | sys_dlist_is_tail (sys_dlist_t *list, sys_dnode_t *node) | 
| check if a node is the list's tail  More... | |
| static bool | sys_dlist_is_empty (sys_dlist_t *list) | 
| check if the list is empty  More... | |
| static bool | sys_dlist_has_multiple_nodes (sys_dlist_t *list) | 
| check if more than one node present  More... | |
| static sys_dnode_t * | sys_dlist_peek_head (sys_dlist_t *list) | 
| get a reference to the head item in the list  More... | |
| static sys_dnode_t * | sys_dlist_peek_head_not_empty (sys_dlist_t *list) | 
| get a reference to the head item in the list  More... | |
| static sys_dnode_t * | sys_dlist_peek_next_no_check (sys_dlist_t *list, sys_dnode_t *node) | 
| get a reference to the next item in the list, node is not NULL  More... | |
| static sys_dnode_t * | sys_dlist_peek_next (sys_dlist_t *list, sys_dnode_t *node) | 
| get a reference to the next item in the list  More... | |
| static sys_dnode_t * | sys_dlist_peek_prev_no_check (sys_dlist_t *list, sys_dnode_t *node) | 
| get a reference to the previous item in the list, node is not NULL  More... | |
| static sys_dnode_t * | sys_dlist_peek_prev (sys_dlist_t *list, sys_dnode_t *node) | 
| get a reference to the previous item in the list  More... | |
| static sys_dnode_t * | sys_dlist_peek_tail (sys_dlist_t *list) | 
| get a reference to the tail item in the list  More... | |
| static void | sys_dlist_append (sys_dlist_t *list, sys_dnode_t *node) | 
| add node to tail of list  More... | |
| static void | sys_dlist_prepend (sys_dlist_t *list, sys_dnode_t *node) | 
| add node to head of list  More... | |
| static void | sys_dlist_insert (sys_dnode_t *successor, sys_dnode_t *node) | 
| Insert a node into a list.  More... | |
| static void | sys_dlist_insert_at (sys_dlist_t *list, sys_dnode_t *node, int(*cond)(sys_dnode_t *node, void *data), void *data) | 
| insert node at position  More... | |
| static void | sys_dlist_remove (sys_dnode_t *node) | 
| remove a specific node from a list  More... | |
| static sys_dnode_t * | sys_dlist_get (sys_dlist_t *list) | 
| get the first node in a list  More... | |
Doubly-linked list implementation.
Doubly-linked list implementation using inline macros/functions. This API is not thread safe, and thus if a list is used across threads, calls to functions must be protected with synchronization primitives.
The lists are expected to be initialized such that both the head and tail pointers point to the list itself. Initializing the lists in such a fashion simplifies the adding and removing of nodes to/from the list.