From: ppisa Date: Fri, 28 Jul 2006 12:42:33 +0000 (+0000) Subject: Custom GSA array can be preinitialized by static intems list now. X-Git-Tag: ul_drv-0.8.0-release~44 X-Git-Url: https://rtime.felk.cvut.cz/gitweb/ulut.git/commitdiff_plain/04baa663ae8c86650ff62cebbb8ab644c79a3a7b Custom GSA array can be preinitialized by static intems list now. The functions gsa_cust_insert_at() and gsa_cust_delete_at() recognizes such case when alloc_count is zero and do array copy instead of items array free or realloc. --- diff --git a/ulut/ul_gsacust.c b/ulut/ul_gsacust.c index 3136808..c16cadd 100644 --- a/ulut/ul_gsacust.c +++ b/ulut/ul_gsacust.c @@ -46,11 +46,18 @@ gsa_cust_insert_at(gsa_array_field_t *array, void *item, unsigned where) if(where>cnt) where=cnt; if((cnt+1>=acnt)||!array->items) { - acnt+=GSA_ALLOC_STEP; - if(!array->items) + if(!array->items || !acnt){ + acnt=cnt+GSA_ALLOC_STEP; items=malloc(acnt*sizeof(void*)); - else + if(array->items && items) + memcpy(items,array->items,cnt*sizeof(void*)); + }else{ + if(acnt/4>GSA_ALLOC_STEP) + acnt+=acnt/4; + else + acnt+=GSA_ALLOC_STEP; items=realloc(array->items,acnt*sizeof(void*)); + } if(!items) return -1; array->alloc_count=acnt; array->items=items; @@ -71,6 +78,14 @@ gsa_cust_delete_at(gsa_array_field_t *array, unsigned indx) void **items=array->items; void **p; if(indx>=cnt) return -1; + if(cnt && !acnt){ + p=malloc(cnt*sizeof(void*)); + if(p){ + memcpy(p,items,cnt*sizeof(void*)); + array->alloc_count=acnt=cnt; + array->items=items=p; + } + } p=items+indx; array->count=--cnt; memmove(p,p+1,(items+cnt-p)*sizeof(void *));