copy ⊐ and ⊒ results to more correct element width arrays
This commit is contained in:
parent
f13e82af62
commit
ae4c4a03ee
@ -61,6 +61,10 @@ static NOINLINE B2 splitCells(B n, B p, u8 mode) { // 0:∊ 1:⊐ 2:⊒
|
|||||||
#undef SYMB
|
#undef SYMB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static B reduceWidth(B r, usz count) {
|
||||||
|
return count<=I8_MAX? taga(cpyI8Arr(r)) : count<=I16_MAX? taga(cpyI16Arr(r)) : r;
|
||||||
|
}
|
||||||
|
|
||||||
B indexOf_c2(B t, B w, B x) {
|
B indexOf_c2(B t, B w, B x) {
|
||||||
if (RARE(!isArr(w) || RNK(w)!=1)) {
|
if (RARE(!isArr(w) || RNK(w)!=1)) {
|
||||||
B2 t = splitCells(x, w, 1);
|
B2 t = splitCells(x, w, 1);
|
||||||
@ -90,18 +94,16 @@ B indexOf_c2(B t, B w, B x) {
|
|||||||
chk16: for (usz i = 0; i < wia; i++) if (((u16*)wp)[i]==v16 ) { res=i; break; } goto checked;
|
chk16: for (usz i = 0; i < wia; i++) if (((u16*)wp)[i]==v16 ) { res=i; break; } goto checked;
|
||||||
chk32: for (usz i = 0; i < wia; i++) if (((u32*)wp)[i]==v32 ) { res=i; break; } goto checked;
|
chk32: for (usz i = 0; i < wia; i++) if (((u32*)wp)[i]==v32 ) { res=i; break; } goto checked;
|
||||||
chk64f: for (usz i = 0; i < wia; i++) if (((f64*)wp)[i]==v64f) { res=i; break; } goto checked;
|
chk64f: for (usz i = 0; i < wia; i++) if (((f64*)wp)[i]==v64f) { res=i; break; } goto checked;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
SGetU(w)
|
SGetU(w)
|
||||||
for (usz i = 0; i < wia; i++) if (equal(GetU(w,i), el)) { res = i; goto checked; }
|
for (usz i = 0; i < wia; i++) if (equal(GetU(w,i), el)) { res = i; goto checked; }
|
||||||
}
|
}
|
||||||
|
|
||||||
checked:; notfound:;
|
checked:; notfound:;
|
||||||
decG(w); dec(x);
|
decG(w); dec(x);
|
||||||
i32* rp; Arr* r = m_i32arrp(&rp, 1);
|
B r = m_vec1(m_f64(res));
|
||||||
arr_shAlloc(r, 0);
|
arr_shAtm(a(r)); // replaces shape
|
||||||
rp[0] = res;
|
return r;
|
||||||
return taga(r);
|
|
||||||
} else {
|
} else {
|
||||||
u8 we = TI(w,elType); usz wia = IA(w);
|
u8 we = TI(w,elType); usz wia = IA(w);
|
||||||
u8 xe = TI(x,elType); usz xia = IA(x);
|
u8 xe = TI(x,elType); usz xia = IA(x);
|
||||||
@ -125,7 +127,7 @@ B indexOf_c2(B t, B w, B x) {
|
|||||||
if (xia+wia>20 && we<=el_i16 && xe<=el_i16) {
|
if (xia+wia>20 && we<=el_i16 && xe<=el_i16) {
|
||||||
B r;
|
B r;
|
||||||
TABLE(w, x, i32, wia, i)
|
TABLE(w, x, i32, wia, i)
|
||||||
return r;
|
return reduceWidth(r, wia);
|
||||||
}
|
}
|
||||||
i32* rp; B r = m_i32arrc(&rp, x);
|
i32* rp; B r = m_i32arrc(&rp, x);
|
||||||
H_b2i* map = m_b2i(64);
|
H_b2i* map = m_b2i(64);
|
||||||
@ -137,7 +139,7 @@ B indexOf_c2(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
for (usz i = 0; i < xia; i++) rp[i] = getD_b2i(map, GetU(x,i), wia);
|
for (usz i = 0; i < xia; i++) rp[i] = getD_b2i(map, GetU(x,i), wia);
|
||||||
free_b2i(map); decG(w); decG(x);
|
free_b2i(map); decG(w); decG(x);
|
||||||
return wia<=I8_MAX? taga(cpyI8Arr(r)) : wia<=I16_MAX? taga(cpyI16Arr(r)) : r;
|
return reduceWidth(r, wia);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +195,7 @@ B memberOf_c2(B t, B w, B x) {
|
|||||||
if (xia+wia>20 && we<=el_i16 && xe<=el_i16) {
|
if (xia+wia>20 && we<=el_i16 && xe<=el_i16) {
|
||||||
B r;
|
B r;
|
||||||
TABLE(x, w, i8, 0, 1)
|
TABLE(x, w, i8, 0, 1)
|
||||||
return num_squeeze(r);
|
return taga(cpyBitArr(r));
|
||||||
}
|
}
|
||||||
H_Sb* set = m_Sb(64);
|
H_Sb* set = m_Sb(64);
|
||||||
SGetU(x) SGetU(w)
|
SGetU(x) SGetU(w)
|
||||||
@ -264,7 +266,7 @@ B count_c2(B t, B w, B x) {
|
|||||||
free_b2i(map);
|
free_b2i(map);
|
||||||
}
|
}
|
||||||
TFREE(wnext); decG(w); decG(x);
|
TFREE(wnext); decG(w); decG(x);
|
||||||
return wia<=I8_MAX? taga(cpyI8Arr(r)) : wia<=I16_MAX? taga(cpyI16Arr(r)) : r;
|
return reduceWidth(r, wia);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user