void lwan_trie_destroy(struct lwan_trie *trie) { if (!trie || !trie->root) return; lwan_trie_node_destroy(trie, trie->root); }
static void lwan_trie_node_destroy(struct lwan_trie *trie, struct lwan_trie_node *node) { if (!node) return; int32_t nodes_destroyed = node->ref_count; for (struct lwan_trie_leaf *leaf = node->leaf; leaf;) { struct lwan_trie_leaf *tmp = leaf->next; if (trie->free_node) trie->free_node(leaf->data); free(leaf->key); free(leaf); leaf = tmp; } for (int32_t i = 0; nodes_destroyed > 0 && i < 8; i++) { if (node->next[i]) { lwan_trie_node_destroy(trie, node->next[i]); --nodes_destroyed; } } free(node); }
void lwan_trie_destroy(lwan_trie_t *trie) { if (!trie || !trie->root) return; lwan_trie_node_destroy(trie->root); free(trie); }
static void lwan_trie_node_destroy(lwan_trie_node_t *node) { if (!node) return; int32_t i; int32_t nodes_destroyed = node->ref_count; for (i = 0; nodes_destroyed > 0 && i < 256; i++) { if (node->next[i]) { lwan_trie_node_destroy(node->next[i]); --nodes_destroyed; } } free(node); }