move interleave_cells to cells.c

This commit is contained in:
dzaima 2024-09-14 16:18:54 +03:00
parent 884d61476f
commit 51ab5db2c8
2 changed files with 13 additions and 13 deletions

View File

@ -23,7 +23,18 @@ B scan_rows_bit(u8, B x, usz m);
B takedrop_highrank(bool take, B w, B x);
B rotate_highrank(bool inv, B w, B x);
B interleave_cells(B w, B x, ur k); // from transpose.c
Arr* join_cells(B w, B x, ur k); // from transpose.c
NOINLINE B interleave_cells(B w, B x, ur k) { // consumes w,x; interleave arrays, 𝕨 ≍⎉(-xk) 𝕩; assumes equal-shape args
ux xr = RNK(x);
if (xr==0) return C2(join, w, x);
ShArr* rsh = m_shArr(xr+1); // TODO handle leak if join_cells fails
usz* xsh = SH(x);
shcpy(rsh->a, xsh, k);
rsh->a[k] = 2;
shcpy(rsh->a+k+1, xsh+k, xr-k);
return taga(arr_shSetUG(join_cells(w, x, k), xr+1, rsh));
}
// from select.c:
B select_rows_B(B x, ux csz, ux cam, B inds);

View File

@ -121,7 +121,7 @@ Arr* join_cells(B w, B x, ur k) { // consumes w,x; join k-cells, 𝕨 ∾○⥊
Arr *r;
u8 xlw = elwBitLog(re);
usz n = shProd(SH(w), 0, k);
usz n = shProd(SH(w), 0, k); (void)n;
usz wcsz = shProd(SH(w), k, RNK(w));
usz xcsz = shProd(SH(x), k, RNK(x));
usz ia = IA(w)+IA(x);
@ -172,17 +172,6 @@ Arr* join_cells(B w, B x, ur k) { // consumes w,x; join k-cells, 𝕨 ∾○⥊
B join_c2(B, B, B);
B interleave_cells(B w, B x, ur k) { // consumes w,x; interleave arrays, 𝕨 ≍⎉(-xk) 𝕩; assumes equal-shape args
ux xr = RNK(x);
if (xr==0) return C2(join, w, x);
ShArr* rsh = m_shArr(xr+1); // TODO handle leak if join_cells fails
usz* xsh = SH(x);
shcpy(rsh->a, xsh, k);
rsh->a[k] = 2;
shcpy(rsh->a+k+1, xsh+k, xr-k);
return taga(arr_shSetUG(join_cells(w, x, k), xr+1, rsh));
}
static void transpose_move(void* rv, void* xv, u8 xe, usz w, usz h) {
assert(xe!=el_bit); assert(xe!=el_B);
transposeFns[elwByteLog(xe)](rv, xv, w, h, w, h);