diff options
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 29 |
1 files changed, 27 insertions, 2 deletions
@@ -5,7 +5,8 @@ #include "apl9.h" int datasizes[] = { - [AtypeInt] = sizeof(vlong) + [AtypeInt] = sizeof(vlong), + [AtypeArray] = sizeof(Array *) }; Array * @@ -13,6 +14,8 @@ mkarray(arrayDataType t, int rank, int size) { Array *a = malloc(sizeof(Array)); a->rank = rank; + a->type = t; + a->size = size; a->shape = malloc(sizeof(int) * rank); a->rawdata = malloc(datasizes[t] * size); a->type = t; @@ -26,4 +29,26 @@ mkscalarint(vlong i) a->intdata[0] = i; return a; -}
\ No newline at end of file +} + +Array * +duparray(Array *a) +{ + Array *b = mkarray(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 */ + return b; +} + +int +simplearray(Array *a) +{ + return a->type != AtypeArray; +} + +int +simplescalar(Array *a) +{ + return simplearray(a) && a->rank == 0; +} |