use incG more
This commit is contained in:
parent
9862331696
commit
5a7d702bc6
@ -76,19 +76,18 @@ B indexOf_c2(B t, B w, B x) {
|
|||||||
u64* wp = bitarr_ptr(w);
|
u64* wp = bitarr_ptr(w);
|
||||||
u64 w0 = 1 & wp[0];
|
u64 w0 = 1 & wp[0];
|
||||||
u64 i = bit_find(wp, wia, !w0); decG(w);
|
u64 i = bit_find(wp, wia, !w0); decG(w);
|
||||||
if (i!=wia) inc(x);
|
if (i!=wia) incG(x);
|
||||||
B r = C2i(mul, wia , C2i(ne, w0, x)) ;
|
B r = C2i(mul, wia , C2i(ne, w0, x)) ;
|
||||||
return i==wia? r : C2(sub, r, C2i(mul, wia-i, C2i(eq, !w0, x)));
|
return i==wia? r : C2(sub, r, C2i(mul, wia-i, C2i(eq, !w0, x)));
|
||||||
}
|
}
|
||||||
if (wia<=(we<=el_i16?4:16) && xia>16 && we<el_B && xe<el_B) {
|
if (wia<=(we<=el_i16?4:16) && xia>16 && we<el_B && xe<el_B) {
|
||||||
SGetU(w);
|
SGetU(w);
|
||||||
#define XEQ(I) C2(ne, GetU(w,I), inc(x))
|
#define XEQ(I) C2(ne, GetU(w,I), incG(x))
|
||||||
B r = XEQ(wia-1);
|
B r = XEQ(wia-1);
|
||||||
for (usz i=wia-1; i--; ) r = C2(mul, XEQ(i), C2i(add, 1, r));
|
for (usz i=wia-1; i--; ) r = C2(mul, XEQ(i), C2i(add, 1, r));
|
||||||
#undef XEQ
|
#undef XEQ
|
||||||
decG(w); decG(x); return r;
|
decG(w); decG(x); return r;
|
||||||
}
|
}
|
||||||
// TODO O(wia×xia) for small xia
|
|
||||||
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)
|
||||||
@ -132,8 +131,8 @@ B memberOf_c2(B t, B w, B x) {
|
|||||||
single: {
|
single: {
|
||||||
usz xia = IA(x);
|
usz xia = IA(x);
|
||||||
SGetU(x)
|
SGetU(x)
|
||||||
for (usz i = 0; i < xia; i++) if (equal(GetU(x, i), w)) { r = inc(enclosed_1); goto dec_wx; }
|
for (usz i = 0; i < xia; i++) if (equal(GetU(x, i), w)) { r = incG(enclosed_1); goto dec_wx; }
|
||||||
r = inc(enclosed_0);
|
r = incG(enclosed_0);
|
||||||
dec_wx:; dec(w);
|
dec_wx:; dec(w);
|
||||||
goto dec_x;
|
goto dec_x;
|
||||||
}
|
}
|
||||||
@ -143,7 +142,7 @@ B memberOf_c2(B t, B w, B x) {
|
|||||||
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);
|
||||||
if (xia == 0) { r=taga(arr_shVec(allZeroes(wia))); decG(w); goto dec_x; }
|
if (xia == 0) { r=taga(arr_shVec(allZeroes(wia))); decG(w); goto dec_x; }
|
||||||
#define WEQ(V) C2(eq, inc(w), V)
|
#define WEQ(V) C2(eq, incG(w), V)
|
||||||
if (xe==el_bit) {
|
if (xe==el_bit) {
|
||||||
u64* xp = bitarr_ptr(x);
|
u64* xp = bitarr_ptr(x);
|
||||||
u64 x0 = 1 & xp[0];
|
u64 x0 = 1 & xp[0];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user