From 0cb5e4ee10579f9ad464adec85d4849f9a9c2f61 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Wed, 19 Oct 2022 22:00:42 -0400 Subject: [PATCH] Table-based 1- and 2-byte integer membership --- src/builtins/search.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/builtins/search.c b/src/builtins/search.c index 1d1d9331..72ce9875 100644 --- a/src/builtins/search.c +++ b/src/builtins/search.c @@ -101,6 +101,28 @@ B memberOf_c2(B t, B w, B x) { } #undef WEQ // TODO O(wiaƗxia) for small wia + if (xia+wia>20 && we<=el_i16 && xe<=el_i16 && we!=el_bit) { + usz xt = 1<<(8*elWidth(xe)); // Range of x writes + usz wt = 1<<(8*elWidth(we)); // Range of w lookups + usz t = xt>wt? xt : wt; // Table allocation width + void* wp = tyany_ptr(w); + void* xp = tyany_ptr(x); + usz m=wia, n=xia; + i8* rp; B r = m_i8arrv(&rp, m); + TALLOC(u8, tab0, t); u8* tab = tab0 + t/2; + // Initialize + if (we==el_i16 && m