native vec⊐scalar

This commit is contained in:
dzaima 2021-06-27 18:03:51 +03:00
parent fdcb158ca5
commit 27b1e9ed8c

View File

@ -212,7 +212,32 @@ B indexOf_c1(B t, B x) {
return c1(rt_indexOf, x);
}
B indexOf_c2(B t, B w, B x) {
if (!isArr(w) || rnk(w)!=1 || !isArr(x) || rnk(x)!=1) return c2(rt_indexOf, w, x);
if (!isArr(w) || rnk(w)==0) thrM("⊐: 𝕨 must have rank at least 1");
if (rnk(w)==1) {
if (!isArr(x) || rnk(x)==0) {
usz wia = a(w)->ia;
B el = isArr(x)? TI(x).getU(x,0) : x;
i32 res = wia;
if (TI(w).elType==el_i32) {
if (q_i32(el)) {
i32* wp = i32any_ptr(w);
i32 v = o2iu(el);
for (usz i = 0; i < wia; i++) {
if (wp[i] == v) { res = i; break; }
}
}
} else {
BS2B wgetU = TI(w).getU;
for (usz i = 0; i < wia; i++) {
if (equal(wgetU(w,i), el)) { res = i; break; }
}
}
dec(w); dec(x);
i32* rp; B r = m_i32arrp(&rp, 1);
arr_shAllocR(r,0);
rp[0] = res;
return r;
} else if (rnk(x)==1) {
usz wia = a(w)->ia;
usz xia = a(x)->ia;
// TODO O(wia×xia) for small wia
@ -228,6 +253,9 @@ B indexOf_c2(B t, B w, B x) {
free_b2i(map); dec(w); dec(x);
return r;
}
}
return c2(rt_indexOf, w, x);
}
extern B rt_memberOf;
B memberOf_c1(B t, B x) {