From 37af32d95c593dd7523d92735258a396330b14f5 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Fri, 2 Sep 2022 11:27:53 -0400 Subject: [PATCH] =?UTF-8?q?Faster=20/=E2=81=BC=20for=20boolean=20and=20lon?= =?UTF-8?q?g=201-byte=20and=202-byte=20=F0=9D=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/sfns.c | 71 +++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index 67fa629c..5d913728 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -712,36 +712,49 @@ B slash_im(B t, B x) { usz xia = IA(x); if (xia==0) { decG(x); return emptyIVec(); } switch(xe) { default: UD; - case el_i8: { - i8* xp = i8any_ptr(x); - usz i,j; B r; i8 max=-1; - for (i = 0; i < xia; i++) { i8 c=xp[i]; if (c<=max) break; max=c; } - for (j = i; j < xia; j++) { i8 c=xp[j]; max=c>max?c:max; if (c<0) thrM("/⁼: Argument cannot contain negative numbers"); } - usz ria = max+1; - if (i==xia) { - u64* rp; r = m_bitarrv(&rp, ria); for (usz i=0; i0); + f64* rp; B r = m_f64arrv(&rp, ria); + rp[sum>0] = sum; rp[0] = xia - sum; + decG(x); return num_squeeze(r); } - case el_i16: { - i16* xp = i16any_ptr(x); - usz i,j; B r; i16 max=-1; - for (i = 0; i < xia; i++) { i16 c=xp[i]; if (c<=max) break; max=c; } - for (j = i; j < xia; j++) { i16 c=xp[j]; max=c>max?c:max; if (c<0) thrM("/⁼: Argument cannot contain negative numbers"); } - usz ria = max+1; - if (i==xia) { - u64* rp; r = m_bitarrv(&rp, ria); for (usz i=0; ixp[a-1]) a++; \ + max=xp[a-1]; \ + if (a==xia) { /* Sorted unique argument */ \ + usz ria = max + 1; \ + u64* rp; r = m_bitarrv(&rp, ria); for (usz i=0; imax) max=c; } \ + if ((i##N)max<0) thrM("/⁼: Argument cannot contain negative numbers"); \ + usz ria = max+1; \ + i##N* rp; r = m_i##N##arrv(&rp, ria); for (usz i=0; ia; }