# HG changeset patch # User Jaroslav Hajek # Date 1236687533 -3600 # Node ID e31d47f2c9bb6c6aae0e238358803f47bcf0f5ff # Parent 3e161cae0bc609665bec1b1436bc71d2ce72d617 fixes to row-reducing cummin/cummax diff -r 3e161cae0bc6 -r e31d47f2c9bb liboctave/ChangeLog --- a/liboctave/ChangeLog Tue Mar 10 12:28:42 2009 +0100 +++ b/liboctave/ChangeLog Tue Mar 10 13:18:53 2009 +0100 @@ -1,3 +1,7 @@ +2009-03-10 Jaroslav Hajek + + * mx-inlines.cc (OP_CUMMINMAX_FCN2): r -> r0 where appropriate. + 2009-03-08 Jaroslav Hajek * idx-vector.h (idx_vector::bloop): loop --> bloop. diff -r 3e161cae0bc6 -r e31d47f2c9bb liboctave/mx-inlines.cc --- a/liboctave/mx-inlines.cc Tue Mar 10 12:28:42 2009 +0100 +++ b/liboctave/mx-inlines.cc Tue Mar 10 13:18:53 2009 +0100 @@ -735,7 +735,7 @@ { \ if (xisnan (v[i])) \ { r[i] = r0[i]; nan = true; } \ - else if (xisnan (r[i]) || v[i] OP r[i]) \ + else if (xisnan (r0[i]) || v[i] OP r0[i]) \ r[i] = v[i]; \ } \ j++; v += m; r0 = r; r += m; \ @@ -743,7 +743,7 @@ while (j < n) \ { \ for (octave_idx_type i = 0; i < m; i++) \ - if (v[i] OP r[i]) \ + if (v[i] OP r0[i]) \ r[i] = v[i]; \ else \ r[i] = r0[i]; \ @@ -772,7 +772,7 @@ { \ if (xisnan (v[i])) \ { r[i] = r0[i]; ri[i] = r0i[i]; nan = true; } \ - else if (xisnan (r[i]) || v[i] OP r[i]) \ + else if (xisnan (r0[i]) || v[i] OP r0[i]) \ { r[i] = v[i]; ri[i] = j; }\ } \ j++; v += m; r0 = r; r += m; r0i = ri; ri += m; \ @@ -780,7 +780,7 @@ while (j < n) \ { \ for (octave_idx_type i = 0; i < m; i++) \ - if (v[i] OP r[i]) \ + if (v[i] OP r0[i]) \ { r[i] = v[i]; ri[i] = j; } \ else \ { r[i] = r0[i]; ri[i] = r0i[i]; } \ diff -r 3e161cae0bc6 -r e31d47f2c9bb src/DLD-FUNCTIONS/max.cc --- a/src/DLD-FUNCTIONS/max.cc Tue Mar 10 12:28:42 2009 +0100 +++ b/src/DLD-FUNCTIONS/max.cc Tue Mar 10 13:18:53 2009 +0100 @@ -862,6 +862,7 @@ break; \ } \ \ + int dim; \ dim_vector dv = arg1.dims (); \ if (error_state) \ { \ @@ -869,11 +870,23 @@ return retval; \ } \ \ - int dim = 0; \ - while ((dim < dv.length ()) && (dv (dim) <= 1)) \ - dim++; \ - if (dim == dv.length ()) \ - dim = 0; \ + if (nargin == 2) \ + { \ + dim = arg2.nint_value () - 1; \ + if (dim < 0 || dim >= dv.length ()) \ + { \ + error ("%s: invalid dimension", #FCN); \ + return retval; \ + } \ + } \ + else \ + { \ + dim = 0; \ + while ((dim < dv.length ()) && (dv (dim) <= 1)) \ + dim++; \ + if (dim == dv.length ()) \ + dim = 0; \ + } \ \ if (arg1.is_integer_type ()) \ { \ @@ -914,12 +927,12 @@ @noindent\n\ is equivalent to the following code:\n\ @example\n\ - colons(1:ndims (x)) = @{':'@};\n\ + w = iw = zeros (size (x));\n\ + idxw = idxx = repmat (@{':'@}, 1, ndims (x));\n\ for i = 1:size (x, dim)\n\ - idxw = idxx = colons;\n\ - idxw@{i@} = i; idxx@{i@} = 1:i;\n\ + idxw@{dim@} = i; idxx@{dim@} = 1:i;\n\ [w(idxw@{:@}), iw(idxw@{:@})] =\ - min(x(idxx@{:@}), dim);\n\ + min(x(idxx@{:@}), [], dim);\n\ endfor\n\ @end example\n\ \n\ @@ -945,12 +958,12 @@ @noindent\n\ is equivalent to the following code:\n\ @example\n\ - colons(1:ndims (x)) = @{':'@};\n\ + w = iw = zeros (size (x));\n\ + idxw = idxx = repmat (@{':'@}, 1, ndims (x));\n\ for i = 1:size (x, dim)\n\ - idxw = idxx = colons;\n\ - idxw@{i@} = i; idxx@{i@} = 1:i;\n\ + idxw@{dim@} = i; idxx@{dim@} = 1:i;\n\ [w(idxw@{:@}), iw(idxw@{:@})] =\ - max(x(idxx@{:@}), dim);\n\ + max(x(idxx@{:@}), [], dim);\n\ endfor\n\ @end example\n\ \n\