23#ifndef ZEPHYR_INCLUDE_SYS_SLIST_H_
24#define ZEPHYR_INCLUDE_SYS_SLIST_H_
69#define SYS_SLIST_FOR_EACH_NODE(__sl, __sn) \
70 Z_GENLIST_FOR_EACH_NODE(slist, __sl, __sn)
92#define SYS_SLIST_ITERATE_FROM_NODE(__sl, __sn) \
93 Z_GENLIST_ITERATE_FROM_NODE(slist, __sl, __sn)
111#define SYS_SLIST_FOR_EACH_NODE_SAFE(__sl, __sn, __sns) \
112 Z_GENLIST_FOR_EACH_NODE_SAFE(slist, __sl, __sn, __sns)
122#define SYS_SLIST_CONTAINER(__ln, __cn, __n) \
123 Z_GENLIST_CONTAINER(__ln, __cn, __n)
132#define SYS_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n) \
133 Z_GENLIST_PEEK_HEAD_CONTAINER(slist, __sl, __cn, __n)
142#define SYS_SLIST_PEEK_TAIL_CONTAINER(__sl, __cn, __n) \
143 Z_GENLIST_PEEK_TAIL_CONTAINER(slist, __sl, __cn, __n)
151#define SYS_SLIST_PEEK_NEXT_CONTAINER(__cn, __n) \
152 Z_GENLIST_PEEK_NEXT_CONTAINER(slist, __cn, __n)
168#define SYS_SLIST_FOR_EACH_CONTAINER(__sl, __cn, __n) \
169 Z_GENLIST_FOR_EACH_CONTAINER(slist, __sl, __cn, __n)
186#define SYS_SLIST_FOR_EACH_CONTAINER_SAFE(__sl, __cn, __cns, __n) \
187 Z_GENLIST_FOR_EACH_CONTAINER_SAFE(slist, __sl, __cn, __cns, __n)
212#define SYS_SLIST_STATIC_INIT(ptr_to_list) {NULL, NULL}
221 parent->next = child;
271Z_GENLIST_IS_EMPTY(slist)
284Z_GENLIST_PEEK_NEXT_NO_CHECK(slist, snode)
295Z_GENLIST_PEEK_NEXT(slist, snode)
308Z_GENLIST_PREPEND(slist, snode)
321Z_GENLIST_APPEND(slist, snode)
335 void *head,
void *tail);
337Z_GENLIST_APPEND_LIST(slist, snode)
351Z_GENLIST_MERGE_LIST(slist, snode)
366Z_GENLIST_INSERT(slist, snode)
380Z_GENLIST_GET_NOT_EMPTY(slist, snode)
393Z_GENLIST_GET(slist, snode)
409Z_GENLIST_REMOVE(slist, snode)
437Z_GENLIST_FIND(slist, snode)
448Z_GENLIST_LEN(slist, snode)
451Z_GENLIST_FIND_AND_REMOVE(slist, snode)
static sys_snode_t * sys_slist_get_not_empty(sys_slist_t *list)
Fetch and remove the first node of the given list.
Definition slist.h:380
static void sys_slist_merge_slist(sys_slist_t *list, sys_slist_t *list_to_append)
merge two slists, appending the second one to the first
Definition slist.h:351
static sys_snode_t * sys_slist_peek_next_no_check(const sys_snode_t *node)
Peek the next node from current node, node is not NULL.
Definition slist.h:284
static bool sys_slist_find(const sys_slist_t *list, const sys_snode_t *node, sys_snode_t **prev)
Find if a node is already linked in a singly linked list.
Definition slist.h:437
static bool sys_slist_find_and_remove(sys_slist_t *list, sys_snode_t *node)
Find and remove a node from a list.
Definition slist.h:451
struct _slist sys_slist_t
Single-linked list structure.
Definition slist.h:52
static sys_snode_t * sys_slist_get(sys_slist_t *list)
Fetch and remove the first node of the given list.
Definition slist.h:393
static sys_snode_t * sys_slist_peek_tail(const sys_slist_t *list)
Peek the last node from the list.
Definition slist.h:253
static sys_snode_t * sys_slist_peek_head(const sys_slist_t *list)
Peek the first node from the list.
Definition slist.h:241
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:42
static void sys_slist_append(sys_slist_t *list, sys_snode_t *node)
Append a node to the given list.
Definition slist.h:321
static void sys_slist_init(sys_slist_t *list)
Initialize a list.
Definition slist.h:202
static size_t sys_slist_len(const sys_slist_t *list)
Compute the size of the given list in O(n) time.
Definition slist.h:448
static void sys_slist_append_list(sys_slist_t *list, void *head, void *tail)
Append a list to the given list.
Definition slist.h:337
static sys_snode_t * sys_slist_peek_next(const sys_snode_t *node)
Peek the next node from current node.
Definition slist.h:295
static void sys_slist_prepend(sys_slist_t *list, sys_snode_t *node)
Prepend a node to the given list.
Definition slist.h:308
static void sys_slist_insert(sys_slist_t *list, sys_snode_t *prev, sys_snode_t *node)
Insert a node to the given list.
Definition slist.h:366
static void sys_slist_remove(sys_slist_t *list, sys_snode_t *prev_node, sys_snode_t *node)
Remove a node.
Definition slist.h:409
static bool sys_slist_is_empty(const sys_slist_t *list)
Test if the given list is empty.
Definition slist.h:271
Internal generic linked-list macro generators shared by slist/dlist/sflist.