diff --git a/src/builtins/cells.c b/src/builtins/cells.c index cf7934a6..6d3450b9 100644 --- a/src/builtins/cells.c +++ b/src/builtins/cells.c @@ -102,6 +102,21 @@ B select_cells_base(B inds, B x0, ux csz, ux cam) { // consumes inds,x0; Used by return taga(APD_SH_GET(r, '\0')); } +static B scan_cells_stride1(B f, B x, usz m) { + // m is cell size == scan axis length + B xf = getFillR(x); + HArr_p r = m_harr0c(x); + SGet(x) + FC2 fc2 = c2fn(f); + for (usz i=0, ia=IA(x); if)) break; - u8 frtid = RTID(fd->f); + B f = fd->f; + if (!isFun(f)) break; + u8 frtid = RTID(f); if (frtid==n_rtack) return x; - if (TI(x,elType)==el_bit && (isPervasiveDyExt(fd->f)||frtid==n_ltack) - && 1==shProd(xsh, k+1, xr)) { - B r = scan_rows_bit(frtid, x, m); if (!q_N(r)) return r; + if (1 == shProd(xsh, k+1, xr)) { + if (TI(x,elType)==el_bit && (isPervasiveDyExt(f)||frtid==n_ltack)) { + B r = scan_rows_bit(frtid, x, m); if (!q_N(r)) return r; + } + if (m <= 6) return scan_cells_stride1(f, x, m); } break; }