Clean up collision checking, use vector copy functions
This commit is contained in:
parent
9f6151d92d
commit
60a28a40ca
@ -381,13 +381,13 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
|
|||||||
if (sparse) for (usz i = 0; i < wia; i++) { \
|
if (sparse) for (usz i = 0; i < wia; i++) { \
|
||||||
i64 cw = WI; if (RARE(cw<0)) cw+= (i64)xl; set[cw] = false; \
|
i64 cw = WI; if (RARE(cw<0)) cw+= (i64)xl; set[cw] = false; \
|
||||||
}
|
}
|
||||||
#define EQ(F) if (set[cw] && (F)) thrF("𝔽⌾(a⊸%c): Incompatible result elements", chr);
|
#define EQ(ITER,F) if (set[cw]) ITER if (F) thrF("𝔽⌾(a⊸%c): Incompatible result elements", chr); set[cw] = true;
|
||||||
#define DONE_CW set[cw] = true;
|
#define EQ1(F) EQ(,F)
|
||||||
#define FREE_CHECK TFREE(set)
|
#define FREE_CHECK TFREE(set)
|
||||||
#else
|
#else
|
||||||
#define SPARSE_INIT(GET)
|
#define SPARSE_INIT(GET)
|
||||||
#define EQ(F)
|
#define EQ(ITER,F)
|
||||||
#define DONE_CW
|
#define EQ1(F)
|
||||||
#define FREE_CHECK
|
#define FREE_CHECK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -409,21 +409,16 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
|
|||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
READ_W(cw, i);
|
READ_W(cw, i);
|
||||||
B cn = Get(rep, i);
|
B cn = Get(rep, i);
|
||||||
EQ(!equal(mut_getU(r, cw), cn));
|
EQ1(!equal(mut_getU(r, cw), cn));
|
||||||
mut_rm(r, cw);
|
mut_rm(r, cw);
|
||||||
mut_setG(r, cw, cn);
|
mut_setG(r, cw, cn);
|
||||||
DONE_CW;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
READ_W(cw, i);
|
READ_W(cw, i);
|
||||||
for (usz j = 0; j < xcsz; j++) {
|
EQ(for (usz j = 0; j < xcsz; j++),!equal(mut_getU(r, cw*xcsz + j), Get(rep, i*xcsz + j)));
|
||||||
B cn = Get(rep, i*xcsz + j);
|
for (usz j = 0; j < xcsz; j++) mut_rm(r, cw*xcsz + j);
|
||||||
EQ(!equal(mut_getU(r, cw*xcsz + j), cn));
|
mut_copyG(r, cw*xcsz, rep, i*xcsz, xcsz);
|
||||||
mut_rm(r, cw*xcsz + j);
|
|
||||||
mut_setG(r, cw*xcsz + j, cn);
|
|
||||||
}
|
|
||||||
DONE_CW;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ra = mut_fp(r);
|
ra = mut_fp(r);
|
||||||
@ -452,19 +447,14 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
|
|||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
READ_W(cw, i);
|
READ_W(cw, i);
|
||||||
bool cn = bitp_get(np, i);
|
bool cn = bitp_get(np, i);
|
||||||
EQ(cn != bitp_get(rp, cw));
|
EQ1(cn != bitp_get(rp, cw));
|
||||||
bitp_set(rp, cw, cn);
|
bitp_set(rp, cw, cn);
|
||||||
DONE_CW;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
READ_W(cw, i);
|
READ_W(cw, i);
|
||||||
for (usz j = 0; j < xcsz; j++) {
|
EQ(for (usz j = 0; j < xcsz; j++), bitp_get(np, i*xcsz + j) != bitp_get(rp, cw*xcsz + j));
|
||||||
bool cn = bitp_get(np, i*xcsz + j);
|
COPY_TO(rp, el_bit, cw*xcsz, rep, i*xcsz, xcsz);
|
||||||
EQ(cn != bitp_get(rp, cw*xcsz + j));
|
|
||||||
bitp_set(rp, cw*xcsz + j, cn);
|
|
||||||
}
|
|
||||||
DONE_CW;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
goto dec_ret_ra;
|
goto dec_ret_ra;
|
||||||
@ -478,21 +468,16 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
|
|||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
READ_W(cw, i);
|
READ_W(cw, i);
|
||||||
B cn = Get(rep, i);
|
B cn = Get(rep, i);
|
||||||
EQ(!equal(cn,rp[cw]));
|
EQ1(!equal(cn,rp[cw]));
|
||||||
dec(rp[cw]);
|
dec(rp[cw]);
|
||||||
rp[cw] = cn;
|
rp[cw] = cn;
|
||||||
DONE_CW;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
READ_W(cw, i);
|
READ_W(cw, i);
|
||||||
for (usz j = 0; j < xcsz; j++) {
|
EQ(for (usz j = 0; j < xcsz; j++), !equal(Get(rep, i*xcsz + j), rp[cw*xcsz + j]));
|
||||||
B cn = Get(rep, i*xcsz + j);
|
for (usz j = 0; j < xcsz; j++) dec(rp[cw*xcsz + j]);
|
||||||
EQ(!equal(cn,rp[cw*xcsz + j]));
|
COPY_TO(rp, el_B, cw*xcsz, rep, i*xcsz, xcsz);
|
||||||
dec(rp[cw*xcsz + j]);
|
|
||||||
rp[cw*xcsz + j] = cn;
|
|
||||||
}
|
|
||||||
DONE_CW;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
goto dec_ret_ra;
|
goto dec_ret_ra;
|
||||||
@ -506,17 +491,15 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
|
|||||||
for (usz i = 0; i < wia; i++) { \
|
for (usz i = 0; i < wia; i++) { \
|
||||||
READ_W(cw, i); \
|
READ_W(cw, i); \
|
||||||
T cn = np[i]; \
|
T cn = np[i]; \
|
||||||
EQ(cn != rp[cw]); \
|
EQ1(cn != rp[cw]); \
|
||||||
rp[cw] = cn; \
|
rp[cw] = cn; \
|
||||||
DONE_CW; \
|
|
||||||
} \
|
} \
|
||||||
} else { \
|
} else { \
|
||||||
EqFnObj eq = EQFN_GET(re,re); \
|
EqFnObj eq = EQFN_GET(re,re); \
|
||||||
for (usz i = 0; i < wia; i++) { \
|
for (usz i = 0; i < wia; i++) { \
|
||||||
READ_W(cw, i); \
|
READ_W(cw, i); \
|
||||||
EQ(!EQFN_CALL(eq,rp+cw*xcsz,np+i*xcsz,xcsz)); \
|
EQ1(!EQFN_CALL(eq, rp+cw*xcsz, np+i*xcsz, xcsz)); \
|
||||||
COPY_TO(rp,re,cw*xcsz,rep,i*xcsz,xcsz); \
|
COPY_TO(rp, re, cw*xcsz, rep, i*xcsz, xcsz); \
|
||||||
DONE_CW; \
|
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
goto dec_ret_ra; \
|
goto dec_ret_ra; \
|
||||||
@ -537,7 +520,7 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz xl, usz xcsz) { // rep
|
|||||||
|
|
||||||
#undef SPARSE_INIT
|
#undef SPARSE_INIT
|
||||||
#undef EQ
|
#undef EQ
|
||||||
#undef DONE_CW
|
#undef EQ1
|
||||||
#undef FREE_CHECK
|
#undef FREE_CHECK
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user