From: Peep P. <so...@us...> - 2004-07-21 12:10:32
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10607 Modified Files: array.h array.c Log Message: sub_arrays, free_array Index: array.c =================================================================== RCS file: /cvsroot/agd/server/src/array.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- array.c 14 Jun 2004 20:48:08 -0000 1.15 +++ array.c 21 Jul 2004 12:10:17 -0000 1.16 @@ -23,18 +23,18 @@ 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 = (void(*)(variable_t))free; /* free_var? */ for(i=0;i<a->length;i++) freefun(a->data[i]); if(a->length) free(a->data); init_array(a); } - +#if 0 void array_push(array_t *a, variable_t *data) { if(!a) @@ -44,7 +44,7 @@ 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) { @@ -131,6 +131,37 @@ a->ref--; if(a->ref < 0) printf("Warning: array[%p] ref < 0\n", a); - if(a->ref <= 0) + if(a->ref <= 0) { free_array(a, NULL); + } +} + +array_t *sub_arrays(array_t *a1, array_t *a2) { + array_t *ret; + int i, j; + int appears_in; + + ret = xmalloc(sizeof(array_t)); + ret->ref = 1; + ret->length = 0; + ret->data = NULL; + + for(i=0;i<a1->length;i++) { + appears_in = 0; + + for(j=0;j<a2->length;j++) { + if(!compare_vars(&a1->data[i], &a2->data[j])) { + appears_in = 1; + break; + } + } + + if(!appears_in) { + ret->length++; + ret->data = xrealloc(ret->data, sizeof(variable_t) * ret->length); + ret->data[ret->length-1] = a1->data[i]; + } + } + + return ret; } Index: array.h =================================================================== RCS file: /cvsroot/agd/server/src/array.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- array.h 8 Jun 2004 20:44:53 -0000 1.8 +++ array.h 21 Jul 2004 12:10:17 -0000 1.9 @@ -4,18 +4,19 @@ typedef struct array { int length; int ref; - variable_t **data; + variable_t *data; } array_t; void init_array(array_t *a); -void array_push(array_t *a, variable_t *data); -void free_array(array_t *a, void (*freefun)(variable_t *)); +/*void array_push(array_t *a, variable_t *data);*/ +void free_array(array_t *a, void (*freefun)(variable_t)); #define ref_array(a) a->ref++ /* void array_insert(array_t *a, void *data, int index); void array_remove(array_t *a, int index); array_t *copy_array(array_t *a, void *(*copyfun)(void *)); array_t *array_concat(array_t *a1, array_t *a2);*/ +array_t *sub_arrays(array_t *a1, array_t *a2); #endif |