Split up partitioning loop in Group for rank 1 and rank>1 cases
This commit is contained in:
parent
12c4fd0b07
commit
9af77e63ee
@ -141,15 +141,19 @@ B group_c2(B t, B w, B x) {
|
|||||||
u8 xk = xl - 3;
|
u8 xk = xl - 3;
|
||||||
if (notB && !bits && sort) {
|
if (notB && !bits && sort) {
|
||||||
void* xp = tyany_ptr(x);
|
void* xp = tyany_ptr(x);
|
||||||
u64 i=neg*width; for (usz j=0; j<ria; j++) {
|
u64 i=neg*width;
|
||||||
usz l = len[j];
|
#define GROUP_SORT(ALLOC) \
|
||||||
if (!l) { rp[j]=inc(z); continue; }
|
for (usz j=0; j<ria; j++) { \
|
||||||
if (xr==1) m_tyarrv(rp+j, width, l, xt);
|
usz l = len[j]; \
|
||||||
else rp[j] = m_shChangeLen(xt, xr, xsh, l, width, csz);
|
if (!l) { rp[j]=inc(z); continue; } \
|
||||||
u64 lw = l*width;
|
ALLOC; \
|
||||||
memcpy(tyarr_ptr(rp[j]), (u8*)xp+i, lw);
|
u64 lw = l*width; \
|
||||||
i += lw;
|
memcpy(tyarr_ptr(rp[j]), (u8*)xp+i, lw); \
|
||||||
|
i += lw; \
|
||||||
}
|
}
|
||||||
|
if (xr==1) GROUP_SORT(m_tyarrv(rp+j, width, l, xt))
|
||||||
|
else GROUP_SORT(rp[j] = m_shChangeLen(xt, xr, xsh, l, width, csz))
|
||||||
|
#undef GROUP_SORT
|
||||||
} else if (notB && xk <= 3) {
|
} else if (notB && xk <= 3) {
|
||||||
void* xp = tyany_ptr(x);
|
void* xp = tyany_ptr(x);
|
||||||
allocGroups(rp, ria, z, xt, xr, xsh, len, width, csz);
|
allocGroups(rp, ria, z, xt, xr, xsh, len, width, csz);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user