Mercurial > hg > octave-nkf
diff src/ov-str-mat.cc @ 5099:f7e39f977fe8
[project @ 2004-12-24 19:06:01 by jwe]
author | jwe |
---|---|
date | Fri, 24 Dec 2004 19:06:01 +0000 |
parents | 55f5b61d74b7 |
children | e35b034d3523 |
line wrap: on
line diff
--- a/src/ov-str-mat.cc +++ b/src/ov-str-mat.cc @@ -294,51 +294,55 @@ bool octave_char_matrix_str::load_ascii (std::istream& is) { - int mdims = 0; bool success = true; - std::streampos pos = is.tellg (); + + string_vector keywords(3); + + keywords[0] = "ndims"; + keywords[1] = "elements"; + keywords[2] = "length"; + + std::string kw; + int val = 0; - if (extract_keyword (is, "ndims", mdims, true)) + if (extract_keyword (is, keywords, kw, val, true)) { - if (mdims >= 0) + if (kw == "ndims") { - dim_vector dv; - dv.resize (mdims); + int mdims = val; + + if (mdims >= 0) + { + dim_vector dv; + dv.resize (mdims); - for (int i = 0; i < mdims; i++) - is >> dv(i); + for (int i = 0; i < mdims; i++) + is >> dv(i); - charNDArray tmp(dv); - char *ftmp = tmp.fortran_vec (); + charNDArray tmp(dv); + char *ftmp = tmp.fortran_vec (); + + // Skip the return line + if (! is.read (ftmp, 1)) + return false; - // Skip the return line - if (! is.read (ftmp, 1)) - return false; - - if (! is.read (ftmp, dv.numel ()) || !is) + if (! is.read (ftmp, dv.numel ()) || !is) + { + error ("load: failed to load string constant"); + success = false; + } + else + matrix = tmp; + } + else { - error ("load: failed to load string constant"); + error ("load: failed to extract matrix size"); success = false; } - else - matrix = tmp; } - else + else if (kw == "elements") { - error ("load: failed to extract matrix size"); - success = false; - } - } - else - { - int elements; - - // re-read the same line again - is.clear (); - is.seekg (pos); - - if (extract_keyword (is, "elements", elements, true)) - { + int elements = val; if (elements >= 0) { @@ -382,7 +386,6 @@ if (! error_state) matrix = chm; - } else { @@ -390,15 +393,11 @@ success = false; } } - else + else if (kw == "length") { - // re-read the same line again - is.clear (); - is.seekg (pos); - - int len; + int len = val; - if (extract_keyword (is, "length", len) && len >= 0) + if (len >= 0) { // This is cruft for backward compatiability, // but relatively harmless. @@ -420,6 +419,13 @@ } } } + else + panic_impossible (); + } + else + { + error ("load: failed to extract number of rows and columns"); + success = false; } return success;