summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'array.c')
-rw-r--r--array.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/array.c b/array.c
index 4208d9f..5fb2a32 100644
--- a/array.c
+++ b/array.c
@@ -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);