improve clarity in some functions

2007-12-03  Ryan Lortie  <desrt@desrt.ca>

        * glib/ghash.c (g_hash_table_lookup_node,
        g_hash_table_lookup_extended, g_hash_table_insert_internal,
        g_hash_node_new): improve clarity in some functions


svn path=/trunk/; revision=6035
This commit is contained in:
Ryan Lortie 2007-12-04 03:46:48 +00:00 committed by Ryan Lortie
parent 8a38e16052
commit d72c02686b
2 changed files with 50 additions and 38 deletions

View File

@ -1,3 +1,9 @@
2007-12-03 Ryan Lortie <desrt@desrt.ca>
* glib/ghash.c (g_hash_table_lookup_node,
g_hash_table_lookup_extended, g_hash_table_insert_internal,
g_hash_node_new): improve clarity in some functions
2007-12-03 Ryan Lortie <desrt@desrt.ca> 2007-12-03 Ryan Lortie <desrt@desrt.ca>
* glib/ghash.c: rename 'node' to 'node_ptr' where appropriate * glib/ghash.c: rename 'node' to 'node_ptr' where appropriate

View File

@ -222,7 +222,7 @@ g_hash_table_lookup_node (GHashTable *hash_table,
gconstpointer key, gconstpointer key,
guint *hash_return) guint *hash_return)
{ {
GHashNode **node_ptr; GHashNode **node_ptr, *node;
guint hash_value; guint hash_value;
hash_value = (* hash_table->hash_func) (key); hash_value = (* hash_table->hash_func) (key);
@ -241,12 +241,26 @@ g_hash_table_lookup_node (GHashTable *hash_table,
* key equality function in most cases. * key equality function in most cases.
*/ */
if (hash_table->key_equal_func) if (hash_table->key_equal_func)
while (*node_ptr && (((*node_ptr)->key_hash != hash_value) || {
!(*hash_table->key_equal_func) ((*node_ptr)->key, key))) while ((node = *node_ptr))
{
if (node->key_hash == hash_value &&
hash_table->key_equal_func (node->key, key))
break;
node_ptr = &(*node_ptr)->next; node_ptr = &(*node_ptr)->next;
}
}
else else
while (*node_ptr && (*node_ptr)->key != key) {
while ((node = *node_ptr))
{
if (node->key == key)
break;
node_ptr = &(*node_ptr)->next; node_ptr = &(*node_ptr)->next;
}
}
return node_ptr; return node_ptr;
} }
@ -302,17 +316,17 @@ g_hash_table_lookup_extended (GHashTable *hash_table,
node = *g_hash_table_lookup_node (hash_table, lookup_key, NULL); node = *g_hash_table_lookup_node (hash_table, lookup_key, NULL);
if (node) if (node == NULL)
{ return FALSE;
if (orig_key) if (orig_key)
*orig_key = node->key; *orig_key = node->key;
if (value) if (value)
*value = node->value; *value = node->value;
return TRUE; return TRUE;
} }
else
return FALSE;
}
static void static void
g_hash_table_insert_internal (GHashTable *hash_table, g_hash_table_insert_internal (GHashTable *hash_table,
@ -320,7 +334,7 @@ g_hash_table_insert_internal (GHashTable *hash_table,
gpointer value, gpointer value,
gboolean keep_new_key) gboolean keep_new_key)
{ {
GHashNode **node_ptr; GHashNode **node_ptr, *node;
guint key_hash; guint key_hash;
g_return_if_fail (hash_table != NULL); g_return_if_fail (hash_table != NULL);
@ -328,13 +342,13 @@ g_hash_table_insert_internal (GHashTable *hash_table,
node_ptr = g_hash_table_lookup_node (hash_table, key, &key_hash); node_ptr = g_hash_table_lookup_node (hash_table, key, &key_hash);
if (*node_ptr) if ((node = *node_ptr))
{ {
if (keep_new_key) if (keep_new_key)
{ {
if (hash_table->key_destroy_func) if (hash_table->key_destroy_func)
hash_table->key_destroy_func ((*node_ptr)->key); hash_table->key_destroy_func (node->key);
(*node_ptr)->key = key; node->key = key;
} }
else else
{ {
@ -343,13 +357,20 @@ g_hash_table_insert_internal (GHashTable *hash_table,
} }
if (hash_table->value_destroy_func) if (hash_table->value_destroy_func)
hash_table->value_destroy_func ((*node_ptr)->value); hash_table->value_destroy_func (node->value);
(*node_ptr)->value = value; node->value = value;
} }
else else
{ {
*node_ptr = g_hash_node_new (key, value, key_hash); node = g_slice_new (GHashNode);
node->key = key;
node->value = value;
node->key_hash = key_hash;
node->next = NULL;
*node_ptr = node;
hash_table->nnodes++; hash_table->nnodes++;
g_hash_table_maybe_resize (hash_table); g_hash_table_maybe_resize (hash_table);
} }
@ -790,20 +811,5 @@ g_hash_table_resize (GHashTable *hash_table)
hash_table->size = new_size; hash_table->size = new_size;
} }
static GHashNode*
g_hash_node_new (gpointer key,
gpointer value,
guint key_hash)
{
GHashNode *hash_node = g_slice_new (GHashNode);
hash_node->key = key;
hash_node->value = value;
hash_node->key_hash = key_hash;
hash_node->next = NULL;
return hash_node;
}
#define __G_HASH_C__ #define __G_HASH_C__
#include "galiasdef.c" #include "galiasdef.c"