概述
map是按从 小 到 大 排列的键值对容器的集合。在map中, 键 是唯一的。
◆ xwlib_map_itr_backward
#define xwlib_map_itr_backward |
( |
|
map, |
|
|
|
c |
|
) |
| |
值:
&(map)->bclh, \
#define xwlib_bclst_itr_next_entry(p, head, type, member)
向前遍历(iterate over)整个链表,并将节点指针转化为包含它们的外层结构体指针。
向后遍历(从大到小)键值对容器
- 参数
-
[in] | map | map指针 |
[in] | c | 光标指针,指向当前遍历到的键值对容器 |
在文件 map.h 第 97 行定义.
◆ xwlib_map_itr_backward_safe
#define xwlib_map_itr_backward_safe |
( |
|
map, |
|
|
|
c, |
|
|
|
n |
|
) |
| |
值:
&(map)->bclh, \
#define xwlib_bclst_itr_prev_entry_safe(p, n, head, type, member)
向后遍历(iterate over)整个链表,并防止因遍历到的节点被删除而造成的错误。 同时将节点指针转化为包含它们的外层结构体指针。
向后遍历(从大到小)键值对容器,并防止因遍历到的容器被删除而造成的错误
- 参数
-
[in] | map | map指针 |
[in] | c | 光标指针,指向当前遍历到的键值对容器 |
[in] | n | 键值对容器的指针,用于宏内部暂存数据 |
在文件 map.h 第 119 行定义.
◆ xwlib_map_itr_forward
#define xwlib_map_itr_forward |
( |
|
map, |
|
|
|
c |
|
) |
| |
值:
向前遍历(从小到大)键值对容器
- 参数
-
[in] | map | map指针 |
[in] | c | 光标指针,指向当前遍历到的键值对容器 |
在文件 map.h 第 87 行定义.
◆ xwlib_map_itr_forward_safe
#define xwlib_map_itr_forward_safe |
( |
|
map, |
|
|
|
c, |
|
|
|
n |
|
) |
| |
值:
&(map)->bclh, \
#define xwlib_bclst_itr_next_entry_safe(p, n, head, type, member)
向前遍历(iterate over)整个链表,并防止因遍历到的节点被删除而造成的错误。 同时将节点指针转化为包含它们的外层结构体指针。
向前遍历(从小到大)键值对容器,并防止因遍历到的容器被删除而造成的错误
- 参数
-
[in] | map | map指针 |
[in] | c | 光标指针,指向当前遍历到的键值对容器 |
[in] | n | 键值对容器的指针,用于宏内部暂存数据 |
在文件 map.h 第 108 行定义.
◆ xwlib_map_cmp_f
typedef xwssq_t(* xwlib_map_cmp_f) (void *, void *) |
◆ xwlib_map_erase()
删除键值对容器
- 参数
-
[in] | map | map的指针 |
[in] | mc | 待删除的键值对容器的指针 |
- 返回
- 错误码
- 返回值
-
XWOK | 没有错误 |
-ESRCH | 此键值对容器不在键值对集合中 |
<No error
在文件 map.c 第 70 行定义.
71{
73
76 } else {
81 }
82 return rc;
83}
static void xwlib_bclst_del_init(struct xwlib_bclst_node *node)
删除一个节点,并重新初始化它
#define ESRCH
No such process
static bool xwlib_rbtree_tst_node_unlinked(struct xwlib_rbtree_node *n)
测试红黑树节点是否已经链接到红黑树中
static void xwlib_rbtree_init_node(struct xwlib_rbtree_node *rbn)
初始化红黑树节点
void xwlib_rbtree_remove(struct xwlib_rbtree *tree, struct xwlib_rbtree_node *node)
删除一个节点,并修正红黑树的颜色
struct xwlib_bclst_node bcln
struct xwlib_rbtree_node rbn
struct xwlib_rbtree rbtree
◆ xwlib_map_find()
根据 键值 查找容器
- 参数
-
[in] | map | map的指针 |
[in] | key | 键值对容器的指针 |
[out] | mcbuf | 指向指针缓存的指针,此指针缓存用于返回查找到的键值对容器的指针 |
- 返回
- 错误码
- 返回值
-
<No error
在文件 map.c 第 86 行定义.
88{
93
98 if (cmprc < 0) {
100 } else if (cmprc > 0) {
102 } else {
103 break;
104 }
105 }
109 } else {
112 }
113 return rc;
114}
#define xwlib_rbtree_entry(ptr, type, member)
从红黑树节点指针值计算出包含该节点成员的外层结构体的指针值
struct xwlib_rbtree_node * left
struct xwlib_rbtree_node * right
struct xwlib_rbtree_node * root
◆ xwlib_map_init()
初始化键值对容器的map
- 参数
-
[in] | map | map指针 |
[in] | cmp | 比较键大小的函数指针 |
在文件 map.h 第 59 行定义.
60{
64}
static void xwlib_bclst_init_head(struct xwlib_bclst_node *h)
初始化一个链表头。
static void xwlib_rbtree_init(struct xwlib_rbtree *rbt)
初始化红黑树
struct xwlib_bclst_node bclh
◆ xwlib_map_init_container()
static void xwlib_map_init_container |
( |
struct xwlib_map_container * |
mc, |
|
|
void * |
key, |
|
|
void * |
value |
|
) |
| |
|
inlinestatic |
初始化键值对容器
- 参数
-
[in] | mc | 键值对容器的指针 |
[in] | key | 键 |
[in] | value | 值 |
在文件 map.h 第 73 行定义.
75{
80}
static void xwlib_bclst_init_node(struct xwlib_bclst_node *n)
初始化一个链表节点。
◆ xwlib_map_insert()
插入键值对容器
- 参数
-
[in] | map | map的指针 |
[in] | newmc | 待插入的键值对容器的指针 |
- 返回
- 错误码
- 返回值
-
<No error
在文件 map.c 第 17 行定义.
18{
26
33 if (cmprc < 0) {
37 } else if (cmprc > 0) {
41 } else {
43 break;
44 }
45 }
50 } else {
56 } else {
58 }
59 }
63 } else {
65 }
66 return rc;
67}
static void xwlib_bclst_add_front(struct xwlib_bclst_node *newn, struct xwlib_bclst_node *next)
将一个节点加入到另一个节点的前面
static void xwlib_bclst_add_head(struct xwlib_bclst_node *head, struct xwlib_bclst_node *newn)
将一个节点加入链表头部(链表头的后面)
static void xwlib_bclst_add_behind(struct xwlib_bclst_node *newn, struct xwlib_bclst_node *prev)
将一个节点加入到另一个节点的后面
#define EEXIST
File exists
#define xwlib_rbtree_tst_left(lpc)
测试当前lpc中的位置信息是否为左侧
static bool xwlib_rbtree_tst_link_root(struct xwlib_rbtree *rbt, struct xwlib_rbtree_node **link)
测试是否连接到根节点(是否为根节点的子节点)
#define xwlib_rbtree_get_link(lpc)
获取lpc信息中的link指针
void xwlib_rbtree_insert_color(struct xwlib_rbtree *tree, struct xwlib_rbtree_node *node)
插入一个红色节点后修正红黑树的颜色
static struct xwlib_rbtree_node * xwlib_rbtree_get_parent_from_lpc(xwptr_t lpc)
从lpc信息返回父节点指针
static void xwlib_rbtree_link(struct xwlib_rbtree_node *node, xwptr_t lpc)
链接节点,并设置位置及颜色信息