summaryrefslogtreecommitdiff
path: root/hybrids.c
diff options
context:
space:
mode:
Diffstat (limited to 'hybrids.c')
-rw-r--r--hybrids.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/hybrids.c b/hybrids.c
index 243faa4..36b0a4d 100644
--- a/hybrids.c
+++ b/hybrids.c
@@ -1,6 +1,7 @@
#include <u.h>
#include <libc.h>
#include <bio.h>
+#include <thread.h>
#include "apl9.h"
@@ -42,31 +43,31 @@ fnReplicateFirst(Array *left, Array *right)
throwerror(nil, ERank);
/* Reshape right if scalar */
- if(GetSize(right) == 1){
+ if(right->size == 1){
Array *shape = GetRank(right) == 0 ? mkscalarint(1) : fnShape(right);
- shape->intdata[0] = GetSize(left);
+ shape->intdata[0] = left->size;
right = fnReshape(shape, right);
freearray(shape);
}else
right = fnSame(right);
int nsize = right->shape[0];
- int cellsize = nsize == 0 ? 1 : GetSize(right) / nsize;
+ int cellsize = nsize == 0 ? 1 : right->size / nsize;
int i;
- if(GetSize(left) == 1){
+ if(left->size == 1){
Array *shape = mkscalarint(nsize);
left = fnReshape(shape, left);
}else
left = fnSame(left);
- if(GetSize(left) != nsize){
+ if(left->size != nsize){
freearray(left);
freearray(right);
throwerror(nil, ELength);
}
nsize = 0;
- for(i = 0; i < GetSize(left); i++){
+ for(i = 0; i < left->size; i++){
vlong n = left->intdata[i];
nsize += n > 0 ? n : -n;
}
@@ -95,7 +96,7 @@ fnReplicateFirst(Array *left, Array *right)
}
if(GetType(result) == AtypeArray)
for(int j = 0; j < npos*cellsize; j++)
- incarrayref(result->arraydata[to*cellsize+j]);
+ incref(result->arraydata[to*cellsize+j]);
}
freearray(fill);
freearray(left);
@@ -116,7 +117,7 @@ fnExpandFirst(Array *left, Array *right)
int npos = 0;
int nsize = 0;
int i;
- for(i = 0; i < GetSize(left); i++){
+ for(i = 0; i < left->size; i++){
if(left->intdata[i] > 0)
npos++;
else if(left->intdata[i] == 0)
@@ -129,7 +130,7 @@ fnExpandFirst(Array *left, Array *right)
if(right->shape[0] != 1 && right->shape[0] != npos)
throwerror(nil, ELength);
- vlong cellsize = right->shape[0] == 0 ? 1 : GetSize(right) / right->shape[0];
+ vlong cellsize = right->shape[0] == 0 ? 1 : right->size / right->shape[0];
Array *result = allocarray(GetType(right), GetRank(right), nsize * cellsize);
result->shape[0] = nsize;
for(i = 1; i < GetRank(result); i++)
@@ -153,7 +154,7 @@ fnExpandFirst(Array *left, Array *right)
}
if(GetType(result) == AtypeArray)
for(int j = 0; j < npos*cellsize; j++)
- incarrayref(result->arraydata[to*cellsize+j]);
+ incref(result->arraydata[to*cellsize+j]);
if(right->shape[0] != 1 && !neg)
from++;
}
@@ -194,7 +195,7 @@ opReduceFirst(Datum *lefto, Array *left, Array *right)
if(left){
if(GetType(left) != AtypeInt)
throwerror(nil, EDomain);
- if(GetSize(left) != 1)
+ if(left->size != 1)
throwerror(nil, ELength);
vlong winsize = left->intdata[0];
if(winsize > right->shape[0])
@@ -215,7 +216,7 @@ opReduceFirst(Datum *lefto, Array *left, Array *right)
if(n == 0)
throwerror(L"Can't figure out identity element", ENotImplemented);
- Array *result = allocarray(AtypeArray, GetRank(right) - 1, GetSize(right) / n);
+ Array *result = allocarray(AtypeArray, GetRank(right) - 1, right->size / n);
for(int i = 0; i < GetRank(right)-1; i++)
result->shape[i] = right->shape[i+1];
@@ -224,11 +225,11 @@ opReduceFirst(Datum *lefto, Array *left, Array *right)
Array *tmp = mkscalarint(n);
index->arraydata[0] = fnIndexGenerator(tmp);
freearray(tmp);
- for(int i = 1; i < GetSize(index); i++)
+ for(int i = 1; i < index->size; i++)
index->arraydata[i] = mkscalarint(io);
- for(int i = 0; i < GetSize(result); i++){
- for(int j = GetSize(index) - 1; index->arraydata[j]->intdata[0] == io + right->shape[j]; j--){
+ for(int i = 0; i < result->size; i++){
+ for(int j = index->size - 1; index->arraydata[j]->intdata[0] == io + right->shape[j]; j--){
index->arraydata[j]->intdata[0] = io;
index->arraydata[j-1]->intdata[0]++;
}
@@ -242,7 +243,7 @@ opReduceFirst(Datum *lefto, Array *left, Array *right)
freearray(argR);
}
freearray(vector);
- index->arraydata[GetSize(index)-1]->intdata[0]++;
+ index->arraydata[index->size-1]->intdata[0]++;
}
freearray(index);
@@ -257,7 +258,7 @@ opScanFirst(Datum *lefto, Array *left, Array *right)
Array *result = duparrayshape(right, AtypeArray);
int n = result->shape[0];
- int m = GetSize(result) / n;
+ int m = result->size / n;
for(int i = 0; i < n; i++){
Array *len = mkscalarint(i + 1);
Array *index = fnIndexGenerator(len);