英语

通用基数树/稀疏数组

非常简单和最小化,支持最大 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