通用基數樹/稀疏陣列¶
非常簡單和最小化,支援任意大小的條目,最大可達 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要獲取的索引
_gfpgfp 掩碼
描述
返回指向 _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要預分配的條目數量
_gfpgfp 掩碼
描述
成功返回 0,失敗返回 -ENOMEM