|
From: Peep P. <so...@us...> - 2004-07-24 18:03:11
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv635 Modified Files: array.c Log Message: Removed unused code; working intersect_arrays; add_arrays Index: array.c =================================================================== RCS file: /cvsroot/agd/server/src/array.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- array.c 23 Jul 2004 17:19:58 -0000 1.17 +++ array.c 24 Jul 2004 18:03:02 -0000 1.18 @@ -15,6 +15,7 @@ #include "sys.h" #include "lpc.h" #include "array.h" +#include "vars.h" void init_array(array_t *a) { @@ -23,117 +24,45 @@ a->data = NULL; } -void free_array(array_t *a, void (*freefun)(variable_t)) +void free_array(array_t *a, void (*freefun)(variable_t*)) { int i; if(!freefun) - freefun = (void(*)(variable_t))free; /* free_var? */ + freefun = free_var; for(i=0;i<a->length;i++) - freefun(a->data[i]); + freefun(&a->data[i]); if(a->length) free(a->data); - init_array(a); + init_array(a); } -#if 0 -void array_push(array_t *a, variable_t *data) -{ - if(!a) - return; - a->length++; - a->data = xrealloc(a->data, sizeof(void *) * a->length); - a->data[a->length-1] = data; -} -#endif -#if 0 -void array_insert(array_t *a, void *data, int index) +void unref_array(array_t *a) { - int i; - -#ifdef DEBUG - if(index > a->length) { - printf("array_insert(): illegal index %d!\n", index); - return; - } -#endif - - a->length++; - a->data = realloc(a->data, sizeof(void *) * a->length); - for(i=a->length-1;i>index;i--) { - a->data[i] = a->data[i-1]; + a->ref--; + if(a->ref < 0) + printf("Warning: array[%p] ref < 0\n", a); + if(a->ref <= 0) { + free_array(a, NULL); } - a->data[index] = data; } -void array_remove(array_t *a, int index) +array_t *add_arrays(array_t *a1, array_t *a2) { int i; - if(index == a->length - 1) { - a->length--; - a->data = realloc(a->data, sizeof(void *) * a->length); - return; - } + array_t *ret; + ret = xmalloc(sizeof(array_t)); + ret->ref = 0; + ret->length = a1->length + a2->length; + ret->data = xmalloc(sizeof(variable_t) * ret->length); - for(i=index;i<a->length;i++) { - a->data[i] = a->data[i+1]; - } - a->length--; - a->data = realloc(a->data, sizeof(void *) * a->length); -/* a->data[++i] = NULL;*/ -} - -void array_remove_by_data(array_t *a, void *data) -{ - int i; - for(i=0;i<a->length;i++) { - if(a->data[i] == data) { - array_remove(a, i); - return; - } - } -} - -array_t *copy_array(array_t *a, void *(*copyfun)(void *)) -{ - array_t *p; - int i; - - p = type_xmalloc(array_t); - p->length = a->length; - p->data = malloc(sizeof(void *) * p->length); - - for(i = 0; i < p->length; i++) - if(copyfun) - p->data[i] = copyfun(a->data[i]); + for(i=0;i<ret->length;i++) { + /* use do_assign? */ + if(i < a1->length) + ret->data[i] = a1->data[i]; else - p->data[i] = a->data[i]; - - return p; -} - -array_t *array_concat(array_t *a1, array_t *a2) -{ - int oldlen, i; - - oldlen = a1->length; - a1->length += a2->length; - a1->data = realloc(a1->data, sizeof(void *) * a1->length); - - for(i = oldlen; i < a1->length; i++) - a1->data[i] = a2->data[i - oldlen]; - - return a1; -} -#endif - -void unref_array(array_t *a) -{ - a->ref--; - if(a->ref < 0) - printf("Warning: array[%p] ref < 0\n", a); - if(a->ref <= 0) { - free_array(a, NULL); + ret->data[i] = a2->data[i - a1->length]; } + return ret; } array_t *sub_arrays(array_t *a1, array_t *a2) { @@ -142,9 +71,7 @@ int appears_in; ret = xmalloc(sizeof(array_t)); - ret->ref = 1; - ret->length = 0; - ret->data = NULL; + init_array(ret); for(i=0;i<a1->length;i++) { appears_in = 0; @@ -167,5 +94,22 @@ } array_t *intersect_arrays(array_t *a1, array_t *a2) { - return a1; + int i, j; + array_t *ret; + + ret = xmalloc(sizeof(array_t)); + init_array(ret); + + for(i=0;i<a1->length;i++) { + for(j=0;j<a2->length;j++) { + if(!compare_vars(&a1->data[i], &a2->data[j])) { + ret->length++; + ret->data = xrealloc(ret->data, sizeof(variable_t) * ret->length); + ret->data[ret->length-1] = a1->data[i]; + break; + } + } + } + + return ret; } |