--- psiconv/trunk/lib/psiconv/list.c 2000/12/25 22:25:33 79 +++ psiconv/trunk/lib/psiconv/list.c 2002/01/29 18:38:38 142 @@ -27,6 +27,11 @@ #include "list.h" #include "error.h" +#ifdef DMALLOC +#include +#endif + + static int psiconv_list_resize(psiconv_list l,psiconv_u32 nr); struct psiconv_list_s { @@ -53,9 +58,8 @@ { if (l->max_len) free(l->els); - l->max_len = 0; - l->cur_len = 0; - l->els = NULL; + free(l); + l = NULL; } void psiconv_list_free_el(psiconv_list l, void free_el(void *el)) @@ -74,6 +78,11 @@ return l->cur_len == 0; } +void psiconv_list_empty(psiconv_list l) +{ + l->cur_len = 0; +} + void *psiconv_list_get(const psiconv_list l, psiconv_u32 indx) { if (indx >= l->cur_len) @@ -92,6 +101,23 @@ return 0; } +int psiconv_list_pop(psiconv_list l, void *el) +{ + if (! l->cur_len) + return -PSICONV_E_OTHER; + l->cur_len --; + memcpy(el,((char *)(l->els)) + l->cur_len * l->el_size,l->el_size); + return -PSICONV_E_OK; +} + +int psiconv_list_replace(psiconv_list l, psiconv_u32 indx, const void *el) +{ + if (indx >= l->cur_len) + return -PSICONV_E_OTHER; + memcpy(((char *) (l->els)) + indx * l->el_size,el, l->el_size); + return -PSICONV_E_OK; +} + void psiconv_list_foreach_el(psiconv_list l, void action(void *el)) { psiconv_u32 i; @@ -178,3 +204,5 @@ l->cur_len += extra->cur_len; return 0; } + +