diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-14 13:09:26 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-14 13:09:26 +0000 |
commit | 3330e6ed47c71b87bb79c5e277214a36d3f2ad3b (patch) | |
tree | 2e019b93bae58aef42d543332cce10dc706f43e7 /array.c | |
parent | 396543790dc1c844c726b77a95c6180978232abd (diff) |
Add code to simplify arrays of nested scalars, sometimes created by functions or operators
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -97,4 +97,23 @@ arrayitem(Array *a, int index) exits(nil); } return res; +} + +Array * +simplifyarray(Array *a) +{ + /* simplify an array if possible. */ + if(a->type != AtypeArray || a->size == 0) + return fnSame(a); + int type = a->arraydata[0]->type; + int i; + for(i = 0; i < a->size; i++) + if(a->arraydata[i]->type != type || a->arraydata[i]->rank != 0) + return fnSame(a); + Array *b = allocarray(type, a->rank, a->size); + for(i = 0; i < a->rank; i++) + b->shape[i] = a->shape[i]; + for(i = 0; i < a->size; i++) + memcpy(b->rawdata + i * datasizes[type], a->arraydata[i]->rawdata, datasizes[type]); + return b; }
\ No newline at end of file |