diff options
author | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:10:19 +0000 |
---|---|---|
committer | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:10:19 +0000 |
commit | cd1df0cf8df0b0d6962443ad4ffffb5f2929ddf2 (patch) | |
tree | 6ffb9f63762ec87635027b60ba38072f9623cf97 /bindings/ghashtable.h | |
parent | 464dda465452a228d8cf9b625b08f9be28ef96ee (diff) | |
download | lasso-cd1df0cf8df0b0d6962443ad4ffffb5f2929ddf2.tar.gz lasso-cd1df0cf8df0b0d6962443ad4ffffb5f2929ddf2.tar.xz lasso-cd1df0cf8df0b0d6962443ad4ffffb5f2929ddf2.zip |
[project @ fpeters@0d.be-20080410163456-r6a9flm66nhyap6m]
Merge from bdauvergne: factorize the backward compatibility code for
GHashTable, fixed placement of declarations.
Original author: Frederic Peters <fpeters@0d.be>
Date: 2008-04-10 18:34:56.595000+02:00
Diffstat (limited to 'bindings/ghashtable.h')
-rw-r--r-- | bindings/ghashtable.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/bindings/ghashtable.h b/bindings/ghashtable.h new file mode 100644 index 00000000..e9644755 --- /dev/null +++ b/bindings/ghashtable.h @@ -0,0 +1,81 @@ +#ifndef G_HASHTABLE_H +#define G_HASHTABLE_H 1 +#if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 14) + +typedef struct _GHashNode GHashNode; + +struct _GHashNode +{ + gpointer key; + gpointer value; + GHashNode *next; + guint key_hash; +}; + +struct _GHashTable +{ + gint size; + gint nnodes; + GHashNode **nodes; + GHashFunc hash_func; + GEqualFunc key_equal_func; + volatile gint ref_count; + GDestroyNotify key_destroy_func; + GDestroyNotify value_destroy_func; +}; + +/* Helper functions to access JNI interface functions */ +#if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 12) +void +g_hash_table_remove_all (GHashTable *hash_table) +{ + g_return_if_fail (hash_table != NULL); + +#ifndef G_DISABLE_ASSERT + if (hash_table->nnodes != 0) + hash_table->version++; +#endif + + g_hash_table_remove_all_nodes (hash_table, TRUE); + g_hash_table_maybe_resize (hash_table); +} +#endif + /* copy of private struct and g_hash_table_get_keys from GLib internals + * (as this function is useful but new in 2.14) */ + + +static GList * +g_hash_table_get_keys (GHashTable *hash_table) +{ + GHashNode *node; + gint i; + GList *retval; + + g_return_val_if_fail (hash_table != NULL, NULL); + + retval = NULL; + for (i = 0; i < hash_table->size; i++) + for (node = hash_table->nodes[i]; node; node = node->next) + retval = g_list_prepend (retval, node->key); + + return retval; +} + +GList * +g_hash_table_get_values (GHashTable *hash_table) +{ + GHashNode *node; + gint i; + GList *retval; + + g_return_val_if_fail (hash_table != NULL, NULL); + + retval = NULL; + for (i = 0; i < hash_table->size; i++) + for (node = hash_table->nodes[i]; node; node = node->next) + retval = g_list_prepend (retval, node->value); + + return retval; +} +#endif +#endif /* G_HASHTABLE_H */ |