Mercurial > hg > octave-nkf
diff liboctave/dim-vector.h @ 9666:a531dec450c4
allow 1D case for sub2ind and ind2sub
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Sun, 27 Sep 2009 11:26:41 +0200 |
parents | 11844593875a |
children | 50db3c5175b5 |
line wrap: on
line diff
--- a/liboctave/dim-vector.h +++ b/liboctave/dim-vector.h @@ -462,30 +462,39 @@ int n_dims = length (); if (n_dims == n) return *this; - else + else if (n_dims < n) { - dim_vector retval; - retval.resize (n == 1 ? 2 : n, 1); - - bool zeros = true; - for (int i = 0; i < n && i < n_dims; i++) + dim_vector retval = alloc (n); + + int pad = 0; + for (int i = 0; i < n_dims; i++) { - retval(i) = elem (i); - zeros = zeros && elem (i) == 0; + retval.rep[i] = rep[i]; + if (rep[i] != 0) + pad = 1; } - if (n < n_dims) - { - octave_idx_type k = 1; - for (int i = n; i < n_dims; i++) - k *= elem (i); - retval(n - 1) *= k; - } - else if (zeros) - { - for (int i = n_dims; i < n; i++) - retval.elem (i) = 0; - } + for (int i = n_dims; i < n; i++) + retval.rep[i] = pad; + + return retval; + } + else + { + if (n < 1) n = 1; + + dim_vector retval = alloc (n); + + retval.rep[1] = 1; + + for (int i = 0; i < n-1; i++) + retval.rep[i] = rep[i]; + + int k = rep[n-1]; + for (int i = n; i < n_dims; i++) + k *= rep[i]; + + retval.rep[n-1] = k; return retval; }