From: Libor Peltan Date: Wed, 3 Jul 2019 16:10:30 +0000 (+0200) Subject: zone tree: optimize iteration by avioding fix_get() X-Git-Tag: v2.9.0~234^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b134afeef543c7427806bd6b11200a613cd8c34;p=thirdparty%2Fknot-dns.git zone tree: optimize iteration by avioding fix_get() --- diff --git a/src/knot/zone/zone-tree.c b/src/knot/zone/zone-tree.c index 9414bce07f..36af2e252b 100644 --- a/src/knot/zone/zone-tree.c +++ b/src/knot/zone/zone-tree.c @@ -281,6 +281,7 @@ int zone_tree_it_begin(zone_tree_t *tree, zone_tree_it_t *it) return KNOT_ENOMEM; } it->tree = tree; + it->binode_second = ((tree->flags & ZONE_TREE_BINO_SECOND) ? 1 : 0); it->next_tree = NULL; } return KNOT_EOK; @@ -294,6 +295,7 @@ int zone_tree_it_double_begin(zone_tree_t *first, zone_tree_t *second, zone_tree return KNOT_ENOMEM; } it->tree = first; + it->binode_second = ((first->flags & ZONE_TREE_BINO_SECOND) ? 1 : 0); it->next_tree = second; } return KNOT_EOK; @@ -306,7 +308,7 @@ bool zone_tree_it_finished(zone_tree_it_t *it) zone_node_t *zone_tree_it_val(zone_tree_it_t *it) { - return fix_get(*trie_it_val(it->it), it->tree); + return (zone_node_t *)(*trie_it_val(it->it)) + it->binode_second; } void zone_tree_it_del(zone_tree_it_t *it) @@ -320,6 +322,7 @@ void zone_tree_it_next(zone_tree_it_t *it) if (it->next_tree != NULL && trie_it_finished(it->it)) { trie_it_free(it->it); it->tree = it->next_tree; + it->binode_second = ((it->tree->flags & ZONE_TREE_BINO_SECOND) ? 1 : 0); it->next_tree = NULL; it->it = trie_it_begin(it->tree->trie); } diff --git a/src/knot/zone/zone-tree.h b/src/knot/zone/zone-tree.h index 2b9ffc4eb5..394bf2586e 100644 --- a/src/knot/zone/zone-tree.h +++ b/src/knot/zone/zone-tree.h @@ -48,6 +48,7 @@ typedef int (*zone_tree_del_node_cb_t)(zone_node_t *node, void *ctx); typedef struct { zone_tree_t *tree; trie_it_t *it; + int binode_second; zone_tree_t *next_tree; } zone_tree_it_t;