XWOS API
4.0
XWOS C/C++ API参考手册
|
XWOS通用库:双循环链表 更多...
#include <xwos/standard.h>
结构体 | |
struct | xwlib_bclst_node |
双循环链表的节点 更多... | |
宏定义 | |
#define | xwlib_bclst_head xwlib_bclst_node |
双循环链表头 | |
#define | XWLIB_BCLST_HEAD_INIT(n) (struct xwlib_bclst_head){&(n), &(n)} |
双循环链表头的初始化结构体 | |
#define | XWLIB_BCLST_NODE_INIT(n) (struct xwlib_bclst_node){&(n), &(n)} |
双循环链表节点的初始化结构体 | |
#define | xwlib_bclst_entry(ptr, type, member) xwcc_derof((ptr), type, member) |
从一个链表节点的指针值计算出包含此节点成员的外层结构体的指针值。 | |
#define | xwlib_bclst_first_entry(head, type, member) xwlib_bclst_entry((head)->next, type, member) |
获得包含链表第一个节点的外层结构体的指针。 | |
#define | xwlib_bclst_last_entry(head, type, member) xwlib_bclst_entry((head)->prev, type, member) |
获得包含链表最后一个节点的外层结构体的指针。 | |
#define | xwlib_bclst_next_entry(p, type, member) xwlib_bclst_entry((p)->member.next, type, member) |
从一个包含链表节点的外层结构体指针得到下一个外层结构体的指针 | |
#define | xwlib_bclst_prev_entry(p, type, member) xwlib_bclst_entry((p)->member.prev, type, member) |
从一个包含链表节点的外层结构体指针得到上一个外层结构体的指针 | |
#define | xwlib_bclst_itr_next(p, head) for ((p) = (head)->next; (p) != (head); (p) = (p)->next) |
向前遍历(iterate over)整个链表 | |
#define | xwlib_bclst_itr_prev(p, head) for ((p) = (head)->prev; (p) != (head); (p) = (p)->prev) |
向后遍历(iterate over)整个链表 | |
#define | xwlib_bclst_itr_next_safe(p, n, head) |
向前遍历(iterate over)整个链表,并防止因遍历到的节点被删除而造成的错误。 | |
#define | xwlib_bclst_itr_prev_safe(p, n, head) |
向后遍历(iterate over)整个链表,并防止因遍历到的节点被删除而造成的错误。 | |
#define | xwlib_bclst_itr_next_entry(p, head, type, member) |
向前遍历(iterate over)整个链表,并将节点指针转化为包含它们的外层结构体指针。 | |
#define | xwlib_bclst_itr_prev_entry(p, head, type, member) |
向后遍历(iterate over)整个链表,并将节点指针转化为包含它们的外层结构体指针。 | |
#define | xwlib_bclst_itr_next_entry_safe(p, n, head, type, member) |
向前遍历(iterate over)整个链表,并防止因遍历到的节点被删除而造成的错误。 同时将节点指针转化为包含它们的外层结构体指针。 | |
#define | xwlib_bclst_itr_next_entry_del(p, head, type, member) |
以删除节点为目的,向前遍历(iterate over)整个链表, 同时将节点指针转化为包含它们的外层结构体指针。 | |
#define | xwlib_bclst_itr_prev_entry_safe(p, n, head, type, member) |
向后遍历(iterate over)整个链表,并防止因遍历到的节点被删除而造成的错误。 同时将节点指针转化为包含它们的外层结构体指针。 | |
#define | xwlib_bclst_itr_prev_entry_del(p, head, type, member) |
以删除节点为目的,向后遍历(iterate over)整个链表, 同时将节点指针转化为包含它们的外层结构体指针。 | |
函数 | |
static void | xwlib_bclst_init_head (struct xwlib_bclst_node *h) |
初始化一个链表头。 | |
static void | xwlib_bclst_init_node (struct xwlib_bclst_node *n) |
初始化一个链表节点。 | |
static bool | xwlib_bclst_tst_empty (const struct xwlib_bclst_node *h) |
测试链表是否为空。 | |
static bool | xwlib_bclst_tst_first (struct xwlib_bclst_node *h, struct xwlib_bclst_node *n) |
测试一个节点是否为指定链表的第一个节点。 | |
static bool | xwlib_bclst_tst_last (struct xwlib_bclst_node *h, struct xwlib_bclst_node *n) |
测试一个节点是否为指定链表的最后一个节点。 | |
static bool | xwlib_bclst_tst_empty_carefully (const struct xwlib_bclst_node *h) |
测试链表是否为空且是否没有正在被修改 | |
static void | xwlib_bclst_add_between (struct xwlib_bclst_node *newn, struct xwlib_bclst_node *prev, struct xwlib_bclst_node *next) |
将一个新节点加入到prev与next之间 | |
static void | xwlib_bclst_add_front (struct xwlib_bclst_node *newn, struct xwlib_bclst_node *next) |
将一个节点加入到另一个节点的前面 | |
static void | xwlib_bclst_add_behind (struct xwlib_bclst_node *newn, struct xwlib_bclst_node *prev) |
将一个节点加入到另一个节点的后面 | |
static void | xwlib_bclst_add_head (struct xwlib_bclst_node *head, struct xwlib_bclst_node *newn) |
将一个节点加入链表头部(链表头的后面) | |
static void | xwlib_bclst_add_tail (struct xwlib_bclst_node *head, struct xwlib_bclst_node *newn) |
将一个节点加入链表尾部(链表头的前面) | |
static void | xwlib_bclst_del_between (struct xwlib_bclst_node *prev, struct xwlib_bclst_node *next) |
删除prev节点与next节点之间的节点 | |
static void | xwlib_bclst_del (struct xwlib_bclst_node *node) |
删除一个节点 | |
static void | xwlib_bclst_del_init (struct xwlib_bclst_node *node) |
删除一个节点,并重新初始化它 | |
static void | xwlib_bclst_replace (struct xwlib_bclst_node *newn, struct xwlib_bclst_node *oldn) |
用一个新节点代替旧节点 | |
static void | xwlib_bclst_replace_init (struct xwlib_bclst_node *newn, struct xwlib_bclst_node *oldn) |
用一个新节点代替旧节点,并重新初始化旧节点 | |
static void | xwlib_bclst_splice_between (struct xwlib_bclst_node *list, struct xwlib_bclst_node *prev, struct xwlib_bclst_node *next) |
将一条链表衔接到另一条链表的prev节点与next节点之间 | |
static void | xwlib_bclst_splice_head (struct xwlib_bclst_node *head, struct xwlib_bclst_node *list) |
将一条链表衔接到另一条链表头之后 | |
static void | xwlib_bclst_splice_tail (struct xwlib_bclst_node *head, struct xwlib_bclst_node *list) |
将一条链表衔接到另一条链表头之前 | |
static void | xwlib_bclst_splice_head_init (struct xwlib_bclst_node *head, struct xwlib_bclst_node *list) |
将一条链表衔接到另一条链表头之后,并重新初始化剩下的空链表头 | |
static void | xwlib_bclst_splice_tail_init (struct xwlib_bclst_node *head, struct xwlib_bclst_node *list) |
将一条链表衔接到另一条链表头之前,并重新初始化剩下的空链表头 | |
static void | xwlib_bclst_insseg_between (struct xwlib_bclst_node *seg, struct xwlib_bclst_node *prev, struct xwlib_bclst_node *next) |
将一段链表片段(无链表头)衔接到另一条链表的prev节点与next节点之间 | |
static void | xwlib_bclst_insseg_head (struct xwlib_bclst_node *head, struct xwlib_bclst_node *seg) |
将一段链表片段(无链表头)衔接到另一条链表头之后 | |
static void | xwlib_bclst_insseg_tail (struct xwlib_bclst_node *head, struct xwlib_bclst_node *seg) |
将一段链表片段(无链表头)衔接到另一条链表头之前 | |
XWOS通用库:双循环链表
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
在文件 bclst.h 中定义.