From 7326348c79a47cd75090fc8360493bdcb724dd26 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 7 Oct 2024 06:13:53 +0300 Subject: [PATCH] =?UTF-8?q?fast=20=E2=8D=B7=F0=9D=95=A9=20&=20=E2=88=8A?= =?UTF-8?q?=F0=9D=95=A9=20on=20fl=5Fasc+fl=5Fdsc=20=F0=9D=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/selfsearch.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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