7.6.3 使用基数树的例子

本节以图7-9中的基数树为例来构造radixTree这棵基数树。首先,使用ngx_radix_tree_create方法创建基数树,代码如下。


ngx_radix_tree_t*radixTree=ngx_radix_tree_create(cf->pool,-1);


将预分配节点简单地设置为-1,这样pool内存池中就会只使用1个页面来尽可能地分配基数树节点。接下来,按照图7-9构造4个节点数据,这里将它们所使用的数据结构简单地用无符号整型表示,当然,实际使用时可以是任意的数据结构。


ngx_uint_t testRadixValue1=0x20000000;

ngx_uint_t testRadixValue2=0x40000000;

ngx_uint_t testRadixValue3=0x80000000;

ngx_uint_t testRadixValue4=0xa0000000;


接下来将上述节点添加到radixTree基数树中,注意,掩码是0xe0000000。


int rc;

rc=ngx_radix32tree_insert(radixTree,

0x20000000,0xe0000000,(uintptr_t)&testRadixValue1);

rc=ngx_radix32tree_insert(radixTree,

0x40000000,0xe0000000,(uintptr_t)&testRadixValue2);

rc=ngx_radix32tree_insert(radixTree,

0x80000000,0xe0000000,(uintptr_t)&testRadixValue3);

rc=ngx_radix32tree_insert(radixTree,

0xa0000000,0xe0000000,(uintptr_t)&testRadixValue4);


下面来试着调用ngx_radix32tree_find查询节点,代码如下。


ngx_uint_tpRadixValue=(ngx_uint_t)ngx_radix32tree_find(radixTree,0x80000000);


注意,如果没有查询到,那么返回的pRadixValue将会是NGX_RADIX_NO_VALUE。

下面调用ngx_radix32tree_delete删除1个节点,代码如下。


rc=ngx_radix32tree_delete(radixTree,0xa0000000,0xe0000000);