zephyr单向链表
zephyr链表使用静态内联函数, 只有 .h 文件, 没有对应的 .c 文件.
slist.h 位于 /${ZEPHYR_BASE}/include/misc/slist.h
链表定义
#节点定义, 此处添加节点的数据
struct _snode {
struct _snode *next;
};
#链表定义, 链表头、尾指针
struct _slist {
sys_snode_t *head;
sys_snode_t *tail;
};
#重定义节点类型, 兼容之前的定义
typedef struct _snode sys_snode_t;
typedef struct _slist sys_slist_t;
常用链表函数
- 初始化链表
# 将头尾指针置为空
static inline void sys_slist_init(sys_slist_t *list)
{
list->head = NULL;
list->tail = NULL;
}
- 判断链表是否为空
#True: 链表为空, False: 链表不为空
static inline bool sys_slist_is_empty(sys_slist_t *list)
{
return (!list->head);
}
- 返回链表头/尾节点
#返回头结点的指针
static inline sys_snode_t *sys_slist_peek_head(sys_slist_t *list)
{
return list->head;
}
#返回尾结点的指针
static inline sys_snode_t *sys_slist_peek_tail(sys_slist_t *l