X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgl_anytree_oset.h;h=48de0e51cfaf9a4d500b7ce489a4f73e3dc279c9;hb=5d0b385594bc914e6233988bfb6bc1b92a2184b5;hp=9945cfc71eb9ba3f45e793656e913487edbc9bfb;hpb=9017ec629b3dda3e398d6ea027cae26ab7d018b5;p=gnulib.git diff --git a/lib/gl_anytree_oset.h b/lib/gl_anytree_oset.h index 9945cfc71..48de0e51c 100644 --- a/lib/gl_anytree_oset.h +++ b/lib/gl_anytree_oset.h @@ -1,5 +1,5 @@ /* Ordered set data type implemented by a binary tree. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006-2007 Free Software Foundation, Inc. Written by Bruno Haible , 2006. This program is free software; you can redistribute it and/or modify @@ -30,12 +30,14 @@ typedef iterstack_item_t iterstack_t[MAXHEIGHT]; static gl_oset_t gl_tree_create_empty (gl_oset_implementation_t implementation, - gl_setelement_compar_fn compar_fn) + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) { struct gl_oset_impl *set = XMALLOC (struct gl_oset_impl); set->base.vtable = implementation; set->base.compar_fn = compar_fn; + set->base.dispose_fn = dispose_fn; set->root = NULL; set->count = 0; @@ -100,7 +102,7 @@ gl_tree_search_atleast (gl_oset_t set, node = node->left; } } - *eltp = found; + *eltp = found->value; return true; } } @@ -216,6 +218,8 @@ gl_tree_oset_free (gl_oset_t set) if (!stack_ptr->rightp) break; /* Free the current node. */ + if (set->base.dispose_fn != NULL) + set->base.dispose_fn (node->value); free (node); } /* Descend on right branch. */