applied patch from #131937 with slight renames. provides
authorTim Janik <timj@gtk.org>
Fri, 20 Feb 2004 02:05:36 +0000 (02:05 +0000)
committerTim Janik <timj@src.gnome.org>
Fri, 20 Feb 2004 02:05:36 +0000 (02:05 +0000)
Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>

        * glib/ghash.[hc]: applied patch from #131937 with slight
        renames. provides g_hash_table_find().

12 files changed:
ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/gobject/tmpl/gtype.sgml
docs/reference/gobject/tmpl/objects.sgml
glib/ghash.c
glib/ghash.h
tests/hash-test.c
tests/testglib.c

index 2304e4914d80a9c4b55ff17a4b4c38fbb72cd021..31aa3438f0306724320bd551e35bbc3104b90b71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+       * glib/ghash.[hc]: applied patch from #131937 with slight
+       renames. provides g_hash_table_find().
+
 Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
 
        * applied patch from David Schleef <ds@schleef.org> which implements
index 2304e4914d80a9c4b55ff17a4b4c38fbb72cd021..31aa3438f0306724320bd551e35bbc3104b90b71 100644 (file)
@@ -1,3 +1,8 @@
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+       * glib/ghash.[hc]: applied patch from #131937 with slight
+       renames. provides g_hash_table_find().
+
 Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
 
        * applied patch from David Schleef <ds@schleef.org> which implements
index 2304e4914d80a9c4b55ff17a4b4c38fbb72cd021..31aa3438f0306724320bd551e35bbc3104b90b71 100644 (file)
@@ -1,3 +1,8 @@
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+       * glib/ghash.[hc]: applied patch from #131937 with slight
+       renames. provides g_hash_table_find().
+
 Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
 
        * applied patch from David Schleef <ds@schleef.org> which implements
index 2304e4914d80a9c4b55ff17a4b4c38fbb72cd021..31aa3438f0306724320bd551e35bbc3104b90b71 100644 (file)
@@ -1,3 +1,8 @@
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+       * glib/ghash.[hc]: applied patch from #131937 with slight
+       renames. provides g_hash_table_find().
+
 Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
 
        * applied patch from David Schleef <ds@schleef.org> which implements
index 2304e4914d80a9c4b55ff17a4b4c38fbb72cd021..31aa3438f0306724320bd551e35bbc3104b90b71 100644 (file)
@@ -1,3 +1,8 @@
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+       * glib/ghash.[hc]: applied patch from #131937 with slight
+       renames. provides g_hash_table_find().
+
 Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
 
        * applied patch from David Schleef <ds@schleef.org> which implements
index 2304e4914d80a9c4b55ff17a4b4c38fbb72cd021..31aa3438f0306724320bd551e35bbc3104b90b71 100644 (file)
@@ -1,3 +1,8 @@
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+       * glib/ghash.[hc]: applied patch from #131937 with slight
+       renames. provides g_hash_table_find().
+
 Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
 
        * applied patch from David Schleef <ds@schleef.org> which implements
index 2d541625887c9db850a3e87a70f4892acf15cb26..79a70a3a551210ac0c2a9969ea3c541839de25ee 100644 (file)
@@ -1619,9 +1619,10 @@ init functions.
   separated by '_'.
 @TYPE_PARENT: The #GType of the parent type.
 @flags: #GTypeFlags to pass to g_type_register_static()
-@type_parent_class: the identifier for the static variable holding the parent class
 @CODE: Custom code that gets inserted in the *_get_type() function.
 @Since: 2.4
+<!-- # Unused Parameters # -->
+@type_parent_class: the identifier for the static variable holding the parent class
 
 
 <!-- ##### MACRO G_TYPE_INVALID ##### -->
index 2d16e5d2cbe8d295ec2a81335ed250ceb69482e6..4c311e911b0ff4fb344af63fc59aa644aeb99bfc 100644 (file)
@@ -21,17 +21,6 @@ to the #GObject implementation and should never be accessed directly.
 </para>
 
 
-<!-- ##### SIGNAL GObject::notify ##### -->
-<para>
-The notify signal is emitted on an object when one of its properties 
-has been changed. Note that getting this signal doesn't guarantee that the
-value of the property has actually changed, it may also be emitted when
-the setter for the property is called to reinstate the previous value.
-</para>
-
-@gobject: the object which received the signal.
-@pspec: the #GParamSpec of the property which changed
-
 <!-- ##### STRUCT GObjectClass ##### -->
 <para>
 The class structure for the <structname>GObject</structname> type.
@@ -866,3 +855,14 @@ properties in set_property() and get_property() implementations.
 @pspec: the #GParamSpec of the property
 
 
+<!-- ##### SIGNAL GObject::notify ##### -->
+<para>
+The notify signal is emitted on an object when one of its properties 
+has been changed. Note that getting this signal doesn't guarantee that the
+value of the property has actually changed, it may also be emitted when
+the setter for the property is called to reinstate the previous value.
+</para>
+
+@gobject: the object which received the signal.
+@pspec: the #GParamSpec of the property which changed
+
index a2653f3331f97db53a44f876d7a5f634aac59ca9..a909db948d9543b31dd66829cfb668ed5ed7c27f 100644 (file)
@@ -559,6 +559,40 @@ g_hash_table_foreach (GHashTable *hash_table,
       (* func) (node->key, node->value, user_data);
 }
 
+/**
+ * g_hash_table_find:
+ * @hash_table: a #GHashTable.
+ * @predicate:  function to test the key/value pairs for a certain property.
+ * @user_data:  user data to pass to the function.
+ * 
+ * Calls the given function for key/value pairs in the
+ * #GHashTable until @predicate returns %TRUE.  The function is passed 
+ * the key and value of each pair, and the given @user_data parameter.  
+ *  The hash table may not
+ * be modified while iterating over it (you can't add/remove
+ * items). 
+ * Return value: The value of the first key/value pair is returned, for which 
+ * func evaluates to %TRUE. If no pair with the requested property is found, 
+ * %NULL is returned
+ **/
+gpointer
+g_hash_table_find (GHashTable     *hash_table,
+                   GHRFunc         predicate,
+                   gpointer        user_data)
+{
+  GHashNode *node;
+  gint i;
+  
+  g_return_val_if_fail (hash_table != NULL, NULL);
+  g_return_val_if_fail (predicate != NULL, NULL);
+  
+  for (i = 0; i < hash_table->size; i++)
+    for (node = hash_table->nodes[i]; node; node = node->next)
+      if (predicate (node->key, node->value, user_data))
+        return node->value;       
+  return NULL;
+}
+
 /**
  * g_hash_table_size:
  * @hash_table: a #GHashTable.
index a3051218e041343fa9b46e27211b0df6d03193bf..f0886d5c0df26960f4da13c2edf159fdb0ec1a98 100644 (file)
@@ -65,6 +65,9 @@ gboolean    g_hash_table_lookup_extended   (GHashTable           *hash_table,
 void       g_hash_table_foreach           (GHashTable     *hash_table,
                                            GHFunc          func,
                                            gpointer        user_data);
+gpointer    g_hash_table_find     (GHashTable     *hash_table,
+                                           GHRFunc         predicate,
+                                           gpointer        user_data);
 guint      g_hash_table_foreach_remove    (GHashTable     *hash_table,
                                            GHRFunc         func,
                                            gpointer        user_data);
index 95d144fabe656df2215f1023bf02c963c66f27e1..00074fb1b265df47e9a2a3bed54824c3f0968631 100644 (file)
@@ -296,6 +296,15 @@ static void second_hash_test (gboolean simple_hash)
     g_hash_table_destroy (h);
 }
 
+static gboolean find_first     (gpointer key, 
+                               gpointer value, 
+                               gpointer user_data)
+{
+  gint *v = value; 
+  gint *test = user_data;
+  return (*v == *test);
+}
+
 
 static void direct_hash_test (void)
 {
@@ -332,13 +341,19 @@ main (int   argc,
 {
   GHashTable *hash_table;
   gint i;
-
+  gint value = 120;
+  gint *pvalue; 
+  
   hash_table = g_hash_table_new (my_hash, my_hash_equal);
   for (i = 0; i < 10000; i++)
     {
       array[i] = i;
       g_hash_table_insert (hash_table, &array[i], &array[i]);
     }
+  pvalue = g_hash_table_find (hash_table, find_first, &value);
+  if (!pvalue || *pvalue != value)
+    g_assert_not_reached();
+  
   g_hash_table_foreach (hash_table, my_hash_callback, NULL);
 
   for (i = 0; i < 10000; i++)
index bc807a42214bab9f0226b2382503f574d13744a4..d0bd7bb14f9515e5e0720678dc313e545f8e23d8 100644 (file)
@@ -307,6 +307,17 @@ my_traverse (gpointer key,
   return FALSE;
 }
 
+static gboolean 
+find_first_that(gpointer key, 
+               gpointer value, 
+               gpointer user_data)
+{
+  gint *v = value;
+  gint *test = user_data;
+  return (*v == *test);
+}
+
+
 int
 main (int   argc,
       char *argv[])
@@ -320,7 +331,9 @@ main (int   argc,
   gint nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
   gint morenums[10] = { 8, 9, 7, 0, 3, 2, 5, 1, 4, 6};
   gchar *string;
-
+  gint value = 120; 
+  gint *pvalue=NULL; 
+  
   gchar *mem[10000], *tmp_string = NULL, *tmp_string_2;
   gint i, j;
   GArray *garray;
@@ -720,6 +733,10 @@ main (int   argc,
       array[i] = i;
       g_hash_table_insert (hash_table, &array[i], &array[i]);
     }
+  pvalue = g_hash_table_find (hash_table, find_first_that, &value);
+  if (*pvalue != value)
+         g_print("g_hash_table_find failed");
+  
   g_hash_table_foreach (hash_table, my_hash_callback, NULL);
 
   for (i = 0; i < 10000; i++)