# HG changeset patch # User Rik # Date 1451318922 28800 # Node ID d03babf77549994913472018c3a6897f89a952bf # Parent 20bd3d4fabad842931ca22841bce731c124e517d 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. diff --git a/libinterp/corefcn/filter.cc b/libinterp/corefcn/filter.cc --- a/libinterp/corefcn/filter.cc +++ b/libinterp/corefcn/filter.cc @@ -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 ()