Mercurial > hg > octave-lyh
changeset 12037:a4672b478cef release-3-2-x
dim-vector.h: dim vectors always have two dimensions
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 08 Jul 2009 13:49:21 -0400 |
parents | 059ab308074f |
children | bc2f0067e140 |
files | liboctave/ChangeLog liboctave/dim-vector.h |
diffstat | 2 files changed, 30 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,11 @@ +2009-07-08 John W. Eaton <jwe@octave.org> + + * dim-vector.h (dim_vector::dim_vector_rep::dim_vector_rep + (octave_idx_type, const dim_vector_rep *, int)): + Enforce 2-d objects here. + (dim_vector::dim_vector_rep::dim_vector_rep): Simply copy object. + (dim_vector::resize): Allow N < 2. + 2009-07-21 Jaroslav Hajek <highegg@gmail.com> Version 3.2.2 released.
--- a/liboctave/dim-vector.h +++ b/liboctave/dim-vector.h @@ -75,8 +75,8 @@ } dim_vector_rep (const dim_vector_rep& dv) - : dims (dv.ndims > 0 ? new octave_idx_type [dv.ndims] : 0), - ndims (dv.ndims > 0 ? dv.ndims : 0), count (1) + : dims (new octave_idx_type [dv.ndims]), + ndims (dv.ndims), count (1) { if (dims) { @@ -87,10 +87,22 @@ dim_vector_rep (octave_idx_type n, const dim_vector_rep *dv, int fill_value = 0) - : dims ((dv && n > 0) ? new octave_idx_type [n] : 0), - ndims (n > 0 ? n : 0), count (1) + : dims (new octave_idx_type [n < 2 ? 2 : n]), + ndims (n < 2 ? 2 : n), count (1) { - if (dims) + if (n == 0) + { + // Result is 0x0. + dims[0] = 0; + dims[1] = 0; + } + else if (n == 1) + { + // Result is a column vector. + dims[0] = dv->dims[0]; + dims[1] = 1; + } + else { int dv_ndims = dv ? dv->ndims : 0; @@ -134,12 +146,16 @@ void chop_all_singletons (void) { int j = 0; + for (int i = 0; i < ndims; i++) { if (dims[i] != 1) dims[j++] = dims[i]; } - if (j == 1) dims[1] = 1; + + if (j == 1) + dims[1] = 1; + ndims = j > 2 ? j : 2; } @@ -223,13 +239,6 @@ if (n != len) { - if (n < 2) - { - (*current_liboctave_error_handler) - ("unable to resize object to fewer than 2 dimensions"); - return; - } - dim_vector_rep *old_rep = rep; rep = new dim_vector_rep (n, old_rep, fill_value);