mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-02 23:43:39 +02:00
ghash: Add g_hash_table_new_similar()
This function creates a new hash table, but inherits the functions used for the hash, comparison, and key/value memory management functions from another hash table. The primary use case is to implement a behaviour where you maintain a hash table by regenerating it, letting the values not migrated be freed. See the following pseudo code: ``` GHashTable *ht; init(GList *resources) { ht = g_hash_table_new (g_str_hash, g_str_equal, g_free, g_free); for (r in resources) g_hash_table_insert (ht, strdup (resource_get_key (r)), create_value (r)); } update(GList *resources) { GHashTable *new_ht = g_hash_table_new_similar (ht); for (r in resources) { if (g_hash_table_steal_extended (ht, resource_get_key (r), &key, &value)) g_hash_table_insert (new_ht, key, value); else g_hash_table_insert (new_ht, strdup (resource_get_key (r)), create_value (r)); } g_hash_table_unref (ht); ht = new_ht; } ```
This commit is contained in:
@@ -2851,6 +2851,7 @@ g_trash_stack_height
|
||||
GHashTable
|
||||
g_hash_table_new
|
||||
g_hash_table_new_full
|
||||
g_hash_table_new_similar
|
||||
GHashFunc
|
||||
GEqualFunc
|
||||
g_hash_table_insert
|
||||
|
Reference in New Issue
Block a user