From bug-octave-request at bevo dot che dot wisc dot edu Thu Sep 25 10:23:30 1997 Subject: Bug in builtin function: filter From: "John W. Eaton" To: Erik de Castro Lopo Cc: bug-octave at bevo dot che dot wisc dot edu Date: Thu, 25 Sep 1997 10:22:35 -0500 On 12-Sep-1997, Erik de Castro Lopo wrote: | Built in function filter was not returning the second output argument if | only given three input arguments. I used the following patch. BTW, when submitting patches, please supply diffs in context (diff -c) or unidiff (diff -u) format -- they are much easier to read and can be applied automatically. Thanks, jwe *** filter.cc~ Mon Jun 2 15:18:52 1997 --- filter.cc Thu Sep 25 10:17:08 1997 *************** *** 193,228 **** if (! error_state) { if (nargin == 3) { ! ComplexColumnVector y (filter (b, a, x)); ! if (x_is_vector) ! retval (0) = octave_value (y, (args(2).columns () == 1)); ! else ! retval (0) = y; } else { ! ComplexColumnVector si = args(3).complex_vector_value (); ! if (! error_state) { - ComplexColumnVector y (filter (b, a, x, si)); - if (si_is_vector) retval (1) = octave_value (si, (args(3).columns () == 1)); else retval (1) = si; - - if (x_is_vector) - retval (0) = octave_value (y, (args(2).columns () == 1)); - else - retval (0) = y; } else ! error (errmsg); } } else error (errmsg); --- 194,232 ---- if (! error_state) { + ComplexColumnVector si; + if (nargin == 3) { ! int a_len = a.length (); ! int b_len = b.length (); ! int si_len = (a_len > b_len ? a_len : b_len) - 1; ! ! si.resize (si_len, 0.0); } else + si = args(3).complex_vector_value (); + + if (! error_state) { ! ComplexColumnVector y (filter (b, a, x, si)); ! if (nargout == 2) { if (si_is_vector) retval (1) = octave_value (si, (args(3).columns () == 1)); else retval (1) = si; } + + if (x_is_vector) + retval (0) = octave_value (y, (args(2).columns () == 1)); else ! retval (0) = y; } + else + error (errmsg); } else error (errmsg); *************** *** 235,270 **** if (! error_state) { if (nargin == 3) { ! ColumnVector y (filter (b, a, x)); ! if (x_is_vector) ! retval (0) = octave_value (y, (args(2).columns () == 1)); ! else ! retval (0) = y; } else { ! ColumnVector si = args(3).vector_value (); ! if (! error_state) { - ColumnVector y (filter (b, a, x, si)); - if (si_is_vector) retval (1) = octave_value (si, (args(3).columns () == 1)); else retval (1) = si; - - if (x_is_vector) - retval (0) = octave_value (y, (args(2).columns () == 1)); - else - retval (0) = y; } else ! error (errmsg); } } else error (errmsg); --- 239,277 ---- if (! error_state) { + ColumnVector si; + if (nargin == 3) { ! int a_len = a.length (); ! int b_len = b.length (); ! int si_len = (a_len > b_len ? a_len : b_len) - 1; ! ! si.resize (si_len, 0.0); } else + si = args(3).vector_value (); + + if (! error_state) { ! ColumnVector y (filter (b, a, x, si)); ! if (nargout == 2) { if (si_is_vector) retval (1) = octave_value (si, (args(3).columns () == 1)); else retval (1) = si; } + + if (x_is_vector) + retval (0) = octave_value (y, (args(2).columns () == 1)); else ! retval (0) = y; } + else + error (errmsg); } else error (errmsg);