![]() |
RT-Thread API参考手册
4.0.3
嵌入式实时操作系统
|
双向链表 更多...
结构体 | |
| 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 | 被获取的链表 |