summaryrefslogtreecommitdiff
path: root/apl9.h
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-13 19:45:22 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-13 19:45:22 +0000
commit50d6dd8b50958271bf1ff13f99dc21d4cd8431f7 (patch)
tree504f2a16f29fefedc7ff0a326475f122d018590a /apl9.h
parentb1b55e907a5aaf177344769d2b303351ba936bff (diff)
Implement basic reference counting for arrays, which so they
get freed when not in use anymore.
Diffstat (limited to 'apl9.h')
-rw-r--r--apl9.h11
1 files changed, 9 insertions, 2 deletions
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