mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-08 10:14:04 +02:00
Add g_hash_table_get_keys_as_array()
Returns a %NULL-terminated array of the keys of a hashtable. In the case that the hash table has strings for keys, this is actually a gchar**. https://bugzilla.gnome.org/show_bug.cgi?id=710964
This commit is contained in:
@@ -2296,6 +2296,7 @@ g_hash_table_remove_all
|
|||||||
g_hash_table_steal_all
|
g_hash_table_steal_all
|
||||||
g_hash_table_get_keys
|
g_hash_table_get_keys
|
||||||
g_hash_table_get_values
|
g_hash_table_get_values
|
||||||
|
g_hash_table_get_keys_as_array
|
||||||
GHRFunc
|
GHRFunc
|
||||||
g_hash_table_freeze
|
g_hash_table_freeze
|
||||||
g_hash_table_thaw
|
g_hash_table_thaw
|
||||||
|
46
glib/ghash.c
46
glib/ghash.c
@@ -1645,6 +1645,52 @@ g_hash_table_get_keys (GHashTable *hash_table)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_hash_table_get_keys_as_array:
|
||||||
|
* @hash_table: a #GHashTable
|
||||||
|
* @length: (out): the length of the returned array
|
||||||
|
*
|
||||||
|
* Retrieves every key inside @hash_table, as an array.
|
||||||
|
*
|
||||||
|
* The returned array is %NULL-terminated but may contain %NULL as a
|
||||||
|
* key. Use @length to determine the true length if it's possible that
|
||||||
|
* %NULL was used as the value for a key.
|
||||||
|
*
|
||||||
|
* Note: in the common case of a string-keyed #GHashTable, the return
|
||||||
|
* value of this function can be conveniently cast to (gchar **).
|
||||||
|
*
|
||||||
|
* You should always free the return result with g_free(). In the
|
||||||
|
* above-mentioned case of a string-keyed hash table, it may be
|
||||||
|
* appropriate to use g_strfreev() if you call g_hash_table_steal_all()
|
||||||
|
* first to transfer ownership of the keys.
|
||||||
|
*
|
||||||
|
* Returns: (array length=length) (transfer container): a
|
||||||
|
* %NULL-terminated array containing each key from the table.
|
||||||
|
*
|
||||||
|
* Since: 2.40
|
||||||
|
**/
|
||||||
|
gpointer *
|
||||||
|
g_hash_table_get_keys_as_array (GHashTable *hash_table,
|
||||||
|
guint *length)
|
||||||
|
{
|
||||||
|
gpointer *result;
|
||||||
|
guint i, j = 0;
|
||||||
|
|
||||||
|
result = g_new (gpointer, hash_table->nnodes + 1);
|
||||||
|
for (i = 0; i < hash_table->size; i++)
|
||||||
|
{
|
||||||
|
if (HASH_IS_REAL (hash_table->hashes[i]))
|
||||||
|
result[j++] = hash_table->keys[i];
|
||||||
|
}
|
||||||
|
g_assert_cmpint (j, ==, hash_table->nnodes);
|
||||||
|
result[j] = NULL;
|
||||||
|
|
||||||
|
if (length)
|
||||||
|
*length = j;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_hash_table_get_values:
|
* g_hash_table_get_values:
|
||||||
* @hash_table: a #GHashTable
|
* @hash_table: a #GHashTable
|
||||||
|
@@ -119,6 +119,9 @@ GLIB_AVAILABLE_IN_ALL
|
|||||||
GList * g_hash_table_get_keys (GHashTable *hash_table);
|
GList * g_hash_table_get_keys (GHashTable *hash_table);
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
GList * g_hash_table_get_values (GHashTable *hash_table);
|
GList * g_hash_table_get_values (GHashTable *hash_table);
|
||||||
|
GLIB_AVAILABLE_IN_2_40
|
||||||
|
gpointer * g_hash_table_get_keys_as_array (GHashTable *hash_table,
|
||||||
|
guint *length);
|
||||||
|
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
void g_hash_table_iter_init (GHashTableIter *iter,
|
void g_hash_table_iter_init (GHashTableIter *iter,
|
||||||
|
Reference in New Issue
Block a user