Lines Matching defs:radix
1 /* $NetBSD: radix.c,v 1.11 2025/07/17 19:01:46 christos Exp $ */
18 * Id: radix.c,v 1.10.2.1 1999/11/29 05:16:24 masaki Exp
25 #include <isc/radix.h>
45 _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func);
141 isc_radix_tree_t *radix = isc_mem_get(mctx, sizeof(isc_radix_tree_t));
142 *radix = (isc_radix_tree_t){
146 isc_mem_attach(mctx, &radix->mctx);
147 *target = radix;
156 _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
157 REQUIRE(radix != NULL);
159 if (radix->head != NULL) {
162 isc_radix_node_t *Xrn = radix->head;
178 isc_mem_put(radix->mctx, Xrn, sizeof(*Xrn));
179 radix->num_active_node--;
195 RUNTIME_CHECK(radix->num_active_node == 0);
199 isc_radix_destroy(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
200 REQUIRE(radix != NULL);
201 _clear_radix(radix, func);
202 isc_mem_putanddetach(&radix->mctx, radix, sizeof(*radix));
209 isc_radix_process(isc_radix_tree_t *radix, isc_radix_processfunc_t func) {
214 RADIX_WALK(radix->head, node) { func(node->prefix, node->data); }
219 isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
227 REQUIRE(radix != NULL);
230 RUNTIME_CHECK(prefix->bitlen <= radix->maxbits);
234 node = radix->head;
290 isc_radix_insert(isc_radix_tree_t *radix, isc_radix_node_t **target,
298 REQUIRE(radix != NULL);
301 RUNTIME_CHECK(prefix == NULL || prefix->bitlen <= radix->maxbits);
312 if (radix->head == NULL) {
313 node = isc_mem_get(radix->mctx, sizeof(isc_radix_node_t));
319 result = _ref_prefix(radix->mctx, &node->prefix, prefix);
321 isc_mem_put(radix->mctx, node,
330 * node from an existing radix tree. To keep
339 radix->num_added_node +
345 int next = ++radix->num_added_node;
357 radix->head = node;
358 radix->num_active_node++;
364 node = radix->head;
367 if (node->bit < radix->maxbits &&
427 radix->num_added_node +
435 int next = radix->num_added_node + 1;
440 radix->num_added_node =
448 ++radix->num_added_node;
455 result = _ref_prefix(radix->mctx, &node->prefix,
468 int cur = radix->num_added_node;
476 int next = ++radix->num_added_node;
490 new_node = isc_mem_get(radix->mctx, sizeof(isc_radix_node_t));
492 glue = isc_mem_get(radix->mctx, sizeof(isc_radix_node_t));
496 result = _ref_prefix(radix->mctx, &new_node->prefix, prefix);
498 isc_mem_put(radix->mctx, new_node, sizeof(isc_radix_node_t));
500 isc_mem_put(radix->mctx, glue,
511 radix->num_active_node++;
516 int cur = radix->num_added_node;
524 int next = ++radix->num_added_node;
539 if (node->bit < radix->maxbits &&
554 if (bitlen < radix->maxbits &&
563 INSIST(radix->head == node);
564 radix->head = new_node;
580 radix->num_active_node++;
581 if (differ_bit < radix->maxbits &&
593 INSIST(radix->head == node);
594 radix->head = glue;
608 isc_radix_remove(isc_radix_tree_t *radix, isc_radix_node_t *node) {
611 REQUIRE(radix != NULL);
633 INSIST(radix->head == node);
634 radix->head = NULL;
635 isc_mem_put(radix->mctx, node, sizeof(*node));
636 radix->num_active_node--;
649 isc_mem_put(radix->mctx, node, sizeof(*node));
650 radix->num_active_node--;
658 INSIST(radix->head == parent);
659 radix->head = child;
668 isc_mem_put(radix->mctx, parent, sizeof(*parent));
669 radix->num_active_node--;
686 INSIST(radix->head == node);
687 radix->head = child;
688 isc_mem_put(radix->mctx, node, sizeof(*node));
689 radix->num_active_node--;
700 isc_mem_put(radix->mctx, node, sizeof(*node));
701 radix->num_active_node--;