Mercurial > hg > octave-lyh
diff src/load-save.cc @ 1572:0d9e10d10bd7
[project @ 1995-10-19 04:31:30 by jwe]
author | jwe |
---|---|
date | Thu, 19 Oct 1995 04:31:30 +0000 |
parents | 89c587478067 |
children | a38bd8df9d33 |
line wrap: on
line diff
--- a/src/load-save.cc +++ b/src/load-save.cc @@ -1365,7 +1365,11 @@ int elements; if (extract_keyword (is, "elements", elements) && elements > 0) { - Octave_str_obj s (elements); + // XXX FIXME XXX -- need to be able to get max length + // before doing anything. + + charMatrix chm (elements, 0); + int max_len = 0; for (int i = 0; i < elements; i++) { int len; @@ -1378,7 +1382,14 @@ break; } else - s.elem (i).assign (tmp, len); + { + if (len > max_len) + { + max_len = len; + chm.resize (elements, max_len, 0); + } + chm.insert (tmp, i, 0); + } delete [] tmp; } else @@ -1386,7 +1397,7 @@ } if (! error_state) - tc = s; + tc = chm; } else error ("load: failed to extract number of string elements"); @@ -1670,7 +1681,8 @@ goto data_read_error; if (swap) swap_4_bytes ((char *) &elements); - Octave_str_obj s (elements); + charMatrix chm (elements, 0); + int max_len = 0; for (int i = 0; i < elements; i++) { FOUR_BYTE_INT len; @@ -1684,10 +1696,15 @@ delete [] tmp; goto data_read_error; } - s.elem (i).assign (tmp, len); + if (len > max_len) + { + max_len = len; + chm.resize (elements, max_len, 0); + } + chm.insert (tmp, i, 0); delete [] tmp; } - tc = s; + tc = chm; } break; @@ -2492,13 +2509,14 @@ os.write (&tmp, 1); FOUR_BYTE_INT nr = tc.rows (); os.write (&nr, 4); - Octave_str_obj s = tc.all_strings (); + charMatrix chm = tc.all_strings (); for (int i = 0; i < nr; i++) { - FOUR_BYTE_INT len = s.elem (i).length (); + FOUR_BYTE_INT len = chm.cols (); os.write (&len, 4); - const char *tmp = s.elem (i).data (); + const char *tmp = chm.row_as_string (i); os.write (tmp, len); + delete [] tmp; } } else if (tc.is_range ()) @@ -2796,14 +2814,16 @@ else if (tc.is_string ()) { ascii_save_type (os, "string array", mark_as_global); - Octave_str_obj tmp = tc.all_strings (); - int elements = tmp.length (); + charMatrix chm = tc.all_strings (); + int elements = chm.rows (); os << "# elements: " << elements << "\n"; for (int i = 0; i < elements; i++) { - int len = tmp.elem (i).length (); + int len = chm.cols (); os << "# length: " << len << "\n"; - os.write (tmp.elem (i).data (), len); + char *tmp = chm.row_as_string (i); + os.write (tmp, len); + delete [] tmp; os << "\n"; } }