Mercurial > hg > octave-lojdl
changeset 2589:49ae0d992eea
[project @ 1996-12-13 08:41:43 by jwe]
author | jwe |
---|---|
date | Fri, 13 Dec 1996 08:41:55 +0000 |
parents | ccd72573a0cf |
children | c6cbc2041469 |
files | liboctave/Array2-idx.h liboctave/ChangeLog src/ChangeLog src/ov.cc |
diffstat | 4 files changed, 41 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/Array2-idx.h +++ b/liboctave/Array2-idx.h @@ -334,6 +334,22 @@ } } +#define MAYBE_RESIZE_LHS \ + do \ + { \ + if (liboctave_rre_flag) \ + { \ + int max_row_idx = idx_i_is_colon ? rhs_nr : idx_i.max () + 1; \ + int max_col_idx = idx_j_is_colon ? rhs_nc : idx_j.max () + 1; \ + \ + int new_nr = max_row_idx > lhs_nr ? max_row_idx : lhs_nr; \ + int new_nc = max_col_idx > lhs_nc ? max_col_idx : lhs_nc; \ + \ + lhs.resize (new_nr, new_nc, 0.0); \ + } \ + } \ + while (0) + template <class LT, class RT> int assign (Array2<LT>& lhs, const Array2<RT>& rhs) @@ -378,19 +394,10 @@ } else { - if (liboctave_rre_flag) - { - int max_row_idx = idx_i_is_colon ? rhs_nr : idx_i.max () + 1; - int max_col_idx = idx_j_is_colon ? rhs_nc : idx_j.max () + 1; - - int new_nr = max_row_idx > lhs_nr ? max_row_idx : lhs_nr; - int new_nc = max_col_idx > lhs_nc ? max_col_idx : lhs_nc; - - lhs.resize (new_nr, new_nc, 0.0); - } - if (rhs_nr == 1 && rhs_nc == 1 && n > 0 && m > 0) { + MAYBE_RESIZE_LHS; + RT scalar = rhs.elem (0, 0); for (int j = 0; j < m; j++) @@ -405,6 +412,8 @@ } else if (n == rhs_nr && m == rhs_nc) { + MAYBE_RESIZE_LHS; + for (int j = 0; j < m; j++) { int jj = idx_j.elem (j);
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +Fri Dec 13 02:01:32 1996 John W. Eaton <jwe@bevo.che.wisc.edu> + + * Array2-idx.h (assign): Delay resizing left hand side until we + know if the assignment conforms. + Tue Dec 10 01:43:09 1996 John W. Eaton <jwe@bevo.che.wisc.edu> * Version 2.0 released.
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +Fri Dec 13 02:38:19 1996 John W. Eaton <jwe@bevo.che.wisc.edu> + + * ov.cc (octave_value::convert_and_assign): Preserve lhs value if + assignment fails. + Wed Dec 11 12:33:16 1996 John W. Eaton <jwe@bevo.che.wisc.edu> * pt-plot.cc (GPLOT_CMD_END): Don't put semicolons at the end of
--- a/src/ov.cc +++ b/src/ov.cc @@ -590,18 +590,23 @@ if (tmp) { - if (tmp != rep) + octave_value *old_rep = rep; + rep = tmp; + rep->count = 1; + + assignment_ok = try_assignment (idx, rhs); + + if (! assignment_ok && old_rep) { if (--rep->count == 0) delete rep; - rep = tmp; - rep->count = 1; + rep = old_rep; + old_rep = 0; } - else - delete tmp; - assignment_ok = try_assignment (idx, rhs); + if (old_rep && --old_rep->count == 0) + delete old_rep; } else gripe_conversion_failed (type_name (), rhs.type_name ());