/** Clean all functions that are not in the new configuration @param db Database @param organizations New organizations config */ static void purge_old_organizations(organizations_db_t *db, json_t *organizations) { tommy_hashdyn_foreach_arg(&db->uuid_db, void_check_and_purge_organization, organizations); }
void test_hashdyn(void) { tommy_list list; tommy_hashdyn hashdyn; struct object_hash* HASH; unsigned i, n; tommy_node* p; unsigned limit; unsigned count; HASH = malloc(MAX * sizeof(struct object_hash)); for(i=0;i<MAX;++i) { HASH[i].value = i; } START("hashdyn stack"); limit = 10 * sqrt(MAX); for(n=0;n<limit;++n) { tommy_list_init(&list); tommy_hashdyn_init(&hashdyn); /* insert */ for(i=0;i<n;++i) { tommy_list_insert_head(&list, &HASH[i].node, &HASH[i]); tommy_hashdyn_insert(&hashdyn, &HASH[i].hashnode, &HASH[i], HASH[i].value); } count = 0; tommy_hashdyn_foreach_arg(&hashdyn, count_arg, &count); if (count != n) abort(); /* remove */ p = tommy_list_head(&list); while (p) { struct object_hash* obj = p->data; p = p->next; tommy_hashdyn_remove_existing(&hashdyn, &obj->hashnode); } tommy_hashdyn_done(&hashdyn); } STOP(); START("hashdyn queue"); limit = sqrt(MAX) / 8; for(n=0;n<limit;++n) { tommy_list_init(&list); tommy_hashdyn_init(&hashdyn); /* insert first run */ for(i=0;i<n;++i) { tommy_list_insert_head(&list, &HASH[i].node, &HASH[i]); tommy_hashdyn_insert(&hashdyn, &HASH[i].hashnode, &HASH[i], HASH[i].value); } count = 0; tommy_hashdyn_foreach_arg(&hashdyn, count_arg, &count); if (count != n) abort(); /* insert all the others */ for(;i<MAX;++i) { struct object_hash* obj; /* insert one */ tommy_list_insert_head(&list, &HASH[i].node, &HASH[i]); tommy_hashdyn_insert(&hashdyn, &HASH[i].hashnode, &HASH[i], HASH[i].value); /* remove one */ p = tommy_list_head(&list); obj = p->data; tommy_list_remove_existing(&list, p); tommy_hashdyn_remove_existing(&hashdyn, &obj->hashnode); } /* remove remaining */ p = tommy_list_head(&list); while (p) { struct object_hash* obj = p->data; p = p->next; tommy_hashdyn_remove_existing(&hashdyn, &obj->hashnode); } tommy_hashdyn_done(&hashdyn); } STOP(); }