diff --git a/src/builtins/selfsearch.c b/src/builtins/selfsearch.c index 9fd3099f..a711aba1 100644 --- a/src/builtins/selfsearch.c +++ b/src/builtins/selfsearch.c @@ -42,6 +42,7 @@ extern B ud_c1(B, B); extern B sub_c2(B, B, B); extern B mul_c2(B, B, B); extern B indexOf_c2(B, B, B); +extern B take_c2(B, B, B); extern B scan_add_bool(B x, u64 ia); extern B scan_max_num(B x, u8 xe, u64 ia); @@ -59,6 +60,13 @@ extern NOINLINE void memset64(u64* p, u64 v, usz l); #define TRY_HASHTAB_RET(NAME, W, RET) (void)0; #endif +static u8 fast_sameness(B x, u8 xe) { // 0: unknown; 1: all same; 2: all different + assert(IA(x)>0); + if (!FL_HAS_ALL(x, fl_asc|fl_dsc)) return 0; + B x0 = IGetU(x,0); + return equal(x0, x0)? 1 : 2; +} + static inline bool use_sorted(B x, u8 logw) { if (!FL_HAS(x, fl_asc|fl_dsc)) return 0; if (logw==6) return TI(x, elType) == el_f64; @@ -161,10 +169,18 @@ B memberOf_c1(B t, B x) { rp[0]=1; if (i