Multiple IndexOfOne to search for a few values in a large array
This commit is contained in:
parent
d154ece51a
commit
52bca6a55c
@ -237,6 +237,18 @@ B indexOf_c2(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CHECK_CHRS_ELSE { tyEls: // Both numbers
|
CHECK_CHRS_ELSE { tyEls: // Both numbers
|
||||||
|
if (wia>32 && xia<=(we<=el_i8?1:6)) {
|
||||||
|
SGetU(x);
|
||||||
|
B r;
|
||||||
|
#define IND(T) \
|
||||||
|
T* rp; r = m_##T##arrc(&rp, x); \
|
||||||
|
for (usz i=0; i<xia; i++) rp[i] = indexOfOne(w, GetU(x,i))
|
||||||
|
if (xia<I32_MAX) { IND(i32); r=reduceI32Width(r, wia); }
|
||||||
|
else { IND(f64); }
|
||||||
|
#undef IND
|
||||||
|
decG(w); decG(x); return r;
|
||||||
|
}
|
||||||
|
|
||||||
if (we==el_bit) {
|
if (we==el_bit) {
|
||||||
u64* wp = bitarr_ptr(w);
|
u64* wp = bitarr_ptr(w);
|
||||||
u64 w0 = 1 & wp[0];
|
u64 w0 = 1 & wp[0];
|
||||||
@ -329,6 +341,13 @@ B memberOf_c2(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CHECK_CHRS_ELSE { tyEls: // Both numbers
|
CHECK_CHRS_ELSE { tyEls: // Both numbers
|
||||||
|
if (xia>32 && wia<=(xe<=el_i8?1:6)) {
|
||||||
|
SGetU(w);
|
||||||
|
i8* rp; r = m_i8arrc(&rp, w);
|
||||||
|
for (usz i=0; i<wia; i++) rp[i] = indexOfOne(x, GetU(w,i)) < xia;
|
||||||
|
decG(w); decG(x); return taga(cpyBitArr(r));
|
||||||
|
}
|
||||||
|
|
||||||
#define WEQ(V) C2(eq, incG(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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user