コード例 #1
0
ファイル: mtev_hash.c プロジェクト: postwait/libmtev
void mtev_hash_delete_all(mtev_hash_table *h, NoitHashFreeFunc keyfree, NoitHashFreeFunc datafree) {
  void *entry = NULL;
  ck_hs_iterator_t iterator = CK_HS_ITERATOR_INITIALIZER;
  ck_hash_attr_t *data_struct;

  if(!h) return;
  if(h->u.hs.hf == NULL) {
    mtevL(mtev_error, "warning: null hashtable in mtev_hash_delete_all... initializing\n");
    mtev_stacktrace(mtev_error);
    mtev_hash_init(h);
  }

  int count = mtev_hash_size(h);
  LOCK(h);
  while(ck_hs_next(&h->u.hs, &iterator, &entry)) {
    data_struct = index_attribute_container((ck_key_t*)entry);
    if (data_struct) {
      if (keyfree) keyfree(data_struct->key_ptr);
      if (datafree) datafree(data_struct->data);
      free(data_struct);
    }
  }
  ck_hs_reset_size(&h->u.hs, count);
  UNLOCK(h);
}
コード例 #2
0
ファイル: ck_hs.c プロジェクト: bscheinman/ck
bool
ck_hs_reset(struct ck_hs *hs)
{
	struct ck_hs_map *previous;

	previous = hs->map;
	return ck_hs_reset_size(hs, previous->capacity);
}