static void g_hash_table_remove_all_nodes (GHashTable *hash_table, gboolean notify) { int i; gpointer key; gpointer value; hash_table->nnodes = 0; hash_table->noccupied = 0; if (!notify || (hash_table->key_destroy_func == NULL && hash_table->value_destroy_func == NULL)) { memset (hash_table->hashes, 0, hash_table->size * sizeof (guint)); memset (hash_table->keys, 0, hash_table->size * sizeof (gpointer)); memset (hash_table->values, 0, hash_table->size * sizeof (gpointer)); return; } for (i = 0; i < hash_table->size; i++) { if (HASH_IS_REAL (hash_table->hashes[i])) { key = hash_table->keys[i]; value = hash_table->values[i]; hash_table->hashes[i] = UNUSED_HASH_VALUE; hash_table->keys[i] = NULL; hash_table->values[i] = NULL; if (hash_table->key_destroy_func != NULL) hash_table->key_destroy_func (key); if (hash_table->value_destroy_func != NULL) hash_table->value_destroy_func (value); } else if (HASH_IS_TOMBSTONE (hash_table->hashes[i])) { hash_table->hashes[i] = UNUSED_HASH_VALUE; } } }
static void hev_hash_table_remove_all_nodes (HevHashTable *self, bool notify) { int i = -1; void *key = NULL, *value = NULL; self->nnodes = 0; self->noccupied = 0; if (!notify || ((NULL == self->key_destroy_notify) && (NULL == self->value_destroy_notify))) { memset (self->hashes, 0, self->size * sizeof (unsigned int)); memset (self->keys, 0, self->size * sizeof (void *)); memset (self->values, 0, self->size * sizeof (void *)); return ; } for (i=0; i<self->size; i++) { if (HASH_IS_REAL (self->hashes[i])) { key = self->keys[i]; value = self->values[i]; self->hashes[i] = UNUSED_HASH_VALUE; self->keys[i] = NULL; self->values[i] = NULL; if (NULL != self->key_destroy_notify) self->key_destroy_notify (key); if (NULL != self->value_destroy_notify) self->value_destroy_notify (value); } else if (HASH_IS_TOMBSTONE (self->hashes[i])) { self->hashes[i] = UNUSED_HASH_VALUE; } } }