Mercurial > hg > octave-lyh
diff src/oct-stream.cc @ 4420:3dfdbcaf4582
[project @ 2003-05-28 18:24:42 by jwe]
author | jwe |
---|---|
date | Wed, 28 May 2003 18:24:42 +0000 |
parents | 1cae4472c624 |
children | 82f8aae8cf20 |
line wrap: on
line diff
--- a/src/oct-stream.cc +++ b/src/oct-stream.cc @@ -1341,15 +1341,24 @@ { \ max_size *= 2; \ \ - if (nr > 0) \ - mval.resize (nr, max_size / nr, 0.0); \ - else \ + if (all_char_conv) \ { \ - if (all_char_conv && one_elt_size_spec) \ + if (one_elt_size_spec) \ mval.resize (1, max_size, 0.0); \ + else if (nr > 0) \ + mval.resize (nr, max_size / nr, 0.0); \ else \ - mval.resize (max_size, 1, 0.0); \ + panic_impossible (); \ } \ + else if (nr > 0) \ + { \ + if (nc <= 0) \ + mval.resize (nr, max_size / nr, 0.0); \ + else \ + panic_impossible (); \ + } \ + else \ + mval.resize (max_size, 1, 0.0); \ \ data = mval.fortran_vec (); \ } \ @@ -1396,46 +1405,59 @@ if (all_char_conv) { + // Any of these could be resized later (if we have %s + // conversions, we may read more than one element for each + // conversion). + if (one_elt_size_spec) { max_size = 512; mval.resize (1, max_size, 0.0); - data = mval.fortran_vec (); if (nr > 0) max_conv = nr; } - else if (nr > 0 && nc > 0) + else if (nr > 0) { - mval.resize (nr, nc, 0.0); - data = mval.fortran_vec (); - max_size = max_conv = nr * nc; + if (nc > 0) + { + mval.resize (nr, nc, 0.0); + max_size = max_conv = nr * nc; + } + else + { + mval.resize (nr, 32, 0.0); + max_size = nr * 32; + } } + else + panic_impossible (); } else if (nr > 0) { if (nc > 0) { + // Will not resize later. mval.resize (nr, nc, 0.0); - data = mval.fortran_vec (); max_size = nr * nc; - max_conv = max_size; } else { + // Maybe resize later. mval.resize (nr, 32, 0.0); - data = mval.fortran_vec (); max_size = nr * 32; } } else { + // Maybe resize later. mval.resize (32, 1, 0.0); - data = mval.fortran_vec (); max_size = 32; } + data = mval.fortran_vec (); + if (isp) { std::istream& is = *isp; @@ -1469,15 +1491,24 @@ { max_size *= 2; - if (nr > 0) - mval.resize (nr, max_size / nr, 0.0); - else + if (all_char_conv) { - if (all_char_conv && one_elt_size_spec) + if (one_elt_size_spec) mval.resize (1, max_size, 0.0); + else if (nr > 0) + mval.resize (nr, max_size / nr, 0.0); else - mval.resize (max_size, 1, 0.0); + panic_impossible (); } + else if (nr > 0) + { + if (nc <= 0) + mval.resize (nr, max_size / nr, 0.0); + else + panic_impossible (); + } + else + mval.resize (max_size, 1, 0.0); data = mval.fortran_vec (); }