RT-Thread API参考手册
3.1.1
嵌入式实时操作系统
|
双向链表 更多...
结构体 | |
struct | rt_list_node |
双向链表节点 更多... | |
宏定义 | |
#define | rt_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) |
获取type结构体中member成员在这个结构体中的偏移 | |
#define | RT_LIST_OBJECT_INIT(object) { &(object), &(object) } |
初始化链表对象 | |
#define | rt_list_entry(node, type, member) rt_container_of(node, type, member) |
获取结构体变量的地址 更多... | |
#define | rt_list_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next) |
遍历链表 更多... | |
#define | rt_list_for_each_safe(pos, n, head) |
安全地遍历链表 更多... | |
#define | rt_list_for_each_entry(pos, head, member) |
循环遍历head链表中每一个pos中的member成员 更多... | |
#define | rt_list_for_each_entry_safe(pos, n, head, member) |
#define | rt_list_first_entry(ptr, type, member) rt_list_entry((ptr)->next, type, member) |
获取链表中的第一个元素 更多... | |
类型定义 | |
typedef struct rt_list_node | rt_list_t |
双向链表类型定义 | |
函数 | |
rt_inline void | rt_list_init (rt_list_t *l) |
初始化链表 更多... | |
rt_inline void | rt_list_insert_after (rt_list_t *l, rt_list_t *n) |
链表头插 更多... | |
rt_inline void | rt_list_insert_before (rt_list_t *l, rt_list_t *n) |
链表尾插 更多... | |
rt_inline void | rt_list_remove (rt_list_t *n) |
移除一个链表节点 更多... | |
rt_inline int | rt_list_isempty (const rt_list_t *l) |
判断链表是否为空 更多... | |
rt_inline unsigned int | rt_list_len (const rt_list_t *l) |
获取链表长度 更多... | |
双向链表
#define rt_list_entry | ( | node, | |
type, | |||
member | |||
) | rt_container_of(node, type, member) |
获取结构体变量的地址
node | 入口点 |
type | 结构体的类型 |
member | 结构体中链表的成员名 |
#define rt_list_for_each | ( | pos, | |
head | |||
) | for (pos = (head)->next; pos != (head); pos = pos->next) |
遍历链表
pos | 指向宿主结构的指针,在for循环中是一个迭代变量 |
head | 链表头 |
#define rt_list_for_each_safe | ( | pos, | |
n, | |||
head | |||
) |
安全地遍历链表
pos | 指向宿主结构的指针,在for循环中是一个迭代变量 |
n | 用于临时存储下一个数据结构的指针变量 |
head | 链表头 |
#define rt_list_for_each_entry | ( | pos, | |
head, | |||
member | |||
) |
循环遍历head链表中每一个pos中的member成员
pos | 指向宿主结构的指针,在for循环中是一个迭代变量 |
head | 链表头 |
member | 结构体中链表的成员名 |
#define rt_list_for_each_entry_safe | ( | pos, | |
n, | |||
head, | |||
member | |||
) |
rt_list_for_each_entry_safe - 相比于list_for_each_entry而言, list_for_each_entry_safe用指针n对链表的下一个数据结构进行了临时存储, 所以如果在遍历链表的时候可能要删除链表中的当前项,用list_for_each_entry_safe 可以安全的删除,而不会影响接下来的遍历过程(用n 指针可以继续完成接下来的遍历, 而list_for_each_entry则无法继续遍历)。
pos | 指向宿主结构的指针,在for循环中是一个迭代变量 |
n | 用于临时存储下一个数据结构的指针变量 |
head | 链表头 |
member | 结构体中链表的成员名 |
#define rt_list_first_entry | ( | ptr, | |
type, | |||
member | |||
) | rt_list_entry((ptr)->next, type, member) |
获取链表中的第一个元素
ptr | 链表头 |
type | 结构体类型 |
member | 结构体中链表的成员名 |
请注意,该链表不能为空。
rt_inline void rt_list_init | ( | rt_list_t * | l | ) |
初始化链表
l | 将被初始化的链表 |
rt_inline void rt_list_remove | ( | rt_list_t * | n | ) |
移除一个链表节点
n | 将要从链表中删除的节点 |
rt_inline int rt_list_isempty | ( | const rt_list_t * | l | ) |
判断链表是否为空
l | 被测试的链表 |
rt_inline unsigned int rt_list_len | ( | const rt_list_t * | l | ) |
获取链表长度
l | 被获取的链表 |