implemented incremental freezing facility.
authorTim Janik <timj@gtk.org>
Sat, 28 Nov 1998 01:54:54 +0000 (01:54 +0000)
committerTim Janik <timj@src.gnome.org>
Sat, 28 Nov 1998 01:54:54 +0000 (01:54 +0000)
Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>

        * ghash.c: implemented incremental freezing facility.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
ghash.c
glib/ghash.c

index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
index c570ab47aa0bfcf146df8b9aaa5b2b78b317573b..c9eeed9f69de726cd0cc1008af54116db7967641 100644 (file)
@@ -1,3 +1,7 @@
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+       * ghash.c: implemented incremental freezing facility.
+
 Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
 
        * glib.h: 
diff --git a/ghash.c b/ghash.c
index 0ff5a2415e6be08b59d5cafd098e51e4cc7eb462..4ab82b3fa16f20769aeac4b184ecc8c817b1fc9a 100644 (file)
--- a/ghash.c
+++ b/ghash.c
@@ -36,7 +36,7 @@ struct _GHashTable
 {
   gint size;
   gint nnodes;
-  gint frozen;
+  guint frozen;
   GHashNode **nodes;
   GHashFunc hash_func;
   GCompareFunc key_compare_func;
@@ -207,7 +207,7 @@ g_hash_table_freeze (GHashTable *hash_table)
 {
   g_return_if_fail (hash_table != NULL);
   
-  hash_table->frozen = TRUE;
+  hash_table->frozen++;
 }
 
 void
@@ -215,9 +215,9 @@ g_hash_table_thaw (GHashTable *hash_table)
 {
   g_return_if_fail (hash_table != NULL);
   
-  hash_table->frozen = FALSE;
-  
-  g_hash_table_resize (hash_table);
+  if (hash_table->frozen)
+    if (!(--hash_table->frozen))
+      g_hash_table_resize (hash_table);
 }
 
 gint
index 0ff5a2415e6be08b59d5cafd098e51e4cc7eb462..4ab82b3fa16f20769aeac4b184ecc8c817b1fc9a 100644 (file)
@@ -36,7 +36,7 @@ struct _GHashTable
 {
   gint size;
   gint nnodes;
-  gint frozen;
+  guint frozen;
   GHashNode **nodes;
   GHashFunc hash_func;
   GCompareFunc key_compare_func;
@@ -207,7 +207,7 @@ g_hash_table_freeze (GHashTable *hash_table)
 {
   g_return_if_fail (hash_table != NULL);
   
-  hash_table->frozen = TRUE;
+  hash_table->frozen++;
 }
 
 void
@@ -215,9 +215,9 @@ g_hash_table_thaw (GHashTable *hash_table)
 {
   g_return_if_fail (hash_table != NULL);
   
-  hash_table->frozen = FALSE;
-  
-  g_hash_table_resize (hash_table);
+  if (hash_table->frozen)
+    if (!(--hash_table->frozen))
+      g_hash_table_resize (hash_table);
 }
 
 gint