From help-octave-request at bevo dot che dot wisc dot edu Wed Dec 5 12:47:29 2001 Subject: "-mat-binary" (was : Re: Is it possible to save structs?) From: "John W. Eaton" To: "E. Joshua Rigler" Cc: Help-Octave Date: Wed, 5 Dec 2001 12:46:49 -0600 On 5-Dec-2001, E. Joshua Rigler wrote: | If this vector is in memory (it doesn't matter what it is called), I get | an error when trying to save all my variables to "-mat-binary". Just to | waste band-width, I've attached a summary of commands and output that | illustrate this problem. Is the "lag" vector returned from the | xcov/xcorr functions a strange data-type? This is just weird, but not | any kind of show-stopper. I use 2.1.34 under RH Linux 7.1. Please try the following patch. jwe 2001-12-05 John W. Eaton * load-save.cc (save_mat5_binary_element): Extract dimensions directly from tc. Handle ranges the same as real matrices. Index: load-save.cc =================================================================== RCS file: /usr/local/cvsroot/octave/src/load-save.cc,v retrieving revision 1.136 diff -u -r1.136 load-save.cc --- load-save.cc 27 Jun 2001 02:29:03 -0000 1.136 +++ load-save.cc 5 Dec 2001 18:45:28 -0000 at @ -4100,7 +4100,7 @@ flags |= mxCHAR_CLASS; else if (tc.is_real_scalar ()) flags |= mxDOUBLE_CLASS; - else if (tc.is_real_matrix ()) + else if (tc.is_real_matrix () || tc.is_range ()) flags |= mxDOUBLE_CLASS; else if (tc.is_complex_scalar ()) flags |= mxDOUBLE_CLASS; at @ -4118,34 +4118,19 @@ os.write ((char *)&junk, 4); // dimensions array subelement - { - if (tc.is_string ()) - { - charMatrix chm = tc.char_matrix_value (); - nr = tc.rows (); - nc = chm.cols (); - } - else if (tc.is_real_scalar () || tc.is_complex_scalar () || tc.is_map ()) - { - nr = nc = 1; - } - else if (tc.is_real_matrix ()) - { - Matrix m = tc.matrix_value (); - nr = m.rows (); - nc = m.columns (); - } - else if (tc.is_complex_matrix ()) - { - ComplexMatrix m = tc.complex_matrix_value (); - nr = m.rows (); - nc = m.columns (); - } - - write_mat5_tag (os, miINT32, 8); - os.write ((char *)&nr, 4); - os.write ((char *)&nc, 4); - } + if (tc.is_map ()) + { + nr = nc = 1; + } + else + { + nr = tc.rows (); + nc = tc.columns (); + } + + write_mat5_tag (os, miINT32, 8); + os.write ((char *)&nr, 4); + os.write ((char *)&nc, 4); // array name subelement { at @ -4191,7 +4176,7 @@ delete [] buf; } - else if (tc.is_real_scalar () || tc.is_real_matrix ()) + else if (tc.is_real_scalar () || tc.is_real_matrix () || tc.is_range ()) { Matrix m = tc.matrix_value (); ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------