Exemple #1
0
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;
        }
    }
}
Exemple #2
0
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;
		}
	}
}