mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 08:22:16 +01:00 
			
		
		
		
	Add g_hash_table_get_key_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_get_keys | ||||
| g_hash_table_get_values | ||||
| g_hash_table_get_key_array | ||||
| GHRFunc | ||||
| g_hash_table_freeze | ||||
| g_hash_table_thaw | ||||
|   | ||||
							
								
								
									
										40
									
								
								glib/ghash.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								glib/ghash.c
									
									
									
									
									
								
							| @@ -1645,6 +1645,46 @@ g_hash_table_get_keys (GHashTable *hash_table) | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * g_hash_table_get_key_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 **). | ||||
|  * | ||||
|  * Returns: a %NULL-terminated array containing each key from the table. | ||||
|  * | ||||
|  * Since: 2.40 | ||||
|  **/ | ||||
| gpointer * | ||||
| g_hash_table_get_key_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: | ||||
|  * @hash_table: a #GHashTable | ||||
|   | ||||
| @@ -119,6 +119,9 @@ GLIB_AVAILABLE_IN_ALL | ||||
| GList *     g_hash_table_get_keys          (GHashTable     *hash_table); | ||||
| GLIB_AVAILABLE_IN_ALL | ||||
| GList *     g_hash_table_get_values        (GHashTable     *hash_table); | ||||
| GLIB_AVAILABLE_IN_2_40 | ||||
| gpointer *  g_hash_table_get_key_array     (GHashTable     *hash_table, | ||||
|                                             guint          *length); | ||||
|  | ||||
| GLIB_AVAILABLE_IN_ALL | ||||
| void        g_hash_table_iter_init         (GHashTableIter *iter, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user