native ↑&↓
This commit is contained in:
parent
b5db412812
commit
60d2e2454f
@ -52,7 +52,7 @@ static inline void load_init() {
|
|||||||
bool rtComplete[] = {
|
bool rtComplete[] = {
|
||||||
/* +-×÷⋆√⌊⌈|¬ */ 1,1,1,1,1,0,1,1,1,1,
|
/* +-×÷⋆√⌊⌈|¬ */ 1,1,1,1,1,0,1,1,1,1,
|
||||||
/* ∧∨<>≠=≤≥≡≢ */ 1,1,1,1,1,1,1,1,1,1,
|
/* ∧∨<>≠=≤≥≡≢ */ 1,1,1,1,1,1,1,1,1,1,
|
||||||
/* ⊣⊢⥊∾≍↑↓↕«» */ 1,1,0,1,1,0,0,1,1,1,
|
/* ⊣⊢⥊∾≍↑↓↕«» */ 1,1,0,1,1,1,1,1,1,1,
|
||||||
/* ⌽⍉/⍋⍒⊏⊑⊐⊒∊ */ 0,0,1,1,0,1,1,0,0,0,
|
/* ⌽⍉/⍋⍒⊏⊑⊐⊒∊ */ 0,0,1,1,0,1,1,0,0,0,
|
||||||
/* ⍷⊔!˙˜˘¨⌜⁼´ */ 0,0,1,1,1,0,1,1,0,1,
|
/* ⍷⊔!˙˜˘¨⌜⁼´ */ 0,0,1,1,1,0,1,1,0,1,
|
||||||
/* ˝`∘○⊸⟜⌾⊘◶⎉ */ 0,1,1,1,1,1,0,1,0,0,
|
/* ˝`∘○⊸⟜⌾⊘◶⎉ */ 0,1,1,1,1,1,0,1,0,0,
|
||||||
@ -101,6 +101,8 @@ static inline void load_init() {
|
|||||||
rt_gradeUp = rtObjGet(rtObjRaw, 33); gc_add(rt_gradeUp);
|
rt_gradeUp = rtObjGet(rtObjRaw, 33); gc_add(rt_gradeUp);
|
||||||
rt_ud = rtObjGet(rtObjRaw, 27); gc_add(rt_ud);
|
rt_ud = rtObjGet(rtObjRaw, 27); gc_add(rt_ud);
|
||||||
rt_pick = rtObjGet(rtObjRaw, 36); gc_add(rt_pick);
|
rt_pick = rtObjGet(rtObjRaw, 36); gc_add(rt_pick);
|
||||||
|
rt_take = rtObjGet(rtObjRaw, 25); gc_add(rt_take);
|
||||||
|
rt_drop = rtObjGet(rtObjRaw, 26); gc_add(rt_drop);
|
||||||
|
|
||||||
for (usz i = 0; i < runtimeLen; i++) {
|
for (usz i = 0; i < runtimeLen; i++) {
|
||||||
#ifdef ALL_R1
|
#ifdef ALL_R1
|
||||||
|
|||||||
38
src/sfns.c
38
src/sfns.c
@ -392,15 +392,36 @@ B slicev(B x, usz s, usz ia) {
|
|||||||
arr_shVec(r, ia);
|
arr_shVec(r, ia);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
B rt_take, rt_drop;
|
||||||
|
B take_c1(B t, B x) { return c1(rt_take, x); }
|
||||||
|
B drop_c1(B t, B x) { return c1(rt_drop, x); }
|
||||||
B take_c2(B t, B w, B x) {
|
B take_c2(B t, B w, B x) {
|
||||||
if (isAtm(x) || rnk(x)!=1) thrM("↑: NYI 1≠=𝕩");
|
if (isNum(w) && isArr(x) && rnk(x)==1) {
|
||||||
i64 v = o2i64(w); usz ia = a(x)->ia;
|
i64 v = o2i64(w);
|
||||||
return v<0? slicev(x, ia+v, -v) : slicev(x, 0, v);
|
usz ia = a(x)->ia;
|
||||||
|
u64 va = v<0? -v : v;
|
||||||
|
if (va>ia) {
|
||||||
|
MAKE_MUT(r, va);
|
||||||
|
B xf = getFillE(x);
|
||||||
|
mut_copy(r, v<0? va-ia : 0, x, 0, ia);
|
||||||
|
mut_fill(r, v<0? 0 : ia, xf, va-ia);
|
||||||
|
dec(x);
|
||||||
|
dec(xf);
|
||||||
|
return mut_fv(r);
|
||||||
|
}
|
||||||
|
if (v<0) return slicev(x, ia+v, -v);
|
||||||
|
else return slicev(x, 0, v);
|
||||||
|
}
|
||||||
|
return c2(rt_take, w, x);
|
||||||
}
|
}
|
||||||
B drop_c2(B t, B w, B x) {
|
B drop_c2(B t, B w, B x) {
|
||||||
if (isAtm(x) || rnk(x)!=1) thrM("↓: NYI 1≠=𝕩");
|
if (isNum(w) && isArr(x) && rnk(x)==1) {
|
||||||
i64 v = o2i64(w); usz ia = a(x)->ia;
|
i64 v = o2i64(w);
|
||||||
return v<0? slicev(x, 0, v+ia) : slicev(x, v, ia-v);
|
usz ia = a(x)->ia;
|
||||||
|
if (v<0) return -v>ia? slicev(x, 0, 0) : slicev(x, 0, v+ia);
|
||||||
|
else return v>ia? slicev(x, 0, 0) : slicev(x, v, ia-v);
|
||||||
|
}
|
||||||
|
return c2(rt_drop, w, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
B rt_join;
|
B rt_join;
|
||||||
@ -599,7 +620,10 @@ B shifta_c2(B t, B w, B x) {
|
|||||||
return qWithFill(mut_fcd(r, x), f);
|
return qWithFill(mut_fcd(r, x), f);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define F(A,M,D) A(shape) A(pick) A(pair) A(select) A(slash) A(join) A(couple) A(shiftb) A(shifta) D(take) D(drop)
|
|
||||||
|
|
||||||
|
|
||||||
|
#define F(A,M,D) A(shape) A(pick) A(pair) A(select) A(slash) A(join) A(couple) A(shiftb) A(shifta) A(take) A(drop)
|
||||||
BI_FNS0(F);
|
BI_FNS0(F);
|
||||||
static inline void sfns_init() { BI_FNS1(F) }
|
static inline void sfns_init() { BI_FNS1(F) }
|
||||||
#undef F
|
#undef F
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user