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); }
bool ck_hs_reset(struct ck_hs *hs) { struct ck_hs_map *previous; previous = hs->map; return ck_hs_reset_size(hs, previous->capacity); }