28#ifndef ZEPHYR_INCLUDE_SYS_SFLIST_H_
29#define ZEPHYR_INCLUDE_SYS_SFLIST_H_
74#define SYS_SFLIST_FOR_EACH_NODE(__sl, __sn) \
75 Z_GENLIST_FOR_EACH_NODE(sflist, __sl, __sn)
97#define SYS_SFLIST_ITERATE_FROM_NODE(__sl, __sn) \
98 Z_GENLIST_ITERATE_FROM_NODE(sflist, __sl, __sn)
116#define SYS_SFLIST_FOR_EACH_NODE_SAFE(__sl, __sn, __sns) \
117 Z_GENLIST_FOR_EACH_NODE_SAFE(sflist, __sl, __sn, __sns)
127#define SYS_SFLIST_CONTAINER(__ln, __cn, __n) \
128 Z_GENLIST_CONTAINER(__ln, __cn, __n)
137#define SYS_SFLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n) \
138 Z_GENLIST_PEEK_HEAD_CONTAINER(sflist, __sl, __cn, __n)
147#define SYS_SFLIST_PEEK_TAIL_CONTAINER(__sl, __cn, __n) \
148 Z_GENLIST_PEEK_TAIL_CONTAINER(sflist, __sl, __cn, __n)
156#define SYS_SFLIST_PEEK_NEXT_CONTAINER(__cn, __n) \
157 Z_GENLIST_PEEK_NEXT_CONTAINER(sflist, __cn, __n)
173#define SYS_SFLIST_FOR_EACH_CONTAINER(__sl, __cn, __n) \
174 Z_GENLIST_FOR_EACH_CONTAINER(sflist, __sl, __cn, __n)
191#define SYS_SFLIST_FOR_EACH_CONTAINER_SAFE(__sl, __cn, __cns, __n) \
192 Z_GENLIST_FOR_EACH_CONTAINER_SAFE(sflist, __sl, __cn, __cns, __n)
217#define SYS_SFLIST_STATIC_INIT(ptr_to_list) {NULL, NULL}
220#define SYS_SFLIST_FLAGS_MASK ((uintptr_t)(__alignof__(sys_sfnode_t) - 1))
231static inline void z_sfnode_next_set(
sys_sfnode_t *parent,
236 parent->next_and_flags = cur_flags | (
uintptr_t)child;
306 node->next_and_flags =
flags;
323 node->next_and_flags = (
uintptr_t)(z_sfnode_next_peek(node)) |
flags;
339Z_GENLIST_IS_EMPTY(sflist)
352Z_GENLIST_PEEK_NEXT_NO_CHECK(sflist, sfnode)
363Z_GENLIST_PEEK_NEXT(sflist, sfnode)
376Z_GENLIST_PREPEND(sflist, sfnode)
389Z_GENLIST_APPEND(sflist, sfnode)
403 void *head,
void *tail);
405Z_GENLIST_APPEND_LIST(sflist, sfnode)
419Z_GENLIST_MERGE_LIST(sflist, sfnode)
434Z_GENLIST_INSERT(sflist, sfnode)
448Z_GENLIST_GET_NOT_EMPTY(sflist, sfnode)
461Z_GENLIST_GET(sflist, sfnode)
477Z_GENLIST_REMOVE(sflist, sfnode)
492Z_GENLIST_FIND_AND_REMOVE(sflist, sfnode)
503Z_GENLIST_LEN(sflist, sfnode)
struct _sfnode sys_sfnode_t
Flagged single-linked list node structure.
Definition sflist.h:47
static bool sys_sflist_is_empty(const sys_sflist_t *list)
Test if the given list is empty.
Definition sflist.h:339
static sys_sfnode_t * sys_sflist_get_not_empty(sys_sflist_t *list)
Fetch and remove the first node of the given list.
Definition sflist.h:448
static sys_sfnode_t * sys_sflist_get(sys_sflist_t *list)
Fetch and remove the first node of the given list.
Definition sflist.h:461
static sys_sfnode_t * sys_sflist_peek_next_no_check(const sys_sfnode_t *node)
Peek the next node from current node, node is not NULL.
Definition sflist.h:352
static size_t sys_sflist_len(const sys_sflist_t *list)
Compute the size of the given list in O(n) time.
Definition sflist.h:503
#define SYS_SFLIST_FLAGS_MASK
Definition sflist.h:220
static void sys_sflist_remove(sys_sflist_t *list, sys_sfnode_t *prev_node, sys_sfnode_t *node)
Remove a node.
Definition sflist.h:477
static void sys_sflist_merge_sflist(sys_sflist_t *list, sys_sflist_t *list_to_append)
merge two sflists, appending the second one to the first
Definition sflist.h:419
static void sys_sflist_append(sys_sflist_t *list, sys_sfnode_t *node)
Append a node to the given list.
Definition sflist.h:389
static void sys_sflist_prepend(sys_sflist_t *list, sys_sfnode_t *node)
Prepend a node to the given list.
Definition sflist.h:376
static void sys_sfnode_flags_set(sys_sfnode_t *node, uint8_t flags)
Set flags value for an sflist node.
Definition sflist.h:320
static void sys_sflist_insert(sys_sflist_t *list, sys_sfnode_t *prev, sys_sfnode_t *node)
Insert a node to the given list.
Definition sflist.h:434
static sys_sfnode_t * sys_sflist_peek_tail(const sys_sflist_t *list)
Peek the last node from the list.
Definition sflist.h:268
static void sys_sflist_init(sys_sflist_t *list)
Initialize a list.
Definition sflist.h:207
struct _sflist sys_sflist_t
Flagged single-linked list structure.
Definition sflist.h:57
static sys_sfnode_t * sys_sflist_peek_head(const sys_sflist_t *list)
Peek the first node from the list.
Definition sflist.h:256
static sys_sfnode_t * sys_sflist_peek_next(const sys_sfnode_t *node)
Peek the next node from current node.
Definition sflist.h:363
static void sys_sflist_append_list(sys_sflist_t *list, void *head, void *tail)
Append a list to the given list.
Definition sflist.h:405
static uint8_t sys_sfnode_flags_get(const sys_sfnode_t *node)
Fetch flags value for a particular sfnode.
Definition sflist.h:284
static bool sys_sflist_find_and_remove(sys_sflist_t *list, sys_sfnode_t *node)
Find and remove a node from a list.
Definition sflist.h:492
static void sys_sfnode_init(sys_sfnode_t *node, uint8_t flags)
Initialize an sflist node.
Definition sflist.h:303
Internal generic linked-list macro generators shared by slist/dlist/sflist.
flags
Definition parser.h:97
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105