From 5e2ac03b50608dea0cd7280f15c99b87a925fc63 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 24 May 2021 01:34:26 +0300 Subject: [PATCH] =?UTF-8?q?native=20=E2=88=8Aarr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/fns.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/builtins/fns.c b/src/builtins/fns.c index c8813268..9cbce486 100644 --- a/src/builtins/fns.c +++ b/src/builtins/fns.c @@ -222,7 +222,19 @@ B indexOf_c2(B t, B w, B x) { extern B rt_memberOf; B memberOf_c1(B t, B x) { - return c1(rt_memberOf, x); + if (isAtm(x) || rnk(x)==0) thrM("⍷: Argument cannot have rank 0"); + if (rnk(x)!=1) x = toCells(x); + usz xia = a(x)->ia; + + i32* rp; B r = m_i32arrv(&rp, xia); + H_Sb* set = m_Sb(64); + BS2B xgetU = TI(x).getU; + for (usz i = 0; i < xia; i++) { + B c = xgetU(x,i); + rp[i] = !ins_Sb(&set, c); + } + free_Sb(set); dec(x); + return r; } B memberOf_c2(B t, B w, B x) { if (!isArr(w) || rnk(w)!=1 || !isArr(x) || rnk(x)!=1) return c2(rt_memberOf, w, x);