[bindings perl] change ghashtable interface to not use GHashTableIter

This commit is contained in:
Benjamin Dauvergne 2010-12-01 15:20:48 +01:00
parent fbf7ad0537
commit f4c6c96836
1 changed files with 19 additions and 12 deletions

View File

@ -78,6 +78,15 @@ set_hash_of_objects(GHashTable **hash, HV *hv)
}
}
static void
__ht_foreach_get_hos(gpointer key, gpointer value, gpointer user_data)
{
HV *hv = user_data;
(void)hv_store(hv, key, strlen(key), newSVpv(value, 0), 0);
}
/**
* get_hash_of_strings:
* @hash: a #GHashTable of strings
@ -85,18 +94,21 @@ set_hash_of_objects(GHashTable **hash, HV *hv)
HV*
get_hash_of_strings(GHashTable *hash)
{
GHashTableIter iter;
gpointer key, value;
HV *hv;
hv = newHV();
g_hash_table_iter_init(&iter, hash);
while (g_hash_table_iter_next(&iter, &key, &value)) {
(void)hv_store(hv, key, strlen(key), newSVpv(value, 0), 0);
}
g_hash_table_foreach(hash, __ht_foreach_get_hos, hv);
return hv;
}
static void
__ht_foreach_get_hoo(gpointer key, gpointer value, gpointer user_data)
{
HV *hv = user_data;
(void)hv_store(hv, key, strlen(key), gperl_new_object(value, FALSE), 0);
}
/**
* get_hash_of_objects:
* @hash: a #GHashTable of objects
@ -104,14 +116,9 @@ get_hash_of_strings(GHashTable *hash)
HV*
get_hash_of_objects(GHashTable *hash)
{
GHashTableIter iter;
gpointer key, value;
HV *hv;
hv = newHV();
g_hash_table_iter_init(&iter, hash);
while (g_hash_table_iter_next(&iter, &key, &value)) {
(void)hv_store(hv, key, strlen(key), gperl_new_object(value, FALSE), 0);
}
g_hash_table_foreach(hash, __ht_foreach_get_hos, hv);
return hv;
}