Lines Matching defs:radix
13 * Id: radix.c,v 1.10.2.1 1999/11/29 05:16:24 masaki Exp
22 #include <isc/radix.h>
38 _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func);
137 isc_radix_tree_t *radix;
141 radix = isc_mem_get(mctx, sizeof(isc_radix_tree_t));
142 if (radix == NULL)
145 radix->mctx = NULL;
146 isc_mem_attach(mctx, &radix->mctx);
147 radix->maxbits = maxbits;
148 radix->head = NULL;
149 radix->num_active_node = 0;
150 radix->num_added_node = 0;
152 radix->magic = RADIX_TREE_MAGIC;
153 *target = radix;
163 _clear_radix(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
165 REQUIRE(radix != NULL);
167 if (radix->head != NULL) {
170 isc_radix_node_t *Xrn = radix->head;
187 isc_mem_put(radix->mctx, Xrn, sizeof(*Xrn));
188 radix->num_active_node--;
204 RUNTIME_CHECK(radix->num_active_node == 0);
209 isc_radix_destroy(isc_radix_tree_t *radix, isc_radix_destroyfunc_t func) {
210 REQUIRE(radix != NULL);
211 _clear_radix(radix, func);
212 isc_mem_putanddetach(&radix->mctx, radix, sizeof(*radix));
220 isc_radix_process(isc_radix_tree_t *radix, isc_radix_processfunc_t func) {
225 RADIX_WALK(radix->head, node) {
232 isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
241 REQUIRE(radix != NULL);
244 RUNTIME_CHECK(prefix->bitlen <= radix->maxbits);
248 if (radix->head == NULL) {
252 node = radix->head;
301 isc_radix_insert(isc_radix_tree_t *radix, isc_radix_node_t **target,
310 REQUIRE(radix != NULL);
313 RUNTIME_CHECK(prefix == NULL || prefix->bitlen <= radix->maxbits);
323 if (radix->head == NULL) {
324 node = isc_mem_get(radix->mctx, sizeof(isc_radix_node_t));
331 result = _ref_prefix(radix->mctx, &node->prefix, prefix);
333 isc_mem_put(radix->mctx, node,
342 * node from an existing radix tree. To keep
351 radix->num_added_node +
356 int next = ++radix->num_added_node;
367 radix->head = node;
368 radix->num_active_node++;
374 node = radix->head;
377 if (node->bit < radix->maxbits &&
432 radix->num_added_node +
440 int next = radix->num_added_node + 1;
445 radix->num_added_node =
453 ++radix->num_added_node;
459 result = _ref_prefix(radix->mctx,
471 int cur = radix->num_added_node;
479 int next = ++radix->num_added_node;
492 new_node = isc_mem_get(radix->mctx, sizeof(isc_radix_node_t));
496 glue = isc_mem_get(radix->mctx, sizeof(isc_radix_node_t));
498 isc_mem_put(radix->mctx, new_node,
505 result = _ref_prefix(radix->mctx, &new_node->prefix, prefix);
507 isc_mem_put(radix->mctx, new_node, sizeof(isc_radix_node_t));
509 isc_mem_put(radix->mctx, glue,
519 radix->num_active_node++;
524 int cur = radix->num_added_node;
532 int next = ++radix->num_added_node;
546 if (node->bit < radix->maxbits &&
561 if (bitlen < radix->maxbits &&
569 INSIST(radix->head == node);
570 radix->head = new_node;
586 radix->num_active_node++;
587 if (differ_bit < radix->maxbits &&
598 INSIST(radix->head == node);
599 radix->head = glue;
613 isc_radix_remove(isc_radix_tree_t *radix, isc_radix_node_t *node) {
616 REQUIRE(radix != NULL);
637 INSIST(radix->head == node);
638 radix->head = NULL;
639 isc_mem_put(radix->mctx, node, sizeof(*node));
640 radix->num_active_node--;
653 isc_mem_put(radix->mctx, node, sizeof(*node));
654 radix->num_active_node--;
661 INSIST(radix->head == parent);
662 radix->head = child;
671 isc_mem_put(radix->mctx, parent, sizeof(*parent));
672 radix->num_active_node--;
689 INSIST(radix->head == node);
690 radix->head = child;
691 isc_mem_put(radix->mctx, node, sizeof(*node));
692 radix->num_active_node--;
696 isc_mem_put(radix->mctx, node, sizeof(*node));
697 radix->num_active_node--;