applied patch from #131937 with slight renames. provides

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().
This commit is contained in:
Tim Janik 2004-02-20 02:05:36 +00:00 committed by Tim Janik
parent b183ffc5ed
commit ee4e622d37
12 changed files with 114 additions and 14 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View 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 ##### -->

View 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

View 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.

View 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);

View 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++)

View 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++)