From 325cfd6354dcccaa095767e0419760a3f9462fed Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sun, 9 Jan 2022 22:03:36 +0000 Subject: Add basic code for parser/evaluator. Can do simple stranding --- array.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index 766ccd8..4f904e1 100644 --- a/array.c +++ b/array.c @@ -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; +} -- cgit v1.2.3