CALLER_OWN AV *owl_new_av(const GPtrArray *l, SV *(*to_sv)(const void *)) { AV *ret; int i; void *element; ret = newAV(); for (i = 0; i < l->len; i++) { element = l->pdata[i]; av_push(ret, to_sv(element)); } return ret; }
AV *owl_new_av(const owl_list *l, SV *(*to_sv)(const void *)) { AV *ret; int i; void *element; ret = newAV(); for (i = 0; i < owl_list_get_size(l); i++) { element = owl_list_get_element(l, i); av_push(ret, to_sv(element)); } return ret; }
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; }