# HG changeset patch # User jwe # Date 1155923423 0 # Node ID 0dd8428bb2609e8d7e60d493067a6a78f6a4d320 # Parent 2e86e3601e0ffdf9feb8b1898284a72f5a7ccc27 [project @ 2006-08-18 17:50:23 by jwe] diff -r 2e86e3601e0f -r 0dd8428bb260 liboctave/Array.cc --- a/liboctave/Array.cc Fri Aug 18 17:40:41 2006 +0000 +++ b/liboctave/Array.cc Fri Aug 18 17:50:23 2006 +0000 @@ -515,49 +515,52 @@ retval.resize (dv_new); - Array cp (nd+1, 1); - for (octave_idx_type i = 1; i < nd+1; i++) - cp(i) = cp(i-1) * dv(i-1); - - octave_idx_type incr = cp(perm_vec(0)); - - Array base_delta (nd-1, 0); - Array base_delta_max (nd-1); - Array base_incr (nd-1); - for (octave_idx_type i = 0; i < nd-1; i++) + if (numel () > 0) { - base_delta_max(i) = dv_new(i+1); - base_incr(i) = cp(perm_vec(i+1)); - } - - octave_idx_type nr_new = dv_new(0); - octave_idx_type nel_new = dv_new.numel (); - octave_idx_type n = nel_new / nr_new; - - octave_idx_type k = 0; - - for (octave_idx_type i = 0; i < n; i++) - { - octave_idx_type iidx = 0; - for (octave_idx_type kk = 0; kk < nd-1; kk++) - iidx += base_delta(kk) * base_incr(kk); - - for (octave_idx_type j = 0; j < nr_new; j++) + Array cp (nd+1, 1); + for (octave_idx_type i = 1; i < nd+1; i++) + cp(i) = cp(i-1) * dv(i-1); + + octave_idx_type incr = cp(perm_vec(0)); + + Array base_delta (nd-1, 0); + Array base_delta_max (nd-1); + Array base_incr (nd-1); + for (octave_idx_type i = 0; i < nd-1; i++) { - OCTAVE_QUIT; - - retval(k++) = elem(iidx); - iidx += incr; + base_delta_max(i) = dv_new(i+1); + base_incr(i) = cp(perm_vec(i+1)); } - base_delta(0)++; - - for (octave_idx_type kk = 0; kk < nd-2; kk++) + octave_idx_type nr_new = dv_new(0); + octave_idx_type nel_new = dv_new.numel (); + octave_idx_type n = nel_new / nr_new; + + octave_idx_type k = 0; + + for (octave_idx_type i = 0; i < n; i++) { - if (base_delta(kk) == base_delta_max(kk)) + octave_idx_type iidx = 0; + for (octave_idx_type kk = 0; kk < nd-1; kk++) + iidx += base_delta(kk) * base_incr(kk); + + for (octave_idx_type j = 0; j < nr_new; j++) { - base_delta(kk) = 0; - base_delta(kk+1)++; + OCTAVE_QUIT; + + retval(k++) = elem(iidx); + iidx += incr; + } + + base_delta(0)++; + + for (octave_idx_type kk = 0; kk < nd-2; kk++) + { + if (base_delta(kk) == base_delta_max(kk)) + { + base_delta(kk) = 0; + base_delta(kk+1)++; + } } } } diff -r 2e86e3601e0f -r 0dd8428bb260 liboctave/ChangeLog --- a/liboctave/ChangeLog Fri Aug 18 17:40:41 2006 +0000 +++ b/liboctave/ChangeLog Fri Aug 18 17:50:23 2006 +0000 @@ -1,3 +1,8 @@ +2006-08-18 John W. Eaton + + * Array.cc (Array::permute): Only rearrange values if array is + not empty. + 2006-07-26 John W. Eaton * dbleDET.cc (DET::initialize10, DET::value_will_underflow,