use incBy more
This commit is contained in:
parent
bc78b9e3a8
commit
d84c04bc63
@ -43,13 +43,13 @@ static B m_shChangeLen(u8 xt, ur xr, usz* xsh, usz l, usz cw, usz csz) {
|
||||
return taga(arr_shChangeLen(m_arr(offsetof(TyArr, a)+l*cw, xt, l*csz), xr, xsh, l));
|
||||
}
|
||||
static void allocGroups(B* rp, usz ria, B z, u8 xt, ur xr, usz* xsh, i32* len, usz width, usz csz) {
|
||||
if (xr==1) for (usz j = 0; j < ria; j++) { usz l=len[j]; if (!l) rp[j] = inc(z); else m_tyarrv(rp+j, width, l, xt); }
|
||||
else for (usz j = 0; j < ria; j++) { usz l=len[j]; rp[j] = !l ? inc(z) : m_shChangeLen(xt, xr, xsh, l, width, csz); }
|
||||
if (xr==1) for (usz j = 0; j < ria; j++) { usz l=len[j]; if (!l) rp[j] = incG(z); else m_tyarrv(rp+j, width, l, xt); }
|
||||
else for (usz j = 0; j < ria; j++) { usz l=len[j]; rp[j] = !l ? incG(z) : m_shChangeLen(xt, xr, xsh, l, width, csz); }
|
||||
}
|
||||
static Arr* m_bitarr_nop(usz ia) { return m_arr(BITARR_SZ(ia), t_bitarr, ia); }
|
||||
static void allocBitGroups(B* rp, usz ria, B z, ur xr, usz* xsh, i32* len, usz width) {
|
||||
if (xr==1) for (usz j = 0; j < ria; j++) { usz l=len[j]; rp[j] = !l ? inc(z) : taga(arr_shVec(m_bitarr_nop(l))); }
|
||||
else for (usz j = 0; j < ria; j++) { usz l=len[j]; rp[j] = !l ? inc(z) : taga(arr_shChangeLen(m_bitarr_nop(l*width), xr, xsh, l)); }
|
||||
if (xr==1) for (usz j = 0; j < ria; j++) { usz l=len[j]; rp[j] = !l ? incG(z) : taga(arr_shVec(m_bitarr_nop(l))); }
|
||||
else for (usz j = 0; j < ria; j++) { usz l=len[j]; rp[j] = !l ? incG(z) : taga(arr_shChangeLen(m_bitarr_nop(l*width), xr, xsh, l)); }
|
||||
}
|
||||
|
||||
// Integer list w
|
||||
@ -193,7 +193,7 @@ static B group_simple(B w, B x, ur xr, usz wia, usz xn, usz* xsh, u8 we) {
|
||||
#define GROUP_SORT(CPY, ALLOC) \
|
||||
for (usz j=0; j<ria; j++) { \
|
||||
usz l = len[j]; \
|
||||
if (!l) { rp[j]=inc(z); continue; } \
|
||||
if (!l) { rp[j]=incG(z); continue; } \
|
||||
ALLOC; \
|
||||
u64 lw = l*width; \
|
||||
CPY(tyarr_ptr(rp[j]), 0, xp, i, lw); \
|
||||
|
||||
@ -78,7 +78,8 @@ B tbl_c2(Md1D* d, B w, B x) { B f = d->f;
|
||||
} else if (xia>7) {
|
||||
SGet(w)
|
||||
M_HARR(r, wia)
|
||||
for (usz wi = 0; wi < wia; wi++) HARR_ADD(r, wi, fc2(f, Get(w,wi), incG(x)));
|
||||
incByG(x, wia);
|
||||
for (usz wi = 0; wi < wia; wi++) HARR_ADD(r, wi, fc2(f, Get(w,wi), x));
|
||||
r = bqn_merge(HARR_FV(r));
|
||||
} else goto generic;
|
||||
if (RNK(r)>1) {
|
||||
@ -92,8 +93,8 @@ B tbl_c2(Md1D* d, B w, B x) { B f = d->f;
|
||||
|
||||
M_HARR(r, ria)
|
||||
for (usz wi = 0; wi < wia; wi++) {
|
||||
B cw = GetU(w,wi);
|
||||
for (usz xi = 0; xi < xia; xi++) HARR_ADDA(r, fc2(f, inc(cw), Get(x,xi)));
|
||||
B cw = incBy(GetU(w,wi), xia);
|
||||
for (usz xi = 0; xi < xia; xi++) HARR_ADDA(r, fc2(f, cw, Get(x,xi)));
|
||||
}
|
||||
rsh = HARR_FA(r, rr);
|
||||
r = HARR_O(r).b;
|
||||
|
||||
@ -381,9 +381,11 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g;
|
||||
BSS2A slice = TI(x,slice);
|
||||
M_HARR(r, cam);
|
||||
usz p = 0;
|
||||
incBy(w, cam);
|
||||
incByG(x, cam);
|
||||
for (usz i = 0; i < cam; i++) {
|
||||
Arr* s = arr_shSetI(slice(incG(x), p, csz), xc, csh);
|
||||
HARR_ADD(r, i, c2(f, inc(w), taga(s)));
|
||||
Arr* s = arr_shSetI(slice(x, p, csz), xc, csh);
|
||||
HARR_ADD(r, i, c2(f, w, taga(s)));
|
||||
p+= csz;
|
||||
}
|
||||
|
||||
@ -405,9 +407,11 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g;
|
||||
BSS2A slice = TI(w,slice);
|
||||
M_HARR(r, cam);
|
||||
usz p = 0;
|
||||
incByG(w, cam);
|
||||
incBy(x, cam);
|
||||
for (usz i = 0; i < cam; i++) {
|
||||
Arr* s = arr_shSetI(slice(incG(w), p, csz), wc, csh);
|
||||
HARR_ADD(r, i, c2(f, taga(s), inc(x)));
|
||||
Arr* s = arr_shSetI(slice(w, p, csz), wc, csh);
|
||||
HARR_ADD(r, i, c2(f, taga(s), x));
|
||||
p+= csz;
|
||||
}
|
||||
|
||||
@ -450,14 +454,14 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g;
|
||||
}
|
||||
} else if (wk < xk) {
|
||||
for (usz i = 0; i < cam; ) {
|
||||
CELL(w); B wb=taga(ws);
|
||||
for (usz e = i+ext; i < e; i++) { CELL(x); F(incG(wb), taga(xs)); }
|
||||
CELL(w); B wb=incBy(taga(ws), ext);
|
||||
for (usz e = i+ext; i < e; i++) { CELL(x); F(wb, taga(xs)); }
|
||||
dec(wb);
|
||||
}
|
||||
} else {
|
||||
for (usz i = 0; i < cam; ) {
|
||||
CELL(x); B xb=taga(xs);
|
||||
for (usz e = i+ext; i < e; i++) { CELL(w); F(taga(ws), incG(xb)); }
|
||||
CELL(x); B xb=incBy(taga(xs), ext);
|
||||
for (usz e = i+ext; i < e; i++) { CELL(w); F(taga(ws), xb); }
|
||||
dec(xb);
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,8 +24,8 @@ B eachd_fn(B fo, B w, B x, BBB2B f) {
|
||||
if (rw|rx && (wr==xr | rm==0)) {
|
||||
HArr_p r = harr_parts(REUSE(rw? w : x));
|
||||
usz ria = r.c->ia;
|
||||
if (wr==0) { B c=Get(w, 0); for(usz i = 0; i < ria; i++) r.a[i] = f(fo, inc(c), hmv(r,i)); dec(c); }
|
||||
else if (xr==0) { B c=Get(x, 0); for(usz i = 0; i < ria; i++) r.a[i] = f(fo, hmv(r,i), inc(c) ); dec(c); }
|
||||
if (wr==0) { B c=incBy(Get(w,0), ria); for(usz i = 0; i < ria; i++) r.a[i] = f(fo, c, hmv(r,i)); dec(c); }
|
||||
else if (xr==0) { B c=incBy(Get(x,0), ria); for(usz i = 0; i < ria; i++) r.a[i] = f(fo, hmv(r,i), c ); dec(c); }
|
||||
else {
|
||||
assert(wr==xr);
|
||||
if (rw) for (usz i = 0; i < ria; i++) r.a[i] = f(fo, hmv(r,i), Get(x,i));
|
||||
@ -39,8 +39,8 @@ B eachd_fn(B fo, B w, B x, BBB2B f) {
|
||||
usz ria = IA(bo);
|
||||
M_HARR(r, ria)
|
||||
if (wr==xr) for(usz ri=0; ri<ria; ri++) HARR_ADD(r, ri, f(fo, Get(w,ri), Get(x,ri)));
|
||||
else if (wr==0) { B c=Get(w, 0); for(usz ri=0; ri<ria; ri++) HARR_ADD(r, ri, f(fo, inc(c) , Get(x,ri))); dec(c); }
|
||||
else if (xr==0) { B c=Get(x, 0); for(usz ri=0; ri<ria; ri++) HARR_ADD(r, ri, f(fo, Get(w,ri), inc(c) )); dec(c); }
|
||||
else if (wr==0) { B c=incBy(Get(w,0), ria); for(usz ri=0; ri<ria; ri++) HARR_ADD(r, ri, f(fo, c , Get(x,ri))); dec(c); }
|
||||
else if (xr==0) { B c=incBy(Get(x,0), ria); for(usz ri=0; ri<ria; ri++) HARR_ADD(r, ri, f(fo, Get(w,ri), c )); dec(c); }
|
||||
else if (ria>0) {
|
||||
usz min = wg? IA(x) : IA(w);
|
||||
usz ext = ria / min;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user