diff options
Diffstat (limited to 'functions.c')
-rw-r--r-- | functions.c | 219 |
1 files changed, 110 insertions, 109 deletions
diff --git a/functions.c b/functions.c index 102590d..3112e06 100644 --- a/functions.c +++ b/functions.c @@ -1,6 +1,7 @@ #include <u.h> #include <libc.h> #include <bio.h> +#include <thread.h> #include "apl9.h" @@ -153,7 +154,7 @@ runfunc(Function f, Array *left, Array *right) if(dfnres->tag != ArrayTag || result == nil) result = mkscalarint(0); /* Very stupid */ else - incarrayref(result); + incref(result); freedatum(dfnres); }else if(f.type == FunctypePrim){ if(left){ @@ -360,11 +361,11 @@ fnFactorial(Array *right) Array *result = nil; if(GetType(right) == AtypeArray){ result = duparrayshape(right, AtypeArray); - for(int i = 0; i < GetSize(right); i++) + for(int i = 0; i < right->size; i++) result->arraydata[i] = fnFactorial(right->arraydata[i]); }else if(GetType(right) == AtypeInt){ result = duparrayshape(right, AtypeFloat); - for(int i = 0; i < GetSize(result); i++){ + for(int i = 0; i < result->size; i++){ double x = 1; vlong n = right->intdata[i]; if(n < 0) @@ -386,21 +387,21 @@ fnRoll(Array *right) Array *result = nil; if(GetType(right) == AtypeArray){ result = duparrayshape(right, AtypeArray); - for(int i = 0; i < GetSize(right); i++) + for(int i = 0; i < right->size; i++) result->arraydata[i] = fnRoll(right->arraydata[i]); }else if(GetType(right) == AtypeInt){ - if(GetSize(right) == 0) + if(right->size == 0) return duparrayshape(right, AtypeInt); int io = globalIO(); vlong lowest = right->intdata[0]; - for(int i = 1; i < GetSize(right); i++) + for(int i = 1; i < right->size; i++) if(right->intdata[i] < lowest) lowest = right->intdata[i]; if(lowest < 0) throwerror(nil, EDomain); else if(lowest == 0){ result = duparrayshape(right, AtypeFloat); - for(int i = 0; i < GetSize(right); i++){ + for(int i = 0; i < right->size; i++){ vlong max = right->intdata[i]; if(max == 0) do{ @@ -411,7 +412,7 @@ fnRoll(Array *right) } }else{ result = duparrayshape(right, AtypeInt); - for(int i = 0; i < GetSize(right); i++) + for(int i = 0; i < right->size; i++) result->intdata[i] = io + lrand() % right->intdata[i]; } }else @@ -441,12 +442,12 @@ fnFloor(Array *right) break; case AtypeFloat: res = duparrayshape(right, AtypeInt); - for(int i = 0; i < GetSize(right); i++) + for(int i = 0; i < right->size; i++) res->intdata[i] = floor(right->floatdata[i]); break; case AtypeArray: res = duparrayshape(right, AtypeArray); - for(int i = 0; i < GetSize(right); i++) + for(int i = 0; i < right->size; i++) res->arraydata[i] = fnFloor(right->arraydata[i]); break; default: @@ -458,7 +459,7 @@ fnFloor(Array *right) Array * fnSame(Array *right) { - incarrayref(right); + incref(right); return right; } @@ -471,7 +472,7 @@ fnUniqueMask(Array *right) res->intdata[0] = 1; return res; } - if(GetSize(right) == 0){ + if(right->size == 0){ Array *res = allocarray(AtypeInt, 1, 0); res->shape[0] = 0; return res; @@ -501,12 +502,12 @@ fnMix(Array *right) { if(GetType(right) != AtypeArray) return fnSame(right); - if(GetSize(right) == 0) + if(right->size == 0) return rundfn(L"((⍴⍵),⍴⊃⍵)⍴⊃⍵", nil, nil, nil, right); int commonrank = 0; int i,j; - for(i = 0; i < GetSize(right); i++) + for(i = 0; i < right->size; i++) if(GetRank(right->arraydata[i]) > commonrank) commonrank = GetRank(right->arraydata[i]); @@ -515,7 +516,7 @@ fnMix(Array *right) for(i = 0; i < commonrank; i++) commonshape->intdata[i] = 0; - for(i = 0; i < GetSize(right); i++){ + for(i = 0; i < right->size; i++){ Array *a = right->arraydata[i]; for(j = 0; j < GetRank(a); j++){ if(a->shape[GetRank(a)-1-j] > commonshape->intdata[commonrank-1-j]) @@ -527,7 +528,7 @@ fnMix(Array *right) int commonsize = 1; for(i = 0; i < GetRank(right); i++) size *= right->shape[i]; - for(i = 0; i < GetSize(commonshape); i++){ + for(i = 0; i < commonshape->size; i++){ size *= commonshape->intdata[i]; commonsize *= commonshape->intdata[i]; } @@ -535,7 +536,7 @@ fnMix(Array *right) Array *result = allocarray(AtypeArray, GetRank(right) + commonrank, size); for(i = 0; i < GetRank(right); i++) result->shape[i] = right->shape[i]; - for(j = 0; j < GetSize(commonshape); j++) + for(j = 0; j < commonshape->size; j++) result->shape[i+j] = commonshape->intdata[j]; int *index = emalloc(sizeof(int) * commonrank); @@ -548,10 +549,10 @@ fnMix(Array *right) result->arraydata[i*commonsize] = a->arraydata[0]; else result->arraydata[i*commonsize] = a; - incarrayref(result->arraydata[i*commonsize]); + incref(result->arraydata[i*commonsize]); for(j = 1; j < commonsize; j++){ result->arraydata[i*commonsize+j] = fill; - incarrayref(fill); + incref(fill); } }else{ for(j = 0; j < commonrank; j++) @@ -561,19 +562,19 @@ fnMix(Array *right) int nfill = commonshape->intdata[commonrank-1-k] - a->shape[GetRank(a)-1-k]; while(nfill--){ result->arraydata[i*commonsize+offset] = fill; - incarrayref(fill); + incref(fill); offset++; } index[commonrank-1-k] = 0; index[commonrank-2-k]++; } - if(j < GetSize(a)){ + if(j < a->size){ result->arraydata[i*commonsize+offset] = arrayitem(a, j); offset++; index[commonrank-1]++; }else if(offset < commonsize){ result->arraydata[i*commonsize+offset] = fill; - incarrayref(fill); + incref(fill); offset++; } } @@ -590,7 +591,7 @@ fnSplit(Array *right) { Rune *code = L"0≡≢⍴⍵: ⍵ ⋄ 1≡≢⍴⍵: ⊂⍵ ⋄ (⊂⍵)⌷⍨¨⍳¯1↓⍴⍵"; Array *result = rundfn(code, nil, nil, nil, right); - if(GetSize(result) == 0 && GetType(result) == AtypeArray) + if(result->size == 0 && GetType(result) == AtypeArray) result->prototype = rundfn(L"⊂(⊃⌽⍴⍵)↑⎕proto ⍵", nil, nil, nil, right); return result; } @@ -598,7 +599,7 @@ fnSplit(Array *right) Array * fnEnclose(Array *right) { - incarrayref(right); + incref(right); if(simplescalar(right)) return right; else{ @@ -611,7 +612,7 @@ fnEnclose(Array *right) Array * fnDisclose(Array *right) { - if(GetSize(right) == 0){ + if(right->size == 0){ Array *fill = fillelement(right); Array *res = fnDisclose(fill); freearray(fill); @@ -691,7 +692,7 @@ fnIndexGenerator(Array *right) for(vlong i = 0; i < n; i++) result->intdata[i] = i + io; }else if(GetRank(right) == 1){ - if(GetSize(right) == 0) + if(right->size == 0) return rundfn(L"⊂⍬", nil, nil, nil, nil); else result = rundfn(L"⊃⍣(0<≢⍵),⌾⌿⍳¨⍵", nil, nil, nil, right); @@ -709,13 +710,13 @@ fnWhere(Array *right) Array * fnEnlist(Array *right) { - if(GetSize(right) == 0) + if(right->size == 0) return fnSame(right); if(GetType(right) != AtypeArray) return fnRavel(right); else{ Array *res = fnEnlist(right->arraydata[0]); - for(int i = 1; i < GetSize(right); i++){ + for(int i = 1; i < right->size; i++){ Array *old = res; Array *tmp = fnEnlist(right->arraydata[i]); res = fnCatenateFirst(res, tmp); @@ -731,7 +732,7 @@ fnUnique(Array *right) { if(GetRank(right) == 0) return fnRavel(right); - if(GetSize(right) == 0) + if(right->size == 0) return fnSame(right); return rundfn(L"(≠⍵)⌿⍵", nil, nil, nil, right); @@ -743,7 +744,7 @@ fnNot(Array *right) if(GetType(right) != AtypeInt) throwerror(nil, EDomain); Array *res = duparray(right); - for(int i = 0; i < GetSize(res); i++){ + for(int i = 0; i < res->size; i++){ if(res->intdata[i] == 0) res->intdata[i] = 1; else if(res->intdata[i] == 1) @@ -762,7 +763,7 @@ fnRavel(Array *right) Array *res = duparray(right); SetRank(res, 1); res->shape = erealloc(res->shape, sizeof(*res->shape) * 1); - res->shape[0] = GetSize(res); + res->shape[0] = res->size; return res; } @@ -773,7 +774,7 @@ fnTable(Array *right) SetRank(res, 2); res->shape = erealloc(res->shape, sizeof(*res->shape) * 2); res->shape[0] = GetRank(right) ? res->shape[0] : 1; - res->shape[1] = GetSize(right) / res->shape[0]; + res->shape[1] = right->size / res->shape[0]; return res; } @@ -818,7 +819,7 @@ fnReverseFirst(Array *right) Array *res = duparray(right); int cells = res->shape[0]; - int elems = GetSize(res) / cells; + int elems = res->size / cells; for(int i = 0; i < cells; i++) memcpy( res->rawdata + i * elems * datasizes[GetType(res)], @@ -845,7 +846,7 @@ fnTranspose(Array *right) accTo *= right->shape[i]; } - for(from = 0; from < GetSize(right); from++){ + for(from = 0; from < right->size; from++){ to = 0; int tmp = from; for(int i = GetRank(right)-1; i >= 0; i--){ @@ -904,7 +905,7 @@ fnFormat(Array *right) if(right->shape[GetRank(right)-1] == 0) size = 0; else - size = maxwidth * GetSize(right) / right->shape[GetRank(right)-1]; + size = maxwidth * right->size / right->shape[GetRank(right)-1]; Array *result = allocarray(AtypeRune, GetRank(right), size); result->shape[GetRank(result)-1] = maxwidth; @@ -949,7 +950,7 @@ Array *name(Array *left, Array *right){\ Array *res;\ if(nested){\ res = duparrayshape(left, AtypeArray);\ - for(int i = 0; i < GetSize(left); i++){\ + for(int i = 0; i < left->size; i++){\ Array *l = arrayitem(left, i);\ Array *r = arrayitem(right, i);\ res->arraydata[i] = name(l,r);\ @@ -958,7 +959,7 @@ Array *name(Array *left, Array *right){\ }\ }else{\ res = duparray(left);\ - for(int i = 0; i < GetSize(left); i++)\ + for(int i = 0; i < left->size; i++)\ switch(GetType(left)){\ default: throwerror(nil, EDomain); break;\ cases\ @@ -1096,7 +1097,7 @@ fnDeal(Array *left, Array *right) { if(GetType(left) != AtypeInt || GetType(right) != AtypeInt) throwerror(nil, EDomain); - if(GetSize(left) != 1 || GetSize(right) != 1) + if(left->size != 1 || right->size != 1) throwerror(nil, ELength); vlong x = left->intdata[0]; vlong y = right->intdata[0]; @@ -1171,7 +1172,7 @@ Array * fnLeft(Array *left, Array *right) { USED(right); - incarrayref(left); + incref(left); return left; } @@ -1179,7 +1180,7 @@ Array * fnRight(Array *left, Array *right) { USED(left); - incarrayref(right); + incref(right); return right; } @@ -1316,27 +1317,27 @@ fnTake(Array *left, Array *right) if(GetRank(right) == 0){ right = duparray(right); - SetRank(right, GetSize(left)); + SetRank(right, left->size); right->shape = erealloc(right->shape, sizeof(*right->shape) * GetRank(right)); for(i = 0; i < GetRank(right); i++) right->shape[i] = 1; }else right = fnSame(right); - if(GetSize(left) > GetRank(right)) + if(left->size > GetRank(right)) throwerror(nil, ELength); - else if(GetSize(left) == GetRank(right)) + else if(left->size == GetRank(right)) left = fnSame(left); else{ Array *old = left; left = fnShape(right); - for(i = 0; i < GetSize(old); i++) + for(i = 0; i < old->size; i++) left->intdata[i] = old->intdata[i]; } - int *shape = emalloc(sizeof(int) * GetSize(left)); + int *shape = emalloc(sizeof(int) * left->size); int size = 1; - for(i = 0; i < GetSize(left); i++){ + for(i = 0; i < left->size; i++){ int s = left->intdata[i]; shape[i] = s < 0 ? -s : s; size *= shape[i]; @@ -1350,17 +1351,17 @@ fnTake(Array *left, Array *right) if(size == 0 && GetType(result) == AtypeArray) result->prototype = fnSame(fill); - int *index = emallocz(sizeof(int) * GetSize(left), 1); + int *index = emallocz(sizeof(int) * left->size, 1); int fromindex; for(i = 0; i < size; i++){ - for(int j = GetSize(left)-1; index[j] == shape[j]; j--){ + for(int j = left->size-1; index[j] == shape[j]; j--){ index[j] = 0; index[j-1]++; } int inside = 1; fromindex = 0; - for(int j = 0; j < GetSize(left) && inside; j++){ + for(int j = 0; j < left->size && inside; j++){ vlong n = left->intdata[j]; vlong m = index[j]; if(n > 0 && m >= right->shape[j]) @@ -1385,8 +1386,8 @@ fnTake(Array *left, Array *right) memcpy(result->rawdata + i*datasizes[GetType(result)], fill->rawdata, datasizes[GetType(result)]); if(GetType(result) == AtypeArray) - incarrayref(result->arraydata[i]); - index[GetSize(left)-1]++; + incref(result->arraydata[i]); + index[left->size-1]++; } free(shape); @@ -1408,27 +1409,27 @@ fnDrop(Array *left, Array *right) if(GetRank(right) == 0){ right = duparray(right); - SetRank(right, GetSize(left)); + SetRank(right, left->size); right->shape = erealloc(right->shape, sizeof(*right->shape) * GetRank(right)); for(i = 0; i < GetRank(right); i++) right->shape[i] = 1; }else right = fnSame(right); - if(GetSize(left) > GetRank(right)) + if(left->size > GetRank(right)) throwerror(nil, ELength); - else if(GetSize(left) == GetRank(right)) + else if(left->size == GetRank(right)) left = duparray(left); else{ Array *old = left; left = allocarray(AtypeInt, 1, GetRank(right)); - left->shape[0] = GetSize(left); - for(i = 0; i < GetSize(old); i++) + left->shape[0] = left->size; + for(i = 0; i < old->size; i++) left->intdata[i] = old->intdata[i]; - for(; i < GetSize(left); i++) + for(; i < left->size; i++) left->intdata[i] = 0; } - for(int i = 0; i < GetSize(left); i++){ + for(int i = 0; i < left->size; i++){ vlong n = left->intdata[i]; vlong m = right->shape[i]; if(n > m || (-n) > m) @@ -1449,25 +1450,25 @@ fnPick(Array *left, Array *right) { if(GetRank(left) > 1) throwerror(nil, ERank); - if(GetSize(left) == 0) + if(left->size == 0) return fnSame(right); int io = globalIO(); Array *result = fnSame(right); - for(int i = 0; i < GetSize(left); i++){ + for(int i = 0; i < left->size; i++){ Array *ix = arrayitem(left, i); if(GetRank(ix) > 1) throwerror(nil, ERank); - if(GetSize(ix) != GetRank(result)) + if(ix->size != GetRank(result)) throwerror(nil, ERank); int index = 0; - for(int j = 0; j < GetSize(ix); j++){ + for(int j = 0; j < ix->size; j++){ int add = ix->intdata[j] - io; - for(int k = j+1; k < GetSize(ix); k++) + for(int k = j+1; k < ix->size; k++) add *= result->shape[k]; index += add; } - if(index >= GetSize(result)) + if(index >= result->size) throwerror(nil, EIndex); Array *tmp = result; result = arrayitem(result, index); @@ -1485,7 +1486,7 @@ fnPartition(Array *left, Array *right) throwerror(nil, ERank); if(GetType(left) != AtypeInt) throwerror(nil, EDomain); - if(GetSize(left) != right->shape[0]) + if(left->size != right->shape[0]) throwerror(nil, ELength); if(right->shape[0] == 0) return fnSame(right); /* TODO figure out if this is correct */ @@ -1498,8 +1499,8 @@ fnPartition(Array *left, Array *right) int start = -1; int io = globalIO(); int active = 0; - for(i = 0; i <= GetSize(left); i++){ - vlong n = i == GetSize(left) ? 0 : left->intdata[i]; + for(i = 0; i <= left->size; i++){ + vlong n = i == left->size ? 0 : left->intdata[i]; if(n < 0) throwerror(nil, EDomain); if(active && (n == 0 || n > prev)){ @@ -1538,15 +1539,15 @@ fnIndex(Array *left, Array *right) throwerror(nil, ERank); if(GetType(left) != AtypeArray && GetType(left) != AtypeInt) throwerror(nil, EDomain); - if(GetSize(left) > GetRank(right)) + if(left->size > GetRank(right)) throwerror(nil, ELength); /* extend left index vector to full format */ Array *oldleft = left; left = allocarray(AtypeArray, 1, GetRank(right)); left->shape[0] = GetRank(right); - for(i = 0; i < GetSize(left); i++){ - if(i >= GetSize(oldleft)){ + for(i = 0; i < left->size; i++){ + if(i >= oldleft->size){ Array *n = mkscalarint(right->shape[i]); left->arraydata[i] = fnIndexGenerator(n); freearray(n); @@ -1558,12 +1559,12 @@ fnIndex(Array *left, Array *right) Array *sub = oldleft->arraydata[i]; if(GetType(sub) != AtypeInt) throwerror(nil, EDomain); - for(int j = 0; j < GetSize(sub); j++){ + for(int j = 0; j < sub->size; j++){ if(sub->intdata[j] < io || sub->intdata[j] >= io + right->shape[i]) throwerror(nil, EIndex); } left->arraydata[i] = oldleft->arraydata[i]; - incarrayref(left->arraydata[i]); + incref(left->arraydata[i]); } } @@ -1572,7 +1573,7 @@ fnIndex(Array *left, Array *right) int rank = 0; int size = 1; - for(i = 0; i < GetSize(left); i++){ + for(i = 0; i < left->size; i++){ if(GetType(left) == AtypeArray){ Array *tmp = shape; Array *newShape = fnShape(left->arraydata[i]); @@ -1582,7 +1583,7 @@ fnIndex(Array *left, Array *right) } } - for(i = 0; i < GetSize(shape); i++){ + for(i = 0; i < shape->size; i++){ size *= shape->intdata[i]; rank++; } @@ -1592,14 +1593,14 @@ fnIndex(Array *left, Array *right) result->shape[i] = shape->intdata[i]; freearray(shape); int *leftindex = emallocz(sizeof(int) * GetRank(right), 1); - for(i = 0; i < GetSize(result); i++){ - for(int j = GetSize(left)-1; leftindex[j] == GetSize(left->arraydata[j]); j--){ + for(i = 0; i < result->size; i++){ + for(int j = left->size-1; leftindex[j] == left->arraydata[j]->size; j--){ leftindex[j] = 0; leftindex[j-1]++; } int from = 0; - int cellsize = GetSize(right); - for(int j = 0; j < GetSize(left); j++){ + int cellsize = right->size; + for(int j = 0; j < left->size; j++){ cellsize = cellsize / right->shape[j]; from += cellsize * (left->arraydata[j]->intdata[leftindex[j]] - io); } @@ -1608,8 +1609,8 @@ fnIndex(Array *left, Array *right) right->rawdata + from * datasizes[GetType(result)], datasizes[GetType(result)]); if(GetType(result) == AtypeArray) - incarrayref(result->arraydata[i]); - leftindex[GetSize(left)-1]++; + incref(result->arraydata[i]); + leftindex[left->size-1]++; } free(leftindex); freearray(left); @@ -1631,7 +1632,7 @@ fnIntervalIndex(Array *left, Array *right) Array * fnMembership(Array *left, Array *right) { - if(GetSize(right) == 0) + if(right->size == 0) return rundfn(L"(⍴⍵)⍴0", nil, nil, nil, left); if(GetRank(right) == 0) @@ -1651,15 +1652,15 @@ fnFind(Array *left, Array *right) } if(GetRank(left) < GetRank(right)){ - Array *newleft = allocarray(GetType(left), GetRank(right), GetSize(left)); + Array *newleft = allocarray(GetType(left), GetRank(right), left->size); for(i = 0; i < GetRank(right) - GetRank(left); i++) newleft->shape[i] = 1; for(j = 0; j < GetRank(left); j++) newleft->shape[i+j] = left->shape[j]; - memcpy(newleft->rawdata, left->rawdata, datasizes[GetType(left)] * GetSize(left)); + memcpy(newleft->rawdata, left->rawdata, datasizes[GetType(left)] * left->size); if(GetType(left) == AtypeArray) - for(i = 0; i < GetSize(left); i++) - incarrayref(newleft->arraydata[i]); + for(i = 0; i < left->size; i++) + incref(newleft->arraydata[i]); left = newleft; }else left = fnSame(left); @@ -1776,10 +1777,10 @@ fnCatenateFirst(Array *left, Array *right) /* TODO reduce duplicated code between copies from left and right */ /* Copy data from the left array */ - for(i = 0, j = 0; i < GetSize(leftarr); i++, j++){ + for(i = 0, j = 0; i < leftarr->size; i++, j++){ if(type == AtypeArray && GetType(leftarr) == AtypeArray){ result->arraydata[j] = leftarr->arraydata[i]; - incarrayref(result->arraydata[j]); + incref(result->arraydata[j]); }else if(type == AtypeArray && GetType(leftarr) != AtypeArray){ result->arraydata[j] = arrayitem(leftarr, i); }else{ @@ -1791,10 +1792,10 @@ fnCatenateFirst(Array *left, Array *right) } /* Copy data from the right array */ - for(i = 0; i < GetSize(rightarr); i++, j++){ + for(i = 0; i < rightarr->size; i++, j++){ if(type == AtypeArray && GetType(rightarr) == AtypeArray){ result->arraydata[j] = rightarr->arraydata[i]; - incarrayref(result->arraydata[j]); + incref(result->arraydata[j]); }else if(type == AtypeArray && GetType(rightarr) != AtypeArray){ result->arraydata[j] = arrayitem(rightarr, i); }else{ @@ -1808,7 +1809,7 @@ fnCatenateFirst(Array *left, Array *right) freearray(leftarr); freearray(rightarr); - if(GetSize(result) == 0 && GetType(result) == AtypeArray) + if(result->size == 0 && GetType(result) == AtypeArray) result->prototype = fillelement(left); return result; } @@ -1819,22 +1820,22 @@ fnReshape(Array *left, Array *right) vlong size = 1; int i; char *p; - for(i = 0; i < GetSize(left); i++) + for(i = 0; i < left->size; i++) size *= left->intdata[i]; - if(GetSize(left) == 0) + if(left->size == 0) return arrayitem(right, 0); - Array *res = allocarray(GetType(right), GetSize(left), size); + Array *res = allocarray(GetType(right), left->size, size); if(size == 0 && GetType(res) == AtypeArray) res->prototype = fillelement(right); - for(i = 0; i < GetSize(left); i++) + for(i = 0; i < left->size; i++) res->shape[i] = left->intdata[i]; for(i = 0, p = res->rawdata; i < size; i++, p += datasizes[GetType(res)]) - memcpy(p, right->rawdata + (datasizes[GetType(res)] * (i % GetSize(right))), datasizes[GetType(res)]); + memcpy(p, right->rawdata + (datasizes[GetType(res)] * (i % right->size)), datasizes[GetType(res)]); if(GetType(res) == AtypeArray) - for(i = 0; i < GetSize(res); i++) - incarrayref(res->arraydata[i]); + for(i = 0; i < res->size; i++) + incref(res->arraydata[i]); return res; } @@ -1850,16 +1851,16 @@ fnRotateFirst(Array *left, Array *right) if(GetType(left) != AtypeInt) throwerror(nil, EDomain); - if(GetRank(right) == 0 || GetSize(right) < 2) + if(GetRank(right) == 0 || right->size < 2) return fnSame(right); int i, j; - if(GetSize(left) == 1 && GetRank(right) != 0){ + if(left->size == 1 && GetRank(right) != 0){ vlong v = left->intdata[0]; - left = allocarray(AtypeInt, GetRank(right)-1, GetSize(right) / right->shape[0]); + left = allocarray(AtypeInt, GetRank(right)-1, right->size / right->shape[0]); for(i = 0; i < GetRank(left); i++) left->shape[i] = right->shape[i+1]; - for(i = 0; i < GetSize(left); i++) + for(i = 0; i < left->size; i++) left->intdata[i] = v; }else left = fnSame(left); @@ -1871,16 +1872,16 @@ fnRotateFirst(Array *left, Array *right) throwerror(nil, ELength); int n = right->shape[0]; - for(i = 0; i < GetSize(left); i++) + for(i = 0; i < left->size; i++) while(left->intdata[i] < 0) left->intdata[i] += n; Array *result = duparray(right); for(i = 0; i < n; i++){ - for(j = 0; j < GetSize(left); j++){ + for(j = 0; j < left->size; j++){ vlong rot = left->intdata[j]; - vlong from = j + ((i+rot)%n)*GetSize(left); - vlong to = j + i*GetSize(left); + vlong from = j + ((i+rot)%n)*left->size; + vlong to = j + i*left->size; memcpy(result->rawdata + to*datasizes[GetType(right)], right->rawdata + from*datasizes[GetType(right)], datasizes[GetType(right)]); @@ -1904,7 +1905,7 @@ fnSelfReference2(Array *left, Array *right) Array * fnSend(Array *left, Array *right) { - if(GetSize(right) != 1) + if(right->size != 1) throwerror(nil, ELength); if(GetType(right) != AtypeInt) throwerror(nil, EDomain); @@ -1956,10 +1957,10 @@ indexOfHelper(Array *left, Array *right, int interval) result->shape[i] = right->shape[i]; /* Reshape Y to allow easy picking of sub-arrays */ Array *rightshape = allocarray(AtypeInt, 1, GetRank(right) - rank + 1); - rightshape->shape[0] = GetSize(rightshape); + rightshape->shape[0] = rightshape->size; rightshape->intdata[0] = size; - for(i = 0; i < GetSize(rightshape) - 1; i++) - rightshape->intdata[GetSize(rightshape)-1-i] = right->shape[GetRank(right)-1-i]; + for(i = 0; i < rightshape->size - 1; i++) + rightshape->intdata[rightshape->size-1-i] = right->shape[GetRank(right)-1-i]; right = fnReshape(rightshape, right); Array **lefts = emalloc(sizeof(Array *) * n); |