summaryrefslogtreecommitdiff
path: root/functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'functions.c')
-rw-r--r--functions.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/functions.c b/functions.c
index 8a5c959..71e5400 100644
--- a/functions.c
+++ b/functions.c
@@ -58,7 +58,62 @@ fnmonad monadfunctiondefs[] = {
0, /* ⊖ */
0, /* ⍉ */
0, /* ⍎ */
- 0, /* ⍕ */
+ 0, /* ⍕ */
+};
+
+fndyad dyadfunctiondefs[] = {
+ 0, /* + */
+ 0, /* - */
+ 0, /* × */
+ 0, /* ÷ */
+ 0, /* * */
+ 0, /* ⍟ */
+ 0, /* ⌹ */
+ 0, /* ○ */
+ 0, /* ! */
+ 0, /* ? */
+ 0, /* | */
+ 0, /* ⌈ */
+ 0, /* ⌊ */
+ 0, /* ⊥ */
+ 0, /* ⊤ */
+ 0, /* ⊣ */
+ 0, /* ⊢ */
+ 0, /* = */
+ 0, /* ≠ */
+ 0, /* ≤ */
+ 0, /* < */
+ 0, /* > */
+ 0, /* ≥ */
+ 0, /* ≡ */
+ 0, /* ≢ */
+ 0, /* ∨ */
+ 0, /* ∧ */
+ 0, /* ⍲ */
+ 0, /* ⍱ */
+ 0, /* ↑ */
+ 0, /* ↓ */
+ 0, /* ⊂ */
+ 0, /* ⊃ */
+ 0, /* ⊆ */
+ 0, /* ⌷ */
+ 0, /* ⍋ */
+ 0, /* ⍒ */
+ 0, /* ⍳ */
+ 0, /* ⍸ */
+ 0, /* ∊ */
+ 0, /* ⍷ */
+ 0, /* ∪ */
+ 0, /* ∩ */
+ 0, /* ~ */
+ 0, /* , */
+ fnCatenateFirst, /* ⍪ */
+ fnReshape, /* ⍴ */
+ 0, /* ⌽ */
+ 0, /* ⊖ */
+ 0, /* ⍉ */
+ 0, /* ⍎ */
+ 0, /* ⍕ */
};
/* Monadic functions */
@@ -127,4 +182,23 @@ fnCatenateFirst(Array *left, Array *right)
memcpy(res->rawdata, left->rawdata, datasizes[res->type]*left->size);
memcpy(res->rawdata+datasizes[res->type]*left->size, right->rawdata, datasizes[res->type]*right->size);
return res;
+}
+
+Array *
+fnReshape(Array *left, Array *right)
+{
+ vlong size = 1;
+ int i;
+ char *p;
+ for(i = 0; i < left->size; i++)
+ size *= left->intdata[i];
+ if(left->size == 0)
+ size = 0;
+
+ Array *res = mkarray(right->type, left->size, size);
+ for(i = 0; i < left->size; i++)
+ res->shape[i] = left->intdata[i];
+ for(i = 0, p = res->rawdata; i < size; i++, p += datasizes[res->type])
+ memcpy(p, right->rawdata + (datasizes[res->type] * (i % right->size)), datasizes[res->type]);
+ return res;
} \ No newline at end of file