X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgl_anytree_oset.h;h=95f21240649904f1f16c96fccc0f15c95cd4970b;hb=c6790e9ece33da10ea5e64c25e57a5488584786a;hp=53c877505a419634ac1fb06cf24dc4983995ec72;hpb=5c90f29795d4e8d9a66268d5dc61d02b82cf7db8;p=gnulib.git diff --git a/lib/gl_anytree_oset.h b/lib/gl_anytree_oset.h index 53c877505..95f212406 100644 --- a/lib/gl_anytree_oset.h +++ b/lib/gl_anytree_oset.h @@ -1,11 +1,11 @@ /* 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 + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -13,8 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* Common code of gl_avltree_oset.c and gl_rbtree_oset.c. */ @@ -30,13 +29,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 = - (struct gl_oset_impl *) xmalloc (sizeof (struct gl_oset_impl)); + 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; @@ -101,7 +101,7 @@ gl_tree_search_atleast (gl_oset_t set, node = node->left; } } - *eltp = found; + *eltp = found->value; return true; } } @@ -217,6 +217,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. */