# HG changeset patch # User Markus Mützel # Date 1628968927 -10800 # Sat Aug 14 22:22:07 2021 +0300 # Node ID 732db8ecdcfc3692cd3bba154b83b1c176537b43 # Parent 4667f437bce7eaf4b1665131c75a6c027cf705bc Don't use function dim_vector::to_jit (bug #61030) copy of https://hg.octave.org/mxe-octave/file/93d20ff5d6a6/src/of-image-1-no-jit.patch by Markus Mützel, pushed by Avinoam Affected files: src/connectivity.h src/imreconstruct.cc src/bwconncomp.cc diff -r 4667f437bce7 -r 732db8ecdcfc src/bwconncomp.cc --- a/src/bwconncomp.cc Fri Apr 30 20:47:39 2021 +0200 +++ b/src/bwconncomp.cc Sat Aug 14 22:22:07 2021 +0300 @@ -81,13 +81,11 @@ const dim_vector original_size = BW.dims (); const dim_vector padded_size = BW_pad.dims (); - const octave_idx_type* o = original_size.to_jit (); - const octave_idx_type* p = padded_size.to_jit (); const octave_idx_type ndims_m1 = BW_pad.ndims () -1; std::vector dim_padded (BW_pad.ndims (), true); for (octave_idx_type i = 0; i < BW_pad.ndims (); i++) - if (p[i] == o[i]) + if (padded_size.xelem (i) == original_size.xelem (i)) dim_padded[i] = false; for (std::vector& conn_comp : all_components) @@ -100,21 +98,21 @@ { if (dim_padded[d]) { - ind += mult * (offset % p[d] - 1); - mult *= p[d] - 2; - offset /= p[d]; + ind += mult * (offset % padded_size.xelem (d) - 1); + mult *= padded_size.xelem (d) - 2; + offset /= padded_size.xelem (d); } else { - ind += mult * (offset % p[d]); - mult *= p[d]; - offset /= p[d]; + ind += mult * (offset % padded_size.xelem (d)); + mult *= padded_size.xelem (d); + offset /= padded_size.xelem (d); } } if (dim_padded[ndims_m1]) - ind += mult * (offset % p[ndims_m1] - 1); + ind += mult * (offset % padded_size.xelem (ndims_m1) - 1); else - ind += mult * (offset % p[ndims_m1]); + ind += mult * (offset % padded_size.xelem (ndims_m1)); offset = ind; } diff -r 4667f437bce7 -r 732db8ecdcfc src/connectivity.h --- a/src/connectivity.h Fri Apr 30 20:47:39 2021 +0200 +++ b/src/connectivity.h Sat Aug 14 22:22:07 2021 +0300 @@ -153,8 +153,7 @@ const Array lengths = padding_lengths (size, padded_size); const octave_idx_type* lengths_v = lengths.fortran_vec (); - const octave_idx_type* strides_v = size.to_jit (); - const octave_idx_type row_stride = strides_v[0]; + const octave_idx_type row_stride = size.xelem (0); std::function fill; fill = [&] (const octave_idx_type dim) -> void @@ -165,7 +164,7 @@ if (dim == 0) im_v += row_stride; else - for (octave_idx_type i = 0; i < strides_v[dim]; i++) + for (octave_idx_type i = 0; i < size.xelem (dim); i++) fill (dim -1); for (octave_idx_type i = 0; i < lengths_v[dim]; i++, im_v++) diff -r 4667f437bce7 -r 732db8ecdcfc src/imreconstruct.cc --- a/src/imreconstruct.cc Fri Apr 30 20:47:39 2021 +0200 +++ b/src/imreconstruct.cc Sat Aug 14 22:22:07 2021 +0300 @@ -110,10 +110,6 @@ const octave_idx_type n_neighbours = raster_neighbours.numel (); - // We probably should not be using this but converting to Array - // just to have fortran_vec seems a bit too much. - const octave_idx_type* s = original_size.to_jit (); - std::function scan; scan = [&] (const octave_idx_type dim) -> void { @@ -122,7 +118,7 @@ if (dim == 0) { - for (octave_idx_type k = 0; k < s[0]; k++, J++, I++) + for (octave_idx_type k = 0; k < original_size.xelem (0); k++, J++, I++) { for (octave_idx_type i = 0; i < n_neighbours; i++) if (*J < J[neighbours[i]]) @@ -133,7 +129,7 @@ } } else - for (octave_idx_type i = 0; i < s[dim]; i++) + for (octave_idx_type i = 0; i < original_size.xelem (dim); i++) scan (dim-1); J += pads[dim]; @@ -161,10 +157,6 @@ const octave_idx_type n_neighbours = antiraster_neighbours.numel (); - // We probably should not be using this but converting to Array - // just to have fortran_vec seems a bit too much. - const octave_idx_type* s = original_size.to_jit (); - J += padded_marker.numel () -1; I += padded_marker.numel () -1; @@ -178,7 +170,7 @@ if (dim == 0) { - for (octave_idx_type k = 0; k < s[0]; k++, J--, I--, ind--) + for (octave_idx_type k = 0; k < original_size.xelem (0); k++, J--, I--, ind--) { for (octave_idx_type i = 0; i < n_neighbours; i++) if (*J < J[neighbours[i]]) @@ -193,7 +185,7 @@ } } else - for (octave_idx_type i = 0; i < s[dim]; i++) + for (octave_idx_type i = 0; i < original_size.xelem (dim); i++) scan (dim-1); J -= pads[dim];