示例#1
0
void
lwan_trie_destroy(struct lwan_trie *trie)
{
    if (!trie || !trie->root)
        return;
    lwan_trie_node_destroy(trie, trie->root);
}
示例#2
0
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);
}
示例#3
0
文件: lwan-trie.c 项目: rakuco/lwan
void
lwan_trie_destroy(lwan_trie_t *trie)
{
    if (!trie || !trie->root)
        return;
    lwan_trie_node_destroy(trie->root);
    free(trie);
}
示例#4
0
文件: lwan-trie.c 项目: rakuco/lwan
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);
}