From: Peep P. <so...@us...> - 2004-06-07 15:36:01
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6773 Modified Files: array.c array.h Log Message: Arrays now only used for LPC, nothing else; uses xrealloc Index: array.c =================================================================== RCS file: /cvsroot/agd/server/src/array.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- array.c 1 Apr 2004 19:17:14 -0000 1.12 +++ array.c 7 Jun 2004 15:35:52 -0000 1.13 @@ -3,6 +3,9 @@ - solicit '03 changelog: + 04.06.04 - now uses xrealloc instead of realloc + 04.04.03 - arrays are now used only for LPC, and not for compilation + or anything. 13.12.03 - changed arrays from linked lists to pure C arrays. Arrays also aren't linked lists of variable_t's anymore, this is a generic data structure now. @@ -10,19 +13,21 @@ #include <stdlib.h> #include "compile_options.h" #include "sys.h" +#include "lpc.h" #include "array.h" void init_array(array_t *a) { a->length = 0; + a->ref = 0; a->data = NULL; } -void free_array(array_t *a, void (*freefun)(void *)) +void free_array(array_t *a, void (*freefun)(variable_t *)) { int i; if(!freefun) - freefun = xfree; + freefun = (void(*)(variable_t*))xfree; /* free_var? */ for(i=0;i<a->length;i++) freefun(a->data[i]); if(a->length) @@ -30,16 +35,17 @@ init_array(a); } -void array_push(array_t *a, void *data) +void array_push(array_t *a, variable_t *data) { if(!a) return; a->length++; - a->data = realloc(a->data, sizeof(void *) * a->length); + a->data = xrealloc(a->data, sizeof(void *) * a->length); a->data[a->length-1] = data; } +#if 0 void array_insert(array_t *a, void *data, int index) { int i; @@ -59,16 +65,6 @@ a->data[index] = data; } -#if 0 -void *array_pop(array_t *a) -{ - void *p; - a->length--; - p = a->data[a->length]; - return p; -} -#endif - void array_remove(array_t *a, int index) { int i; @@ -128,3 +124,12 @@ return a1; } +#endif + +void unref_array(array_t *a) +{ + a->ref--; + if(a->ref <= 0) { + free_array(a, NULL); + } +} Index: array.h =================================================================== RCS file: /cvsroot/agd/server/src/array.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- array.h 20 Mar 2004 20:26:36 -0000 1.6 +++ array.h 7 Jun 2004 15:35:52 -0000 1.7 @@ -3,16 +3,19 @@ typedef struct array_t { int length; - void **data; + int ref; + variable_t **data; } array_t; void init_array(array_t *a); -void array_push(array_t *a, void *data); +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_pop(array_t *a); void array_remove(array_t *a, int index); array_t *copy_array(array_t *a, void *(*copyfun)(void *)); -void free_array(array_t *a, void (*freefun)(void *)); -array_t *array_concat(array_t *a1, array_t *a2); +array_t *array_concat(array_t *a1, array_t *a2);*/ + #endif |