diff options
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -9,6 +9,7 @@ Array *inttofloatarray(Array *); int datasizes[] = { [AtypeInt] = sizeof(vlong), [AtypeFloat] = sizeof(double), + [AtypeRune] = sizeof(Rune), [AtypeArray] = sizeof(Array *) }; @@ -29,6 +30,24 @@ mkscalarfloat(double f) } Array * +mkscalarrune(Rune r) +{ + Array *a = allocarray(AtypeRune, 0, 1); + a->runedata[0] = r; + return a; +} + +Array * +mkrunearray(Rune *str) +{ + Array *a = allocarray(AtypeRune, 1, runestrlen(str)); + a->shape[0] = a->size; + for(int i = 0; i < a->size; i++) + a->runedata[i] = str[i]; + return a; +} + +Array * duparray(Array *a) { Array *b = allocarray(a->type, a->rank, a->size); @@ -135,6 +154,9 @@ arrayitem(Array *a, int index) case AtypeFloat: res = mkscalarfloat(a->floatdata[index]); break; + case AtypeRune: + res = mkscalarrune(a->runedata[index]); + break; case AtypeArray: res = a->arraydata[index]; incref(res); |