diff --git a/src/builtins/group.c b/src/builtins/group.c index 674bb9e0..fe0aced4 100644 --- a/src/builtins/group.c +++ b/src/builtins/group.c @@ -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; jf; } 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; diff --git a/src/builtins/md2.c b/src/builtins/md2.c index 085f6e18..38207123 100644 --- a/src/builtins/md2.c +++ b/src/builtins/md2.c @@ -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); } } diff --git a/src/utils/each.c b/src/utils/each.c index 77dc0f52..ddc8eb52 100644 --- a/src/utils/each.c +++ b/src/utils/each.c @@ -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; ri0) { usz min = wg? IA(x) : IA(w); usz ext = ria / min;