From 50d6dd8b50958271bf1ff13f99dc21d4cd8431f7 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 13 Jan 2022 19:45:22 +0000 Subject: Implement basic reference counting for arrays, which so they get freed when not in use anymore. --- apl9.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'apl9.h') diff --git a/apl9.h b/apl9.h index 64f7eba..7c44980 100644 --- a/apl9.h +++ b/apl9.h @@ -46,6 +46,7 @@ struct Array int *shape; int size; int stranded; /* 1 if build directly by stranding */ + int refs; /* reference counting */ union { char *rawdata; vlong *intdata; @@ -111,7 +112,6 @@ Rune *pparray(Array *); Statement *lexline(Rune *); /* array.c */ -Array *mkarray(int, int, int); Array *mkscalarint(vlong); Array *duparray(Array *); int simplearray(Array *); @@ -123,8 +123,14 @@ Datum *eval(Statement *); /* symbol.c */ Symbol *getsym(Symtab *, Rune *); Symtab *newsymtab(void); +void freesymtab(Symtab *); vlong globalIO(void); +/* memory.c */ +Array *allocarray(int, int, int); +void freearray(Array *); +void incref(Array *); + /* Monadic functions from functions.h */ Array *fnSame(Array *); Array *fnTally(Array *); @@ -151,4 +157,5 @@ extern Rune primhybridnames[]; /* lexer.c */ extern fnmonad monadfunctiondefs[]; /* function.c */ extern fndyad dyadfunctiondefs[]; /* function.c */ extern Symtab *globalsymtab; /* symbol.c */ -extern Symtab *currentsymtab; /* symbol.c */ \ No newline at end of file +extern Symtab *currentsymtab; /* symbol.c */ +extern int alloccounts; /* memory.c */ \ No newline at end of file -- cgit v1.2.3