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>
+
* glib/ghash.c: rename 'node' to 'node_ptr' where appropriate
2007-12-03 Ryan Lortie <desrt@desrt.ca>
g_hash_table_unref (hash_table);
}
-static inline GHashNode**
+static inline GHashNode **
g_hash_table_lookup_node (GHashTable *hash_table,
gconstpointer key,
guint *hash_return)
{
- GHashNode **node_ptr;
+ GHashNode **node_ptr, *node;
guint hash_value;
hash_value = (* hash_table->hash_func) (key);
* key equality function in most cases.
*/
if (hash_table->key_equal_func)
- while (*node_ptr && (((*node_ptr)->key_hash != hash_value) ||
- !(*hash_table->key_equal_func) ((*node_ptr)->key, key)))
- node_ptr = &(*node_ptr)->next;
+ {
+ while ((node = *node_ptr))
+ {
+ if (node->key_hash == hash_value &&
+ hash_table->key_equal_func (node->key, key))
+ break;
+
+ node_ptr = &(*node_ptr)->next;
+ }
+ }
else
- while (*node_ptr && (*node_ptr)->key != key)
- node_ptr = &(*node_ptr)->next;
+ {
+ while ((node = *node_ptr))
+ {
+ if (node->key == key)
+ break;
+
+ node_ptr = &(*node_ptr)->next;
+ }
+ }
return node_ptr;
}
node = *g_hash_table_lookup_node (hash_table, lookup_key, NULL);
- if (node)
- {
- if (orig_key)
- *orig_key = node->key;
- if (value)
- *value = node->value;
- return TRUE;
- }
- else
+ if (node == NULL)
return FALSE;
+
+ if (orig_key)
+ *orig_key = node->key;
+
+ if (value)
+ *value = node->value;
+
+ return TRUE;
}
static void
gpointer value,
gboolean keep_new_key)
{
- GHashNode **node_ptr;
+ GHashNode **node_ptr, *node;
guint key_hash;
g_return_if_fail (hash_table != NULL);
node_ptr = g_hash_table_lookup_node (hash_table, key, &key_hash);
- if (*node_ptr)
+ if ((node = *node_ptr))
{
if (keep_new_key)
{
if (hash_table->key_destroy_func)
- hash_table->key_destroy_func ((*node_ptr)->key);
- (*node_ptr)->key = key;
+ hash_table->key_destroy_func (node->key);
+ node->key = key;
}
else
{
}
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
{
- *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++;
g_hash_table_maybe_resize (hash_table);
}
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__
#include "galiasdef.c"