more typed ⊏

This commit is contained in:
dzaima 2021-09-10 20:20:54 +03:00
parent fc67c92510
commit b09d3785fd

View File

@ -249,36 +249,32 @@ B select_c2(B t, B w, B x) {
if (xr==1) { if (xr==1) {
usz xia = a(x)->ia; usz xia = a(x)->ia;
if (TI(w,elType)==el_i32) { #define CASE(T,E) if (TI(x,elType)==el_##T) { \
i32* wp = i32any_ptr(w); E* rp; B r = m_##T##arrc(&rp, w); \
#define BODY for (usz i = 0; i < wia; i++) { rp[i] = xp[WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia))]; } dec(w); dec(x); return r; E* xp = T##any_ptr(x); \
if (TI(x,elType)==el_i8 ) { i8* rp; B r = m_i8arrc (&rp, w); i8* xp = i8any_ptr (x); BODY } for (usz i = 0; i < wia; i++) { \
if (TI(x,elType)==el_i16) { i16* rp; B r = m_i16arrc(&rp, w); i16* xp = i16any_ptr(x); BODY } rp[i] = xp[WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia))]; \
if (TI(x,elType)==el_i32) { i32* rp; B r = m_i32arrc(&rp, w); i32* xp = i32any_ptr(x); BODY } } \
else if (TI(x,elType)==el_c8 ) { u8* rp; B r = m_c8arrc (&rp, w); u8* xp = c8any_ptr (x); BODY } dec(w); dec(x); return r; \
else if (TI(x,elType)==el_c16) { u16* rp; B r = m_c16arrc(&rp, w); u16* xp = c16any_ptr(x); BODY }
else if (TI(x,elType)==el_c32) { u32* rp; B r = m_c32arrc(&rp, w); u32* xp = c32any_ptr(x); BODY }
else if (TI(x,elType)==el_f64) { f64* rp; B r = m_f64arrc(&rp, w); f64* xp = f64any_ptr(x); BODY }
#undef BODY
else if (v(x)->type==t_harr) {
usz i = 0;
B* xp = harr_ptr(x);
HArr_p r = m_harrs(wia, &i);
for (; i < wia; i++) r.a[i] = inc(xp[WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia))]);
dec(x); return harr_fcd(r, w);
} else {
usz i = 0;
HArr_p r = m_harrs(wia, &i);
for (; i < wia; i++) {
usz c = WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia));
r.a[i] = Get(x, c);
} }
dec(x); #define TYPE(W) { \
return withFill(harr_fcd(r,w),xf); W* wp = W##any_ptr(w); \
CASE(i8,i8) CASE(i16,i16) CASE(i32,i32) \
CASE(c8,u8) CASE(c16,u16) CASE(c32,u32) CASE(f64,f64) \
usz i=0; HArr_p r = m_harrs(wia, &i); \
if (v(x)->type==t_harr || v(x)->type==t_hslice) { \
B* xp = hany_ptr(x); \
for (; i < wia; i++) r.a[i] = inc(xp[WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia))]); \
dec(x); return harr_fcd(r, w); \
} \
for (; i < wia; i++) r.a[i] = Get(x, WRAP(wp[i], xia, thrF("⊏: Indexing out-of-bounds (%i∊𝕨, %s≡≠𝕩)", wp[i], xia))); \
dec(x); return withFill(harr_fcd(r,w),xf); \
} }
} else { if (TI(w,elType)==el_i8) TYPE(i8)
usz i = 0; else if (TI(w,elType)==el_i16) TYPE(i16)
HArr_p r = m_harrs(wia, &i); else if (TI(w,elType)==el_i32) TYPE(i32)
else {
usz i=0; HArr_p r = m_harrs(wia, &i);
SGetU(w) SGetU(w)
for (; i < wia; i++) { for (; i < wia; i++) {
B cw = GetU(w, i); B cw = GetU(w, i);
@ -289,6 +285,7 @@ B select_c2(B t, B w, B x) {
dec(x); dec(x);
return withFill(harr_fcd(r,w),xf); return withFill(harr_fcd(r,w),xf);
} }
#undef CASE
} else { } else {
SGetU(w) SGetU(w)
ur wr = rnk(w); ur wr = rnk(w);