src/avl.c

changeset 287
98da78a1e69a
parent 259
2f5dea574a75
     1.1 --- a/src/avl.c	Thu May 03 10:09:49 2018 +0200
     1.2 +++ b/src/avl.c	Thu May 03 10:44:33 2018 +0200
     1.3 @@ -136,6 +136,23 @@
     1.4      alfree(al, tree);
     1.5  }
     1.6  
     1.7 +static void ucx_avl_free_content_node(UcxAllocator *al, UcxAVLNode *node,
     1.8 +        ucx_destructor destr) {
     1.9 +    if (node) {
    1.10 +        ucx_avl_free_content_node(al, node->left, destr);
    1.11 +        ucx_avl_free_content_node(al, node->right, destr);
    1.12 +        if (destr) {
    1.13 +            destr(node->value);
    1.14 +        } else {
    1.15 +            alfree(al, node->value);
    1.16 +        }
    1.17 +    }
    1.18 +}
    1.19 +
    1.20 +void ucx_avl_free_content(UcxAVLTree *tree, ucx_destructor destr) {
    1.21 +    ucx_avl_free_content_node(tree->allocator, tree->root, destr);
    1.22 +}
    1.23 +
    1.24  UcxAVLNode *ucx_avl_get_node(UcxAVLTree *tree, intptr_t key) {
    1.25      UcxAVLNode *n = tree->root;
    1.26      int cmpresult;

mercurial