diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-13 19:45:22 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-13 19:45:22 +0000 |
commit | 50d6dd8b50958271bf1ff13f99dc21d4cd8431f7 (patch) | |
tree | 504f2a16f29fefedc7ff0a326475f122d018590a /array.c | |
parent | b1b55e907a5aaf177344769d2b303351ba936bff (diff) |
Implement basic reference counting for arrays, which so they
get freed when not in use anymore.
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 22 |
1 files changed, 5 insertions, 17 deletions
@@ -10,23 +10,9 @@ int datasizes[] = { }; Array * -mkarray(arrayDataType t, int rank, int size) -{ - Array *a = malloc(sizeof(Array)); - a->rank = rank; - a->type = t; - a->size = size; - a->stranded = 0; - a->shape = malloc(sizeof(int) * rank); - a->rawdata = malloc(datasizes[t] * size); - a->type = t; - return a; -} - -Array * mkscalarint(vlong i) { - Array *a = mkarray(AtypeInt, 0, 1); + Array *a = allocarray(AtypeInt, 0, 1); a->intdata[0] = i; return a; @@ -35,10 +21,12 @@ mkscalarint(vlong i) Array * duparray(Array *a) { - Array *b = mkarray(a->type, a->rank, a->size); + Array *b = allocarray(a->type, a->rank, a->size); memcpy(b->shape, a->shape, sizeof(int) * a->rank); memcpy(b->rawdata, a->rawdata, datasizes[a->type]*a->size); - /* TODO duplicate recursivley */ + if(b->type == AtypeArray) + for(int i = 0; i < b->size; i++) + incref(b->arraydata[i]); return b; } |