/** * g_hash_table_iter_replace: * @iter: an initialized #GHashTableIter. * @value: the value to replace with * * Replaces the value currently pointed to by the iterator * from its associated #GHashTable. Can only be called after * g_hash_table_iter_next() returned %TRUE. * * If you supplied a @value_destroy_func when creating the #GHashTable, * the old value is freed using that function. * * Since: 2.29.9 **/ void g_hash_table_iter_replace (GHashTableIter *iter, gpointer value) { RealIter *ri; guint node_hash; gpointer key; ri = (RealIter *) iter; g_return_if_fail (ri != NULL); #ifndef G_DISABLE_ASSERT g_return_if_fail (ri->version == ri->hash_table->version); #endif g_return_if_fail (ri->position >= 0); g_return_if_fail (ri->position < ri->hash_table->size); node_hash = ri->hash_table->hashes[ri->position]; key = ri->hash_table->keys[ri->position]; g_hash_table_insert_node (ri->hash_table, ri->position, node_hash, key, value, TRUE, TRUE); #ifndef G_DISABLE_ASSERT ri->version++; ri->hash_table->version++; #endif }
static gboolean g_hash_table_insert_internal (GHashTable *hash_table, gpointer key, gpointer value, gboolean keep_new_key) { guint key_hash; guint node_index; node_index = g_hash_table_lookup_node (hash_table, key, &key_hash); return g_hash_table_insert_node (hash_table, node_index, key_hash, key, value, keep_new_key, FALSE); }
/* * g_hash_table_insert_internal: * @hash_table: our #GHashTable * @key: the key to insert * @value: the value to insert * @keep_new_key: if %TRUE and this key already exists in the table * then call the destroy notify function on the old key. If %FALSE * then call the destroy notify function on the new key. * * Implements the common logic for the g_hash_table_insert() and * g_hash_table_replace() functions. * * Do a lookup of @key. If it is found, replace it with the new * @value (and perhaps the new @key). If it is not found, create a * new node. */ static void g_hash_table_insert_internal (GHashTable *hash_table, gpointer key, gpointer value, gboolean keep_new_key) { guint key_hash; guint node_index; g_return_if_fail (hash_table != NULL); node_index = g_hash_table_lookup_node (hash_table, key, &key_hash); g_hash_table_insert_node (hash_table, node_index, key_hash, key, value, keep_new_key, FALSE); }