#include #include #include #include "apl9.h" int datasizes[] = { [AtypeInt] = sizeof(vlong), [AtypeArray] = sizeof(Array *) }; 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); a->intdata[0] = i; return a; } 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; }