monadic ∨
This commit is contained in:
parent
6061a3c270
commit
de66696e7a
@ -25,8 +25,6 @@ B lt_c1(B t, B x) { return m_unit(x); }
|
|||||||
B eq_c1(B t, B x) { B r = m_i32(isArr(x)? rnk(x) : 0); decR(x); return r; }
|
B eq_c1(B t, B x) { B r = m_i32(isArr(x)? rnk(x) : 0); decR(x); return r; }
|
||||||
B ne_c1(B t, B x) { B r = m_f64(isArr(x)&&rnk(x)? *a(x)->sh : 1); decR(x); return r; }
|
B ne_c1(B t, B x) { B r = m_f64(isArr(x)&&rnk(x)? *a(x)->sh : 1); decR(x); return r; }
|
||||||
|
|
||||||
extern B rt_sortDsc;
|
|
||||||
B or_c1(B t, B x) { return c1(rt_sortDsc, x); }
|
|
||||||
|
|
||||||
void arith_init() {
|
void arith_init() {
|
||||||
c(BFn,bi_add)->ident = c(BFn,bi_sub)->ident = c(BFn,bi_or )->ident = c(BFn,bi_ne)->ident = c(BFn,bi_gt)->ident = m_i32(0);
|
c(BFn,bi_add)->ident = c(BFn,bi_sub)->ident = c(BFn,bi_or )->ident = c(BFn,bi_ne)->ident = c(BFn,bi_gt)->ident = m_i32(0);
|
||||||
|
|||||||
@ -17,17 +17,15 @@ typedef struct I32I32p { i32 k; i32 v; } I32I32p;
|
|||||||
#include "grade.h"
|
#include "grade.h"
|
||||||
|
|
||||||
#define SORT_CMP(W, X) compare(W, X)
|
#define SORT_CMP(W, X) compare(W, X)
|
||||||
#define SORT_NAME b
|
#define SORT_NAME bA
|
||||||
#define SORT_TYPE B
|
#define SORT_TYPE B
|
||||||
#include "sortTemplate.h"
|
#include "sortTemplate.h"
|
||||||
|
|
||||||
#define SORT_CMP(W, X) ((W) - (i64)(X))
|
#define SORT_CMP(W, X) ((W) - (i64)(X))
|
||||||
#define SORT_NAME i
|
#define SORT_NAME iA
|
||||||
#define SORT_TYPE i32
|
#define SORT_TYPE i32
|
||||||
#include "sortTemplate.h"
|
#include "sortTemplate.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
B and_c1(B t, B x) {
|
B and_c1(B t, B x) {
|
||||||
if (isAtm(x) || rnk(x)==0) thrM("∧: Argument cannot have rank 0");
|
if (isAtm(x) || rnk(x)==0) thrM("∧: Argument cannot have rank 0");
|
||||||
if (rnk(x)!=1) return bqn_merge(and_c1(t, toCells(x)));
|
if (rnk(x)!=1) return bqn_merge(and_c1(t, toCells(x)));
|
||||||
@ -36,7 +34,7 @@ B and_c1(B t, B x) {
|
|||||||
i32* xp = i32any_ptr(x);
|
i32* xp = i32any_ptr(x);
|
||||||
i32* rp; B r = m_i32arrv(&rp, xia);
|
i32* rp; B r = m_i32arrv(&rp, xia);
|
||||||
memcpy(rp, xp, xia*4);
|
memcpy(rp, xp, xia*4);
|
||||||
i_tim_sort(rp, xia);
|
iA_tim_sort(rp, xia);
|
||||||
dec(x);
|
dec(x);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -44,7 +42,39 @@ B and_c1(B t, B x) {
|
|||||||
HArr_p r = m_harrUv(xia);
|
HArr_p r = m_harrUv(xia);
|
||||||
BS2B xget = TI(x).get;
|
BS2B xget = TI(x).get;
|
||||||
for (usz i = 0; i < xia; i++) r.a[i] = xget(x,i);
|
for (usz i = 0; i < xia; i++) r.a[i] = xget(x,i);
|
||||||
b_tim_sort(r.a, xia);
|
bA_tim_sort(r.a, xia);
|
||||||
|
dec(x);
|
||||||
|
return withFill(r.b,xf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SORT_CMP(W, X) compare(X, W)
|
||||||
|
#define SORT_NAME bD
|
||||||
|
#define SORT_TYPE B
|
||||||
|
#include "sortTemplate.h"
|
||||||
|
|
||||||
|
#define SORT_CMP(W, X) ((X) - (i64)(W))
|
||||||
|
#define SORT_NAME iD
|
||||||
|
#define SORT_TYPE i32
|
||||||
|
#include "sortTemplate.h"
|
||||||
|
|
||||||
|
B or_c1(B t, B x) {
|
||||||
|
if (isAtm(x) || rnk(x)==0) thrM("∨: Argument cannot have rank 0");
|
||||||
|
if (rnk(x)!=1) return bqn_merge(or_c1(t, toCells(x)));
|
||||||
|
usz xia = a(x)->ia;
|
||||||
|
if (TI(x).elType==el_i32) {
|
||||||
|
i32* xp = i32any_ptr(x);
|
||||||
|
i32* rp; B r = m_i32arrv(&rp, xia);
|
||||||
|
memcpy(rp, xp, xia*4);
|
||||||
|
iD_tim_sort(rp, xia);
|
||||||
|
dec(x);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
B xf = getFillQ(x);
|
||||||
|
HArr_p r = m_harrUv(xia);
|
||||||
|
BS2B xget = TI(x).get;
|
||||||
|
for (usz i = 0; i < xia; i++) r.a[i] = xget(x,i);
|
||||||
|
bD_tim_sort(r.a, xia);
|
||||||
dec(x);
|
dec(x);
|
||||||
return withFill(r.b,xf);
|
return withFill(r.b,xf);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,8 +26,8 @@ B rtWrap_wrap(B x); // consumes
|
|||||||
_Thread_local B comp_currPath;
|
_Thread_local B comp_currPath;
|
||||||
_Thread_local B comp_currArgs;
|
_Thread_local B comp_currArgs;
|
||||||
|
|
||||||
B rt_sortDsc, rt_merge, rt_undo, rt_select, rt_slash, rt_join, rt_ud, rt_pick,rt_take,
|
B rt_merge, rt_undo, rt_select, rt_slash, rt_join, rt_ud, rt_pick,rt_take, rt_drop,
|
||||||
rt_drop, rt_group, rt_under, rt_reverse, rt_indexOf, rt_count, rt_memberOf, rt_find, rt_cell;
|
rt_group, rt_under, rt_reverse, rt_indexOf, rt_count, rt_memberOf, rt_find, rt_cell;
|
||||||
Block* load_compObj(B x, B src, Scope* sc) { // consumes x,src
|
Block* load_compObj(B x, B src, Scope* sc) { // consumes x,src
|
||||||
BS2B xget = TI(x).get;
|
BS2B xget = TI(x).get;
|
||||||
usz xia = a(x)->ia;
|
usz xia = a(x)->ia;
|
||||||
@ -170,8 +170,6 @@ static inline void load_init() { // very last init function
|
|||||||
HArr_p runtimeH = m_harrUc(rtObjRaw);
|
HArr_p runtimeH = m_harrUc(rtObjRaw);
|
||||||
BS2B rtObjGet = TI(rtObjRaw).get;
|
BS2B rtObjGet = TI(rtObjRaw).get;
|
||||||
|
|
||||||
rt_sortDsc = rtObjGet(rtObjRaw, 11); gc_add(rt_sortDsc);
|
|
||||||
rt_merge = rtObjGet(rtObjRaw, 13); gc_add(rt_merge);
|
|
||||||
rt_undo = rtObjGet(rtObjRaw, 48); gc_add(rt_undo);
|
rt_undo = rtObjGet(rtObjRaw, 48); gc_add(rt_undo);
|
||||||
rt_select = rtObjGet(rtObjRaw, 35); gc_add(rt_select);
|
rt_select = rtObjGet(rtObjRaw, 35); gc_add(rt_select);
|
||||||
rt_slash = rtObjGet(rtObjRaw, 32); gc_add(rt_slash);
|
rt_slash = rtObjGet(rtObjRaw, 32); gc_add(rt_slash);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user