more cleanup
This commit is contained in:
parent
f231a30057
commit
42e36851b9
@ -73,13 +73,13 @@ B group_c2(B t, B w, B x) {
|
|||||||
B z = taga(rf);
|
B z = taga(rf);
|
||||||
fillarr_setFill(r, z);
|
fillarr_setFill(r, z);
|
||||||
|
|
||||||
TALLOC(i32, pos, 2*ria+1); i32* len = pos+ria+1;
|
|
||||||
// Both cases needed to make sure wia>0 for ip[wia-1] below
|
// Both cases needed to make sure wia>0 for ip[wia-1] below
|
||||||
if (ria==0) goto intvec_ret;
|
if (ria==0) goto setfill_dec_ret;
|
||||||
if (neg==xia) {
|
if (neg==xia) {
|
||||||
for (usz i = 0; i < ria; i++) rp[i] = inc(z);
|
for (usz i = 0; i < ria; i++) rp[i] = inc(z);
|
||||||
goto intvec_ret;
|
goto setfill_dec_ret;
|
||||||
}
|
}
|
||||||
|
TALLOC(i32, pos, 2*ria+1); i32* len = pos+ria+1;
|
||||||
|
|
||||||
bool notB = TI(x,elType) != el_B;
|
bool notB = TI(x,elType) != el_B;
|
||||||
u8 xt = arrNewType(TY(x));
|
u8 xt = arrNewType(TY(x));
|
||||||
@ -90,7 +90,7 @@ B group_c2(B t, B w, B x) {
|
|||||||
if (RARE(xr>1)) {
|
if (RARE(xr>1)) {
|
||||||
width *= csz = arr_csz(x);
|
width *= csz = arr_csz(x);
|
||||||
xl += CTZ(csz);
|
xl += CTZ(csz);
|
||||||
if (bits && xl>=3) { bits=1; width>>=3; }
|
if (bits && xl>=3) { bits=0; width>>=3; }
|
||||||
if ((csz & (csz-1)) || xl>7) xl = 7;
|
if ((csz & (csz-1)) || xl>7) xl = 7;
|
||||||
}
|
}
|
||||||
if (xia>64 && notB && !bits && change<(xia*width)/32) {
|
if (xia>64 && notB && !bits && change<(xia*width)/32) {
|
||||||
@ -162,7 +162,7 @@ B group_c2(B t, B w, B x) {
|
|||||||
case 0: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u8* )tyarr_ptr(rp[n]))[pos[n]++] = ((u8* )xp)[i]; } break;
|
case 0: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u8* )tyarr_ptr(rp[n]))[pos[n]++] = ((u8* )xp)[i]; } break;
|
||||||
case 1: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u16*)tyarr_ptr(rp[n]))[pos[n]++] = ((u16*)xp)[i]; } break;
|
case 1: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u16*)tyarr_ptr(rp[n]))[pos[n]++] = ((u16*)xp)[i]; } break;
|
||||||
case 2: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u32*)tyarr_ptr(rp[n]))[pos[n]++] = ((u32*)xp)[i]; } break;
|
case 2: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u32*)tyarr_ptr(rp[n]))[pos[n]++] = ((u32*)xp)[i]; } break;
|
||||||
case 3: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((f64*)tyarr_ptr(rp[n]))[pos[n]++] = ((f64*)xp)[i]; } break;
|
case 3: for (usz i = 0; i < xia; i++) { i32 n = wp[i]; if (n>=0) ((u64*)tyarr_ptr(rp[n]))[pos[n]++] = ((u64*)xp)[i]; } break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (usz i = 0; i < ria; i++) {
|
for (usz i = 0; i < ria; i++) {
|
||||||
@ -192,9 +192,10 @@ B group_c2(B t, B w, B x) {
|
|||||||
for (usz i = 0; i < ria; i++) a(rp[i])->ia = len[i]*csz;
|
for (usz i = 0; i < ria; i++) a(rp[i])->ia = len[i]*csz;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
intvec_ret:
|
TFREE(pos);
|
||||||
|
setfill_dec_ret:
|
||||||
fillarr_setFill(rf, xf);
|
fillarr_setFill(rf, xf);
|
||||||
decG(w); decG(x); TFREE(pos);
|
decG(w); decG(x);
|
||||||
return taga(r);
|
return taga(r);
|
||||||
} else if (xr==1) {
|
} else if (xr==1) {
|
||||||
SLOW2("𝕨⊔𝕩", w, x);
|
SLOW2("𝕨⊔𝕩", w, x);
|
||||||
|
|||||||
@ -404,27 +404,27 @@ static B compress(B w, B x, usz wia, u8 xl, u8 xt) {
|
|||||||
#undef WITH_SPARSE
|
#undef WITH_SPARSE
|
||||||
#define BLOCK_OR_GROUPED(T) \
|
#define BLOCK_OR_GROUPED(T) \
|
||||||
if (wsum>=wia/8 && groups_lt(wp,wia, wia/16)) r = compress_grouped(wp, x, wia, wsum, xt); \
|
if (wsum>=wia/8 && groups_lt(wp,wia, wia/16)) r = compress_grouped(wp, x, wia, wsum, xt); \
|
||||||
else { T* xp=tyany_ptr(x); T* rp=m_tyarrv(&r,sizeof(T),wsum,xt); COMPRESS_BLOCK(T); break; } \
|
else { T* xp=tyany_ptr(x); T* rp=m_tyarrv(&r,sizeof(T),wsum,xt); COMPRESS_BLOCK(T); }
|
||||||
break;
|
case 5: BLOCK_OR_GROUPED(i32) break;
|
||||||
case 5: BLOCK_OR_GROUPED(i32)
|
case 6:
|
||||||
case 6: if (TI(x,elType)!=el_B) { BLOCK_OR_GROUPED(u64) }
|
if (TI(x,elType)!=el_B) { BLOCK_OR_GROUPED(u64) }
|
||||||
#undef BLOCK_OR_GROUPED
|
else {
|
||||||
else {
|
B xf = getFillQ(x);
|
||||||
B xf = getFillQ(x);
|
B* xp = arr_bptr(x);
|
||||||
B* xp = arr_bptr(x);
|
if (xp!=NULL) {
|
||||||
if (xp!=NULL) {
|
HArr_p rh = m_harrUv(wsum);
|
||||||
HArr_p rh = m_harrUv(wsum);
|
B *rp = rh.a; COMPRESS_BLOCK(B);
|
||||||
B *rp = rh.a; COMPRESS_BLOCK(B);
|
for (usz i=0; i<wsum; i++) inc(rh.a[i]);
|
||||||
for (usz i=0; i<wsum; i++) inc(rh.a[i]);
|
r = withFill(rh.b, xf);
|
||||||
r = withFill(rh.b, xf);
|
} else {
|
||||||
} else {
|
SLOW2("𝕨/𝕩", w, x);
|
||||||
SLOW2("𝕨/𝕩", w, x);
|
M_HARR(rp, wsum) SGet(x)
|
||||||
M_HARR(rp, wsum) SGet(x)
|
for (usz i = 0; i < wia; i++) if (bitp_get(wp,i)) HARR_ADDA(rp, Get(x,i));
|
||||||
for (usz i = 0; i < wia; i++) if (bitp_get(wp,i)) HARR_ADDA(rp, Get(x,i));
|
r = withFill(HARR_FV(rp), xf);
|
||||||
r = withFill(HARR_FV(rp), xf);
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
#undef BLOCK_OR_GROUPED
|
||||||
#undef COMPRESS_BLOCK
|
#undef COMPRESS_BLOCK
|
||||||
}
|
}
|
||||||
ur xr = RNK(x);
|
ur xr = RNK(x);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user