summaryrefslogtreecommitdiff
path: root/operators.c
diff options
context:
space:
mode:
Diffstat (limited to 'operators.c')
-rw-r--r--operators.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/operators.c b/operators.c
index 336588a..73d5ec2 100644
--- a/operators.c
+++ b/operators.c
@@ -50,10 +50,10 @@ opEach(Datum *lefto, Array *left, Array *right)
rightarr = fnSame(right);
}
- Array *result = allocarray(AtypeArray, rightarr->rank, rightarr->size);
- for(i = 0; i < rightarr->rank; i++)
+ Array *result = allocarray(AtypeArray, GetRank(rightarr), GetSize(rightarr));
+ for(i = 0; i < GetRank(rightarr); i++)
result->shape[i] = rightarr->shape[i];
- for(i = 0; i < rightarr->size; i++){
+ for(i = 0; i < GetSize(rightarr); i++){
Array *elem1 = leftarr ? arrayitem(leftarr, i) : nil;
Array *elem2 = arrayitem(rightarr, i);
result->arraydata[i] = runfunc(lefto->func, elem1, elem2);
@@ -109,24 +109,24 @@ opOuterProduct(Datum *lefto, Array *left, Array *right)
throwerror(nil, EType);
int i;
- int rank = left->rank + right->rank;
+ int rank = GetRank(left) + GetRank(right);
int size = 1;
int *shape = emalloc(sizeof(int) * rank);
- for(i = 0; i < left->rank; i++){
+ for(i = 0; i < GetRank(left); i++){
shape[i] = left->shape[i];
size *= left->shape[i];
}
- for(i = 0; i < right->rank; i++){
- shape[i+left->rank] = right->shape[i];
+ for(i = 0; i < GetRank(right); i++){
+ shape[i+GetRank(left)] = right->shape[i];
size *= right->shape[i];
}
Array *result = allocarray(AtypeArray, rank, size);
for(i = 0; i < rank; i++)
result->shape[i] = shape[i];
- for(int leftindex = 0; leftindex < left->size; leftindex++){
- for(int rightindex = 0; rightindex < right->size; rightindex++){
- i = leftindex * right->size + rightindex;
+ for(int leftindex = 0; leftindex < GetSize(left); leftindex++){
+ for(int rightindex = 0; rightindex < GetSize(right); rightindex++){
+ i = leftindex * GetSize(right) + rightindex;
Array *leftitem = arrayitem(left, leftindex);
Array *rightitem = arrayitem(right, rightindex);
result->arraydata[i] = runfunc(lefto->func, leftitem, rightitem);
@@ -155,9 +155,9 @@ opReceive(Datum *lefto, Array *left, Array *right)
{
if(lefto->tag != FunctionTag)
throwerror(nil, EType);
- if(right->type != AtypeInt)
+ if(GetType(right) != AtypeInt)
throwerror(nil, EType);
- if(right->size != 1)
+ if(GetSize(right) != 1)
throwerror(nil, ELength);
USED(left);
return messagerecv(lefto->func, right->intdata[0]);
@@ -176,7 +176,7 @@ opPower(Datum *lefto, Datum *righto, Array *left, Array *right)
else
code = L"next←⍶⍵ ⋄ next⍹⍵:⍵ ⋄ ∇next";
}else if(righto->tag == ArrayTag){
- if(righto->array->type != AtypeInt || righto->array->rank != 0 || righto->array->size != 1)
+ if(GetType(righto->array) != AtypeInt || GetRank(righto->array) != 0 || GetSize(righto->array) != 1)
throwerror(L"right operand to ⍣", EDomain);
vlong times = righto->array->intdata[0];
if(times < 0){
@@ -206,7 +206,7 @@ opInnerProduct(Datum *lefto, Datum *righto, Array *left, Array *right)
if(lefto->tag != FunctionTag || righto->tag != FunctionTag)
throwerror(nil, EType);
- if(left->rank > 0 && right->rank > 0 && left->shape[left->rank-1] != right->shape[0])
+ if(GetRank(left) > 0 && GetRank(right) > 0 && left->shape[GetRank(left)-1] != right->shape[0])
throwerror(nil, ELength);
return rundfn(L"↑(↓⍺)(⍶/⍹¨)⌾⍉↓⍉⍵", lefto, righto, left, right);
@@ -246,14 +246,14 @@ opAtop(Datum *lefto, Datum *righto, Array *left, Array *right)
return result;
}else if(lefto->tag == FunctionTag && righto->tag == ArrayTag){
Array *ranks = righto->array;
- if(ranks->rank > 1)
+ if(GetRank(ranks) > 1)
throwerror(nil, ERank);
- if(ranks->type != AtypeInt)
+ if(GetType(ranks) != AtypeInt)
throwerror(nil, EType);
- if(ranks->size < 1 || ranks->size > 3)
+ if(GetSize(ranks) < 1 || GetSize(ranks) > 3)
throwerror(nil, ELength);
int p,q,r;
- switch(ranks->size){
+ switch(GetSize(ranks)){
case 1: p = q = r = ranks->intdata[0]; break;
case 2:
q = ranks->intdata[0];
@@ -270,16 +270,16 @@ opAtop(Datum *lefto, Datum *righto, Array *left, Array *right)
/* "Normalize" the ranks (remove negatives, and ranks above the array's ranks */
if(left){
- q = q < 0 ? left->rank + q : q;
+ q = q < 0 ? GetRank(left) + q : q;
q = q < 0 ? 0 : q;
- q = q > left->rank ? left->rank : q;
+ q = q > GetRank(left) ? GetRank(left) : q;
}
- p = p < 0 ? right->rank + p : p;
+ p = p < 0 ? GetRank(right) + p : p;
p = p < 0 ? 0 : p;
- p = p > right->rank ? right->rank : p;
- r = r < 0 ? right->rank + r : r;
+ p = p > GetRank(right) ? GetRank(right) : p;
+ r = r < 0 ? GetRank(right) + r : r;
r = r < 0 ? 0 : r;
- r = r > right->rank ? right->rank : r;
+ r = r > GetRank(right) ? GetRank(right) : r;
Array *result;
if(left){
@@ -293,7 +293,7 @@ opAtop(Datum *lefto, Datum *righto, Array *left, Array *right)
freearray(lefts);
freearray(rights);
}else{
- if(right->rank == p)
+ if(GetRank(right) == p)
result = runfunc(lefto->func, nil, right);
else{
Array *cellrank = mkscalarint(p);