improve clarity in some functions
[platform/upstream/glib.git] / glib / ghash.c
index 36e685f..7858b19 100644 (file)
@@ -217,16 +217,16 @@ g_hash_table_destroy (GHashTable *hash_table)
   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;
+  GHashNode **node_ptr, *node;
   guint hash_value;
 
   hash_value = (* hash_table->hash_func) (key);
-  node = &hash_table->nodes[hash_value % hash_table->size];
+  node_ptr = &hash_table->nodes[hash_value % hash_table->size];
 
   if (hash_return)
     *hash_return = hash_value;
@@ -241,14 +241,28 @@ g_hash_table_lookup_node (GHashTable    *hash_table,
    *  key equality function in most cases.
    */
   if (hash_table->key_equal_func)
-    while (*node && (((*node)->key_hash != hash_value) ||
-                     !(*hash_table->key_equal_func) ((*node)->key, key)))
-      node = &(*node)->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 && (*node)->key != key)
-      node = &(*node)->next;
+    {
+      while ((node = *node_ptr))
+        {
+          if (node->key == key)
+            break;
+
+          node_ptr = &(*node_ptr)->next;
+        }
+    }
 
-  return node;
+  return node_ptr;
 }
 
 /**
@@ -302,16 +316,16 @@ g_hash_table_lookup_extended (GHashTable    *hash_table,
 
   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
@@ -320,21 +334,21 @@ g_hash_table_insert_internal (GHashTable *hash_table,
                               gpointer    value,
                               gboolean    keep_new_key)
 {
-  GHashNode **node;
+  GHashNode **node_ptr, *node;
   guint key_hash;
 
   g_return_if_fail (hash_table != NULL);
   g_return_if_fail (hash_table->ref_count > 0);
 
-  node = g_hash_table_lookup_node (hash_table, key, &key_hash);
+  node_ptr = g_hash_table_lookup_node (hash_table, key, &key_hash);
 
-  if (*node)
+  if ((node = *node_ptr))
     {
       if (keep_new_key)
         {
           if (hash_table->key_destroy_func)
-            hash_table->key_destroy_func ((*node)->key);
-          (*node)->key = key;
+            hash_table->key_destroy_func (node->key);
+          node->key = key;
         }
       else
         {
@@ -343,13 +357,20 @@ g_hash_table_insert_internal (GHashTable *hash_table,
         }
 
       if (hash_table->value_destroy_func)
-        hash_table->value_destroy_func ((*node)->value);
+        hash_table->value_destroy_func (node->value);
 
-      (*node)->value = value;
+      node->value = value;
     }
   else
     {
-      *node = 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);
     }
@@ -790,20 +811,5 @@ g_hash_table_resize (GHashTable *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"