Re: GHashTable suggestions
- From: Darin Adler <darin eazel com>
- To: Sven Neumann <sven gimp org>, <gtk-devel-list gnome org>
- Subject: Re: GHashTable suggestions
- Date: Thu, 04 Jan 2001 12:53:56 -0800
on 1/4/01 11:52 AM, Sven Neumann at sven gimp org wrote:
> this might come a little late, but it's something I just stumpled
> across when looking at the GHashTable API. IMHO it would be very
> convenient if the function
>
> gboolean
> g_hash_table_remove (GHashTable *hash_table,
> gconstpointer key);
>
> would instead return the removed value. Thus one could avoid to do
> two lookups when removing a value from a GHashTable. With the
> current API you have to
>
> value = g_hash_table_lookup (hash, key);
> g_free (value) /* or unref or whatever */
> g_hash_table_remove (hash, key);
>
> which could become
>
> g_free (g_hash_table_remove (hash, key));
For many of my hash tables, the key has to be removed as well. These changes
would help a bit, but I think the proposal below would help even more and be
more compatible.
> The same applies to g_hash_table_insert(). I must admit that it
> looks strange, but it would actually be useful if it would return
> the previous value in the case the key already existed in the
> GHashTable and it's value was replaced by the new one. The obvious
> advantage is that one could write
>
> g_free (g_hash_table_insert (hash, key, value));
>
> instead of
>
> g_free (g_hash_table_lookup (hash, key);
> g_hash_table_insert (hash, key, value);
>
> Alternatively there could be new functions called for example
>
> gboolean g_hash_table_remove_and_destroy (hash, key);
> gboolean g_hash_table_replace (hash, key, value);
>
> but this could only work if there was a destroy function that could
> be registered with the GHashTable.
I'd do something like the second proposal. I'd make a new extended
g_hash_table_new (_full? _extended? _with_destroy_notify?) that takes key
and value destroy notify functions. Then I'd add:
g_hash_table_remove_no_notify (hash, key);
Which resonates with gtk_object_remove_no_notify.
This change should be 100% backward compatible. The size of GHashTable would
have to change, but little else would.
-- Darin
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]