view src/of-image-1-namespace.patch @ 5855:77bfbb7d8094

patches for recent Octave namespace changes * of-control-1-deprecated-warnings.patch, of-image-1-namespace.patch, of-signal-1-deprecated-warnings.patch: New files. * dist-files.mk: Upate.
author John W. Eaton <jwe@octave.org>
date Fri, 20 Aug 2021 03:47:20 -0400
parents
children cb17f5f87a0f
line wrap: on
line source

diff -uNr a/src/bwconncomp.cc b/src/bwconncomp.cc
--- a/src/bwconncomp.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/bwconncomp.cc	2021-08-20 03:40:55.040903123 -0400
@@ -30,7 +30,7 @@
 #include <octave/oct-map.h>
 
 #include "connectivity.h"
-using namespace octave::image;
+using namespace octave_image;
 
 static std::vector<std::vector<octave_idx_type>>
 connected_components (const boolNDArray& BW, const connectivity& conn)
diff -uNr a/src/bwlabeln.cc b/src/bwlabeln.cc
--- a/src/bwlabeln.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/bwlabeln.cc	2021-08-20 03:41:02.785032122 -0400
@@ -32,7 +32,7 @@
 #define WANTS_OCTAVE_IMAGE_VALUE 1
 #include "octave-wrappers.h"
 
-using namespace octave::image;
+using namespace octave_image;
 
 static union_find
 pre_label (NDArray& L, const connectivity& conn)
diff -uNr a/src/conndef.cc b/src/conndef.cc
--- a/src/conndef.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/conndef.cc	2021-08-20 03:41:12.149188253 -0400
@@ -19,7 +19,7 @@
 #include "config.h"
 
 #include "connectivity.h"
-using namespace octave::image;
+using namespace octave_image;
 
 // The conndef() function is really really simple and could have easily
 // been a m file (actually it once was, check the hg log if it ever needs
diff -uNr a/src/connectivity.cc b/src/connectivity.cc
--- a/src/connectivity.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/connectivity.cc	2021-08-20 03:41:18.001285906 -0400
@@ -25,7 +25,7 @@
 #define WANTS_OCTAVE_IMAGE_VALUE 1
 #include "octave-wrappers.h"
 
-using namespace octave::image;
+using namespace octave_image;
 
 
 connectivity::connectivity (const boolNDArray& mask_arg)
@@ -296,7 +296,7 @@
 
 
 connectivity
-octave::image::conndef (const octave_value& _val)
+octave_image::conndef (const octave_value& _val)
 {
   octave_image::value val (_val);
 
diff -uNr a/src/connectivity.h b/src/connectivity.h
--- a/src/connectivity.h	2020-02-02 08:20:08.000000000 -0500
+++ b/src/connectivity.h	2021-08-20 03:41:28.897467898 -0400
@@ -29,10 +29,8 @@
 
 #include <octave/ov.h>
 
-namespace octave
+namespace octave_image
 {
-  namespace image
-  {
     class connectivity
     {
       public:
@@ -89,14 +87,13 @@
     };
 
     connectivity conndef (const octave_value& val);
-  }
 }
 
 // Templated methods
 
 template<class T, class P>
 T
-octave::image::connectivity::create_padded (const T& image, const P& val) const
+octave_image::connectivity::create_padded (const T& image, const P& val) const
 {
   const octave_idx_type pad_ndims = std::min (mask.ndims (), image.ndims ());
 
@@ -117,7 +114,7 @@
 
 template<class T>
 void
-octave::image::connectivity::unpad (T& image) const
+octave_image::connectivity::unpad (T& image) const
 {
   const octave_idx_type pad_ndims = std::min (mask.ndims (), image.ndims ());
   const dim_vector padded_size = image.dims ();
@@ -134,7 +131,7 @@
 
 template<class P>
 P
-octave::image::connectivity::min_value (void)
+octave_image::connectivity::min_value (void)
 {
   if (typeid (P) == typeid (bool))
     return false;
@@ -144,7 +141,7 @@
 
 template<class T, class P>
 void
-octave::image::connectivity::set_padding (const dim_vector& size,
+octave_image::connectivity::set_padding (const dim_vector& size,
                                           const dim_vector& padded_size,
                                           T& im, const P& val)
 {
diff -uNr a/src/connectivity.h.orig b/src/connectivity.h.orig
--- a/src/connectivity.h.orig	1969-12-31 19:00:00.000000000 -0500
+++ b/src/connectivity.h.orig	2021-08-20 03:41:55.317910045 -0400
@@ -0,0 +1,174 @@
+// Copyright (C) 2014 Carnë Draug <carandraug@octave.org>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef OCTAVE_IMAGE_CONNDEF
+#define OCTAVE_IMAGE_CONNDEF
+
+#include <string>
+#include <stdexcept>
+#include <functional>
+
+#include <octave/Array.h>
+#include <octave/idx-vector.h>
+#include <octave/dim-vector.h>
+#include <octave/boolNDArray.h>
+#include <octave/lo-ieee.h>  // octave_Inf
+
+#include <octave/ov.h>
+
+namespace octave_image
+{
+    class connectivity
+    {
+      public:
+        connectivity () = default;
+
+        //! Will throw if val is bad
+        explicit connectivity (const boolNDArray& mask_arg);
+        explicit connectivity (const unsigned int conn);
+        connectivity (const octave_idx_type& ndims, const std::string& type);
+
+        boolNDArray mask;
+
+        // For a matrix of size `size', what are the offsets for all of its
+        // connected elements (will have negative and positive values).
+        Array<octave_idx_type> neighbourhood (const dim_vector& size) const;
+        Array<octave_idx_type> deleted_neighbourhood (const dim_vector& size) const;
+        Array<octave_idx_type> positive_neighbourhood (const dim_vector& size) const;
+        Array<octave_idx_type> negative_neighbourhood (const dim_vector& size) const;
+
+        template<class T, class P>
+        T create_padded (const T& image, const P& val) const;
+
+        template<class T>
+        void unpad (T& image) const;
+
+        //! Return a logical mask of elements that are part of the padding.
+        static boolNDArray padding_mask (const dim_vector& size,
+                                         const dim_vector& padded_size);
+
+        //! Set the padding elements to a specific value.
+        template<class T, class P>
+        static void set_padding (const dim_vector& size,
+                                 const dim_vector& padded_size,
+                                 T& im, const P& val);
+
+        template<class P>
+        static P min_value (void);
+
+        static Array<octave_idx_type> padding_lengths (const dim_vector& size,
+                                                       const dim_vector& padded_size);
+
+      private:
+        //! Like Array::ndims() but will return 1 dimension for ColumnVector
+        static octave_idx_type ndims (const dim_vector& d);
+        template<class T>
+        static octave_idx_type ndims (const Array<T>& a);
+    };
+
+    class invalid_connectivity : public std::invalid_argument
+    {
+      public:
+        invalid_connectivity (const std::string& what_arg)
+          : std::invalid_argument (what_arg) { }
+    };
+
+    connectivity conndef (const octave_value& val);
+}
+
+// Templated methods
+
+template<class T, class P>
+T
+octave_image::connectivity::create_padded (const T& image, const P& val) const
+{
+  const octave_idx_type pad_ndims = std::min (mask.ndims (), image.ndims ());
+
+  Array<octave_idx_type> idx (dim_vector (image.ndims (), 1), 0);
+  dim_vector padded_size = image.dims ();
+  for (octave_idx_type i = 0; i < pad_ndims; i++)
+    {
+      padded_size(i) += 2;
+      idx(i) = 1;
+    }
+
+  T padded (padded_size, val);
+
+  // padded(2:end-1, 2:end-1, ..., 2:end-1) = BW
+  padded.insert (image, idx);
+  return padded;
+}
+
+template<class T>
+void
+octave_image::connectivity::unpad (T& image) const
+{
+  const octave_idx_type pad_ndims = std::min (mask.ndims (), image.ndims ());
+  const dim_vector padded_size = image.dims ();
+
+  Array<idx_vector> inner_slice (dim_vector (image.ndims (), 1));
+  for (octave_idx_type i = 0; i < pad_ndims ; i++)
+    inner_slice(i) = idx_vector (1, padded_size(i) - 1);
+  for (octave_idx_type i = pad_ndims; i < image.ndims (); i++)
+    inner_slice(i) = idx_vector (0, padded_size(i));
+
+  image = image.index (inner_slice);
+  return;
+}
+
+template<class P>
+P
+octave_image::connectivity::min_value (void)
+{
+  if (typeid (P) == typeid (bool))
+    return false;
+  else
+    return P(-octave_Inf);
+}
+
+template<class T, class P>
+void
+octave_image::connectivity::set_padding (const dim_vector& size,
+                                         const dim_vector& padded_size,
+                                         T& im, const P& val)
+{
+  P* im_v = im.fortran_vec ();
+
+  const Array<octave_idx_type> 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];
+
+  std::function<void(const octave_idx_type)> fill;
+  fill = [&] (const octave_idx_type dim) -> void
+  {
+    for (octave_idx_type i = 0; i < lengths_v[dim]; i++, im_v++)
+      *im_v = val;
+
+    if (dim == 0)
+      im_v += row_stride;
+    else
+      for (octave_idx_type i = 0; i < strides_v[dim]; i++)
+        fill (dim -1);
+
+    for (octave_idx_type i = 0; i < lengths_v[dim]; i++, im_v++)
+      *im_v = val;
+  };
+  fill (im.ndims () -1);
+}
+
+#endif
diff -uNr a/src/imerode.cc b/src/imerode.cc
--- a/src/imerode.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/imerode.cc	2021-08-20 03:42:06.186092277 -0400
@@ -32,7 +32,7 @@
 #define WANTS_OCTAVE_IMAGE_VALUE 1
 #include "octave-wrappers.h"
 
-using namespace octave::image;
+using namespace octave_image;
 
 // How this works:
 //
diff -uNr a/src/imreconstruct.cc b/src/imreconstruct.cc
--- a/src/imreconstruct.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/imreconstruct.cc	2021-08-20 03:42:11.690184639 -0400
@@ -36,7 +36,7 @@
 
 #include "connectivity.h"
 
-using namespace octave::image;
+using namespace octave_image;
 
 #define WANTS_OCTAVE_IMAGE_VALUE 1
 #include "octave-wrappers.h"
diff -uNr a/src/strel.cc b/src/strel.cc
--- a/src/strel.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/strel.cc	2021-08-20 03:39:35.059577831 -0400
@@ -35,7 +35,7 @@
 
 // Expects a @strel object, or a boolean matrix (or something
 // that can be converted into one with bool_matrix_value()
-octave::image::strel::strel (const octave_value& arg)
+octave_image::strel::strel (const octave_value& arg)
 {
   octave_value se = arg;
   // We are only creating a strel object here so that we can use
@@ -105,7 +105,7 @@
   return;
 }
 
-octave::image::strel::strel (const boolNDArray& nhood, const NDArray& height)
+octave_image::strel::strel (const boolNDArray& nhood, const NDArray& height)
   : nhood (nhood), height (height)
 {
   ini_ctor ();
@@ -114,7 +114,7 @@
   return;
 }
 
-octave::image::strel::strel (const boolNDArray& nhood, const NDArray& height,
+octave_image::strel::strel (const boolNDArray& nhood, const NDArray& height,
                              const Array<octave_idx_type>& origin)
   : nhood (nhood), height (height), origin (origin)
 {
@@ -125,25 +125,25 @@
 }
 
 boolNDArray
-octave::image::strel::get_nhood (void) const
+octave_image::strel::get_nhood (void) const
 {
   return nhood;
 }
 
 octave_idx_type
-octave::image::strel::get_nnz (void) const
+octave_image::strel::get_nnz (void) const
 {
   return nnz;
 }
 
 Array<octave_idx_type>
-octave::image::strel::get_origin (void) const
+octave_image::strel::get_origin (void) const
 {
   return origin;
 }
 
-octave::image::strel
-octave::image::strel::operator () (const octave_idx_type& i) const
+octave_image::strel
+octave_image::strel::operator () (const octave_idx_type& i) const
 {
   assert (i >= 0 && i < octave_idx_type (decomposition.size ()));
   return decomposition[i];
@@ -151,7 +151,7 @@
 
 // Number of strel elements after decomposition
 octave_idx_type
-octave::image::strel::numel (void) const
+octave_image::strel::numel (void) const
 {
   return octave_idx_type (decomposition.size ());
 }
@@ -163,8 +163,8 @@
 // center of the matrix, there will be no change.
 // The reason for this is so that we can keep the origin in matrices with
 // sides with an even length.
-octave::image::strel
-octave::image::strel::reflect (void) const
+octave_image::strel
+octave_image::strel::reflect (void) const
 {
   boolNDArray ref_nhood   (size);
   NDArray     ref_height  (size);
@@ -178,11 +178,11 @@
   for (octave_idx_type dim = 0; dim < ndims; dim++)
     ref_origin(dim) = size(dim) - origin(dim) -1;
 
-  return octave::image::strel (ref_nhood, ref_height, ref_origin);
+  return octave_image::strel (ref_nhood, ref_height, ref_origin);
 }
 
 void
-octave::image::strel::set_origin (const Array<octave_idx_type>& sub)
+octave_image::strel::set_origin (const Array<octave_idx_type>& sub)
 {
   origin = sub;
   validate_origin ();
@@ -190,7 +190,7 @@
 }
 
 bool
-octave::image::strel::flat (void) const
+octave_image::strel::flat (void) const
 {
   bool flat = true;
   if (! height.all_elements_are_zero ())
@@ -220,7 +220,7 @@
 // linear shift is [0 1 11 21 22]
 // The second element is the matching height for each.
 Array<octave_idx_type>
-octave::image::strel::offsets (const dim_vector& cum_size) const
+octave_image::strel::offsets (const dim_vector& cum_size) const
 {
   Array<octave_idx_type> sub (dim_vector (ndims, 1), 0);
   Array<octave_idx_type> offsets (dim_vector (nnz, 1));
@@ -244,7 +244,7 @@
 // at coordinates (0,0) of the input matrix and we need enough padding for
 // it. If the shape is "full", then we add the double.
 Array<octave_idx_type>
-octave::image::strel::pre_pad (const octave_idx_type& mt_ndims,
+octave_image::strel::pre_pad (const octave_idx_type& mt_ndims,
                                const std::string& shape) const
 {
   Array<octave_idx_type> pad (dim_vector (mt_ndims, 1), 0);
@@ -274,7 +274,7 @@
 }
 
 Array<octave_idx_type>
-octave::image::strel::post_pad (const octave_idx_type& mt_ndims,
+octave_image::strel::post_pad (const octave_idx_type& mt_ndims,
                                 const std::string& shape) const
 {
   Array<octave_idx_type> pad (dim_vector (mt_ndims, 1), 0);
@@ -304,7 +304,7 @@
 }
 
 void
-octave::image::strel::ini_ctor ()
+octave_image::strel::ini_ctor ()
 {
   size    = nhood.dims ();
   ndims   = nhood.ndims ();
@@ -313,7 +313,7 @@
 }
 
 Array<octave_idx_type>
-octave::image::strel::default_origin ()
+octave_image::strel::default_origin ()
 {
   Array<octave_idx_type> origin (dim_vector (ndims, 1));
   for (octave_idx_type dim = 0; dim < ndims; dim++)
@@ -323,14 +323,14 @@
 }
 
 void
-octave::image::strel::end_ctor (void)
+octave_image::strel::end_ctor (void)
 {
   if (decomposition.empty ())
     decomposition.push_back (*this);
 }
 
 void
-octave::image::strel::validate_origin (void)
+octave_image::strel::validate_origin (void)
 {
   assert (ndims == origin.numel ());
   for (octave_idx_type dim = 0; dim < ndims; dim++)
diff -uNr a/src/strel.h b/src/strel.h
--- a/src/strel.h	2020-02-02 08:20:08.000000000 -0500
+++ b/src/strel.h	2021-08-20 03:40:39.204639691 -0400
@@ -45,10 +45,8 @@
 
 #include <octave/ov.h>
 
-namespace octave
+namespace octave_image
 {
-  namespace image
-  {
     class strel
     {
       public:
@@ -109,14 +107,13 @@
         void validate_origin (void);
 
     };
-  }
 }
 
 // Define it on header or we we need to instantiate it for all
 // possible classes in strel.cc
 template<class P>
 Array<P>
-octave::image::strel::true_heights (void) const
+octave_image::strel::true_heights (void) const
 {
   Array<P> true_heights (dim_vector (nnz, 1));
   for (octave_idx_type ind = 0, found = 0; found < nnz; ind++)
diff -uNr a/src/watershed.cc b/src/watershed.cc
--- a/src/watershed.cc	2020-02-02 08:20:08.000000000 -0500
+++ b/src/watershed.cc	2021-08-20 03:40:18.700299337 -0400
@@ -26,7 +26,7 @@
 #include "octave-wrappers.h"
 
 #include "connectivity.h"
-using namespace octave::image;
+using namespace octave_image;
 
 template<class T>
 static boolNDArray
@@ -297,7 +297,7 @@
 
   connectivity conn;
   if (nargin > 1)
-    conn = octave::image::conndef (args(1));
+    conn = octave_image::conndef (args(1));
   else
     {
       try