通用基数树/稀疏数组¶
非常简单和最小化,支持最大 GENRADIX_NODE_SIZE 的任意大小的条目。
genradix 使用它将存储的类型定义,如下所示
static GENRADIX(struct foo) foo_genradix;
主要操作是
genradix_init(radix) - 初始化一个空的 genradix
genradix_free(radix) - 释放 genradix 拥有的所有内存并重新初始化它
genradix_ptr(radix, idx) - 获取 idx 处的条目的指针,如果该条目不存在则返回 NULL
genradix_ptr_alloc(radix, idx, gfp) - 获取一个条目的指针,如果需要则分配它
genradix_for_each(radix, iter, p) - 迭代 genradix 中的每个条目
基数树一次分配一页条目,因此可能存在从未显式分配的条目 - 它们将被初始化为全零。
在内部,genradix 只是页面的基数树,并且索引以字节偏移量来工作。此头文件中的包装器使用基数包含的类型的 sizeof 来计算来自索引的字节偏移量 - 请参阅 __idx_to_offset。
通用基数树函数¶
-
genradix_init¶
genradix_init (_radix)
初始化一个 genradix
参数
_radix
要初始化的 genradix
描述
不会失败
-
genradix_free¶
genradix_free (_radix)
释放 genradix 拥有的所有内存
参数
_radix
要释放的 genradix
描述
释放后,_radix 将被重新初始化并为空
-
genradix_ptr¶
genradix_ptr (_radix, _idx)
获取 genradix 条目的指针
参数
_radix
要访问的 genradix
_idx
要获取的索引
描述
返回指向 _idx 处条目的指针,如果该条目不存在则返回 NULL。
-
genradix_ptr_alloc¶
genradix_ptr_alloc (_radix, _idx, _gfp)
获取 genradix 条目的指针,如果需要则分配它
参数
_radix
要访问的 genradix
_idx
要获取的索引
_gfp
gfp 掩码
描述
返回指向 _idx 处条目的指针,如果分配失败则返回 NULL
-
genradix_iter_init¶
genradix_iter_init (_radix, _idx)
初始化 genradix_iter
参数
_radix
将被迭代的 genradix
_idx
开始迭代的索引
-
genradix_iter_peek¶
genradix_iter_peek (_iter, _radix)
获取迭代器当前位置或之上的第一个条目
参数
_iter
一个 genradix_iter
_radix
正在迭代的 genradix
描述
如果 _iter 的当前位置或之上没有更多条目,则返回 NULL
-
genradix_iter_peek_prev¶
genradix_iter_peek_prev (_iter, _radix)
获取迭代器当前位置或之下的第一个条目
参数
_iter
一个 genradix_iter
_radix
正在迭代的 genradix
描述
如果 _iter 的当前位置或之下没有更多条目,则返回 NULL
-
genradix_for_each¶
genradix_for_each (_radix, _iter, _p)
迭代 genradix 中的条目
参数
_radix
要迭代的 genradix
_iter
一个 genradix_iter 来跟踪当前位置
_p
指向 genradix 条目类型的指针
描述
在每次迭代时,_p 将指向当前条目,而 _iter.pos 将是当前条目的索引。
-
genradix_for_each_reverse¶
genradix_for_each_reverse (_radix, _iter, _p)
迭代 genradix 中的条目,反向顺序
参数
_radix
要迭代的 genradix
_iter
一个 genradix_iter 来跟踪当前位置
_p
指向 genradix 条目类型的指针
描述
在每次迭代时,_p 将指向当前条目,而 _iter.pos 将是当前条目的索引。
-
genradix_prealloc¶
genradix_prealloc (_radix, _nr, _gfp)
预分配通用基数树中的条目
参数
_radix
要预分配的 genradix
_nr
要预分配的条目数
_gfp
gfp 掩码
描述
成功时返回 0,失败时返回 -ENOMEM