changeset 20997:d03babf77549

filter.cc: Use first_non_singleton() rather than handrolled code. * filter.cc (filter, Ffilter) : Replace custome while loop to find first non-singleton dimension with member function first_non_singleton from dim_vector class.
author Rik <rik@octave.org>
date Mon, 28 Dec 2015 08:08:42 -0800
parents 20bd3d4fabad
children 73f62b4bb533
files libinterp/corefcn/filter.cc
diffstat 1 files changed, 6 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/filter.cc	Sun Dec 27 12:25:03 2015 -0800
+++ b/libinterp/corefcn/filter.cc	Mon Dec 28 08:08:42 2015 -0800
@@ -242,16 +242,8 @@
   dim_vector x_dims = x.dims ();
 
   if (dim < 0)
-    {
-      // Find first non-singleton dimension
-      while (dim < x_dims.length () && x_dims(dim) <= 1)
-        dim++;
-
-      // All dimensions singleton, pick first dimension
-      if (dim == x_dims.length ())
-        dim = 0;
-    }
-  else if (dim < 0 || dim > x_dims.length ())
+    dim = x_dims.first_non_singleton ();
+  else if (dim > x_dims.length ())
     error ("filter: DIM must be a valid dimension");
 
   octave_idx_type a_len = a.numel ();
@@ -376,9 +368,6 @@
   if (nargin < 3 || nargin > 5)
     print_usage ();
 
-  const char *a_b_errmsg = "filter: A and B must be vectors";
-  const char *x_si_errmsg = "filter: X and SI must be arrays";
-
   int dim;
   dim_vector x_dims = args(2).dims ();
 
@@ -389,19 +378,13 @@
         error ("filter: DIM must be a valid dimension");
     }
   else
-    {
-      // Find first non-singleton dimension
-      dim = 0;
-      while (dim < x_dims.length () && x_dims(dim) <= 1)
-        dim++;
-
-      // All dimensions singleton, pick first dimension
-      if (dim == x_dims.length ())
-        dim = 0;
-    }
+    dim = x_dims.first_non_singleton ();
 
   octave_value_list retval;
 
+  const char *a_b_errmsg = "filter: A and B must be vectors";
+  const char *x_si_errmsg = "filter: X and SI must be arrays";
+
   bool isfloat = (args(0).is_single_type ()
                   || args(1).is_single_type ()
                   || args(2).is_single_type ()