CALLER_OWN HV *owl_new_hv(const owl_dict *d, SV *(*to_sv)(const void *)) { HV *ret; GPtrArray *keys; const char *key; void *element; int i; ret = newHV(); /* TODO: add an iterator-like interface to owl_dict */ keys = owl_dict_get_keys(d); for (i = 0; i < keys->len; i++) { key = keys->pdata[i]; element = owl_dict_find_element(d, key); (void)hv_store(ret, key, strlen(key), to_sv(element), 0); } owl_ptr_array_free(keys, g_free); return ret; }
HV *owl_new_hv(const owl_dict *d, SV *(*to_sv)(const void *)) { HV *ret; owl_list l; const char *key; void *element; int i; ret = newHV(); /* TODO: add an iterator-like interface to owl_dict */ owl_dict_get_keys(d, &l); for (i = 0; i < owl_list_get_size(&l); i++) { key = owl_list_get_element(&l, i); element = owl_dict_find_element(d, key); (void)hv_store(ret, key, strlen(key), to_sv(element), 0); } owl_list_cleanup(&l, owl_free); return ret; }
int owl_dict_regtest(void) { owl_dict d; owl_list l; int numfailed=0; char *av="aval", *bv="bval", *cv="cval", *dv="dval"; printf("# BEGIN testing owl_dict\n"); FAIL_UNLESS("create", 0==owl_dict_create(&d)); FAIL_UNLESS("insert b", 0==owl_dict_insert_element(&d, "b", bv, owl_dict_noop_delete)); FAIL_UNLESS("insert d", 0==owl_dict_insert_element(&d, "d", dv, owl_dict_noop_delete)); FAIL_UNLESS("insert a", 0==owl_dict_insert_element(&d, "a", av, owl_dict_noop_delete)); FAIL_UNLESS("insert c", 0==owl_dict_insert_element(&d, "c", cv, owl_dict_noop_delete)); FAIL_UNLESS("reinsert d (no replace)", -2==owl_dict_insert_element(&d, "d", dv, 0)); FAIL_UNLESS("find a", av==owl_dict_find_element(&d, "a")); FAIL_UNLESS("find b", bv==owl_dict_find_element(&d, "b")); FAIL_UNLESS("find c", cv==owl_dict_find_element(&d, "c")); FAIL_UNLESS("find d", dv==owl_dict_find_element(&d, "d")); FAIL_UNLESS("find e (non-existent)", NULL==owl_dict_find_element(&d, "e")); FAIL_UNLESS("remove d", dv==owl_dict_remove_element(&d, "d")); FAIL_UNLESS("find d (post-removal)", NULL==owl_dict_find_element(&d, "d")); FAIL_UNLESS("get_size", 3==owl_dict_get_size(&d)); FAIL_UNLESS("get_keys", 0==owl_dict_get_keys(&d, &l)); FAIL_UNLESS("get_keys result size", 3==owl_list_get_size(&l)); /* these assume the returned keys are sorted */ FAIL_UNLESS("get_keys result val",0==strcmp("a",owl_list_get_element(&l,0))); FAIL_UNLESS("get_keys result val",0==strcmp("b",owl_list_get_element(&l,1))); FAIL_UNLESS("get_keys result val",0==strcmp("c",owl_list_get_element(&l,2))); owl_list_cleanup(&l, owl_free); owl_dict_cleanup(&d, NULL); /* if (numfailed) printf("*** WARNING: failures encountered with owl_dict\n"); */ printf("# END testing owl_dict (%d failures)\n", numfailed); return(numfailed); }
CALLER_OWN GPtrArray *owl_variable_dict_get_names(const owl_vardict *d) { return owl_dict_get_keys(d); }
CALLER_OWN GPtrArray *owl_global_get_style_names(const owl_global *g) { return owl_dict_get_keys(&g->styledict); }
/* free the list with owl_variable_dict_namelist_free */ void owl_variable_dict_get_names(owl_vardict *d, owl_list *l) { owl_dict_get_keys(d, l); }
GPtrArray *owl_cmddict_get_names(const owl_cmddict *d) { return owl_dict_get_keys(d); }
void owl_keyhandler_get_keymap_names(const owl_keyhandler *kh, owl_list *l) { owl_dict_get_keys(&kh->keymaps, l); }
CALLER_OWN GPtrArray *owl_keyhandler_get_keymap_names(const owl_keyhandler *kh) { return owl_dict_get_keys(&kh->keymaps); }