better number/character fill checks
as the only valid number fill is 0, full isNum check is pointless
This commit is contained in:
parent
2447ebe734
commit
0a561bce2b
@ -115,7 +115,7 @@ B listVariations_c2(B t, B w, B x) {
|
|||||||
ac8=false, ac16=false, ac32=false, abit=false;
|
ac8=false, ac16=false, ac32=false, abit=false;
|
||||||
usz xia = IA(x);
|
usz xia = IA(x);
|
||||||
SGetU(x)
|
SGetU(x)
|
||||||
if (isNum(xf)) {
|
if (numFill(xf)) {
|
||||||
i32 min=I32_MAX, max=I32_MIN;
|
i32 min=I32_MAX, max=I32_MIN;
|
||||||
if (xe==el_i8 ) { i8* xp = i8any_ptr (x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
|
if (xe==el_i8 ) { i8* xp = i8any_ptr (x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
|
||||||
else if (xe==el_i16) { i16* xp = i16any_ptr(x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
|
else if (xe==el_i16) { i16* xp = i16any_ptr(x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
|
||||||
@ -142,7 +142,7 @@ B listVariations_c2(B t, B w, B x) {
|
|||||||
abit = min>=0 && max<=1;
|
abit = min>=0 && max<=1;
|
||||||
onlyF64:
|
onlyF64:
|
||||||
af64 = true;
|
af64 = true;
|
||||||
} else if (isC32(xf)) {
|
} else if (chrFill(xf)) {
|
||||||
u32 max = 0;
|
u32 max = 0;
|
||||||
if (xe!=el_c8) for (usz i = 0; i < xia; i++) {
|
if (xe!=el_c8) for (usz i = 0; i < xia; i++) {
|
||||||
B c = GetU(x, i);
|
B c = GetU(x, i);
|
||||||
|
|||||||
@ -152,7 +152,7 @@ static NOINLINE B select_list_cell(usz wi, B x) { // guarantees returning new ar
|
|||||||
B xf = getFillR(x);
|
B xf = getFillR(x);
|
||||||
B xv = IGet(x, wi);
|
B xv = IGet(x, wi);
|
||||||
B rb;
|
B rb;
|
||||||
if (isNum(xf) || isC32(xf)) {
|
if (numFill(xf) || chrFill(xf)) {
|
||||||
rb = m_unit(xv);
|
rb = m_unit(xv);
|
||||||
} else if (noFill(xf)) {
|
} else if (noFill(xf)) {
|
||||||
rb = m_hunit(xv);
|
rb = m_hunit(xv);
|
||||||
|
|||||||
@ -114,8 +114,8 @@ B withFill(B x, B fill) { // consumes both
|
|||||||
if (noFill(fill) && xt!=t_fillarr && xt!=t_fillslice) return x;
|
if (noFill(fill) && xt!=t_fillarr && xt!=t_fillslice) return x;
|
||||||
switch(xt) {
|
switch(xt) {
|
||||||
case t_f64arr: case t_f64slice: case t_bitarr:
|
case t_f64arr: case t_f64slice: case t_bitarr:
|
||||||
case t_i32arr: case t_i32slice: case t_i16arr: case t_i16slice: case t_i8arr: case t_i8slice: if(fill.u == m_i32(0 ).u) return x; break;
|
case t_i32arr: case t_i32slice: case t_i16arr: case t_i16slice: case t_i8arr: case t_i8slice: if(numFill(fill)) return x; break;
|
||||||
case t_c32arr: case t_c32slice: case t_c16arr: case t_c16slice: case t_c8arr: case t_c8slice: if(fill.u == m_c32(' ').u) return x; break;
|
case t_c32arr: case t_c32slice: case t_c16arr: case t_c16slice: case t_c8arr: case t_c8slice: if(chrFill(fill)) return x; break;
|
||||||
case t_fillslice: if (fillEqual(c(FillSlice,x)->fill, fill)) { dec(fill); return x; } break;
|
case t_fillslice: if (fillEqual(c(FillSlice,x)->fill, fill)) { dec(fill); return x; } break;
|
||||||
case t_fillarr: if (fillEqual(c(FillArr, x)->fill, fill)) { dec(fill); return x; }
|
case t_fillarr: if (fillEqual(c(FillArr, x)->fill, fill)) { dec(fill); return x; }
|
||||||
if (reusable(x)) { // keeping flags is fine probably
|
if (reusable(x)) { // keeping flags is fine probably
|
||||||
@ -128,10 +128,10 @@ B withFill(B x, B fill) { // consumes both
|
|||||||
usz ia = IA(x);
|
usz ia = IA(x);
|
||||||
if (!FL_HAS(x,fl_squoze)) {
|
if (!FL_HAS(x,fl_squoze)) {
|
||||||
u8 xe;
|
u8 xe;
|
||||||
if (isNum(fill)) {
|
if (numFill(fill)) {
|
||||||
x = squeeze_numTry(x, &xe, SQ_ANY);
|
x = squeeze_numTry(x, &xe, SQ_ANY);
|
||||||
if (elNum(xe)) return x;
|
if (elNum(xe)) return x;
|
||||||
} else if (isC32(fill)) {
|
} else if (chrFill(fill)) {
|
||||||
x = squeeze_chrTry(x, &xe, SQ_ANY);
|
x = squeeze_chrTry(x, &xe, SQ_ANY);
|
||||||
if (elChr(xe)) return x;
|
if (elChr(xe)) return x;
|
||||||
}
|
}
|
||||||
@ -213,24 +213,24 @@ NOINLINE Arr* emptyArr(B x, ur xr) {
|
|||||||
}
|
}
|
||||||
B xf = getFillR(x);
|
B xf = getFillR(x);
|
||||||
if (xr==1) {
|
if (xr==1) {
|
||||||
if (isF64(xf)) numVec: return a(emptyIVec());
|
if (numFill(xf)) numVec: return a(emptyIVec());
|
||||||
if (noFill(xf)) return a(emptyHVec());
|
if ( noFill(xf)) return a(emptyHVec());
|
||||||
if (isC32(xf)) chrVec: return a(emptyCVec());
|
if (chrFill(xf)) chrVec: return a(emptyCVec());
|
||||||
}
|
}
|
||||||
Arr* r;
|
Arr* r;
|
||||||
if (isF64(xf)) { u64* rp; r = m_bitarrp(&rp, 0); }
|
if (numFill(xf)) { u64* rp; r = m_bitarrp(&rp, 0); }
|
||||||
else if (noFill(xf)) { r = (Arr*) m_harrUp(0).c; }
|
else if ( noFill(xf)) { r = (Arr*) m_harrUp(0).c; }
|
||||||
else if (isC32(xf)) { u8* rp; r = m_c8arrp(&rp, 0); }
|
else if (chrFill(xf)) { u8* rp; r = m_c8arrp(&rp, 0); }
|
||||||
else { r = m_fillarrpEmpty(xf); }
|
else { r = m_fillarrpEmpty(xf); }
|
||||||
if (xr<=1) arr_rnk01(r, xr);
|
if (xr<=1) arr_rnk01(r, xr);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
NOINLINE Arr* emptyWithFill(B fill) {
|
NOINLINE Arr* emptyWithFill(B fill) {
|
||||||
u8 type;
|
u8 type;
|
||||||
if (r_Bf(fill) == 0) { type = t_bitarr; goto tyarr; }
|
if (numFill(fill)) { type = t_bitarr; goto tyarr; }
|
||||||
if (isC32(fill)) { type = t_c8arr; goto tyarr; }
|
if (chrFill(fill)) { type = t_c8arr; goto tyarr; }
|
||||||
if (noFill(fill)) return (Arr*) m_harrUp(0).c;
|
if ( noFill(fill)) return (Arr*) m_harrUp(0).c;
|
||||||
return m_fillarrpEmpty(fill);
|
return m_fillarrpEmpty(fill);
|
||||||
|
|
||||||
tyarr:;
|
tyarr:;
|
||||||
|
|||||||
@ -26,6 +26,8 @@ static bool fillEqual(B w, B x) {
|
|||||||
return fillEqualF(w, x);
|
return fillEqualF(w, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool numFill(B x) { return x.u == m_f64(0).u; }
|
||||||
|
static bool chrFill(B x) { return isC32(x); }
|
||||||
|
|
||||||
static B getFillN(B x) { // doesn't consume, doesn't increment result; can return bi_noFill
|
static B getFillN(B x) { // doesn't consume, doesn't increment result; can return bi_noFill
|
||||||
if (isArr(x)) {
|
if (isArr(x)) {
|
||||||
|
|||||||
@ -16,6 +16,7 @@ char* execAA_repr(u8 ex) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
NOINLINE B dyArith_AA(DyTableAA* table, B w, B x) {
|
NOINLINE B dyArith_AA(DyTableAA* table, B w, B x) {
|
||||||
|
assert(isArr(w) && isArr(x));
|
||||||
u8 we = TI(w, elType); if (we==el_B) goto rec;
|
u8 we = TI(w, elType); if (we==el_B) goto rec;
|
||||||
u8 xe = TI(x, elType); if (xe==el_B) goto rec;
|
u8 xe = TI(x, elType); if (xe==el_B) goto rec;
|
||||||
ur wr = RNK(w);
|
ur wr = RNK(w);
|
||||||
@ -131,6 +132,7 @@ u8 const nextType[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
NOINLINE B dyArith_SA(DyTableSA* table, B w, B x) {
|
NOINLINE B dyArith_SA(DyTableSA* table, B w, B x) {
|
||||||
|
assert(isArr(x));
|
||||||
usz ia = IA(x);
|
usz ia = IA(x);
|
||||||
u8 xe = TI(x,elType);
|
u8 xe = TI(x,elType);
|
||||||
|
|
||||||
@ -146,9 +148,9 @@ NOINLINE B dyArith_SA(DyTableSA* table, B w, B x) {
|
|||||||
charX = elChr(xe);
|
charX = elChr(xe);
|
||||||
} else {
|
} else {
|
||||||
B xf = getFillQ(x);
|
B xf = getFillQ(x);
|
||||||
if (isNum(xf)) charX=0;
|
if (numFill(xf)) charX=0;
|
||||||
else if (isC32(xf)) charX=1;
|
else if (chrFill(xf)) charX=1;
|
||||||
else if (noFill(xf)) { fillVal=0; goto fillSel; }
|
else if ( noFill(xf)) { fillVal=0; goto fillSel; }
|
||||||
else { dec(xf); goto rec; } // whatever
|
else { dec(xf); goto rec; } // whatever
|
||||||
}
|
}
|
||||||
bool charW;
|
bool charW;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user