Mercurial > octave
diff src/ov-re-mat.cc @ 4844:9f7ef92b50b0
[project @ 2004-04-02 17:26:53 by jwe]
author | jwe |
---|---|
date | Fri, 02 Apr 2004 17:26:54 +0000 |
parents | 81f78a2ff8a6 |
children | 35bfb4e0b96b |
line wrap: on
line diff
--- a/src/ov-re-mat.cc Fri Apr 02 14:54:20 2004 +0000 +++ b/src/ov-re-mat.cc Fri Apr 02 17:26:54 2004 +0000 @@ -186,66 +186,54 @@ octave_matrix::convert_to_str_internal (bool, bool) const { octave_value retval; + dim_vector dv = dims (); + int nel = dv.numel (); - int nr = matrix.rows (); - int nc = matrix.columns (); - - if (nr == 0 && nc == 0) + if (nel == 0) { char s = '\0'; retval = octave_value (&s); } else { - if (nr == 0 || nc == 0) - { - char s = '\0'; - retval = octave_value (&s); - } - else - { - charMatrix chm (nr, nc); + charNDArray chm (dv); - bool warned = false; + bool warned = false; + + for (int i = 0; i < nel; i++) + { + OCTAVE_QUIT; + + double d = matrix (i); - for (int j = 0; j < nc; j++) + if (xisnan (d)) { - for (int i = 0; i < nr; i++) + ::error ("invalid conversion from NaN to character"); + return retval; + } + else + { + int ival = NINT (d); + + if (ival < 0 || ival > UCHAR_MAX) { - OCTAVE_QUIT; + // XXX FIXME XXX -- is there something + // better we could do? - double d = matrix (i, j); + ival = 0; - if (xisnan (d)) + if (! warned) { - ::error ("invalid conversion from NaN to character"); - return retval; - } - else - { - int ival = NINT (d); - - if (ival < 0 || ival > UCHAR_MAX) - { - // XXX FIXME XXX -- is there something - // better we could do? - - ival = 0; - - if (! warned) - { - ::warning ("range error for conversion to character value"); - warned = true; - } - } - - chm (i, j) = static_cast<char> (ival); + ::warning ("range error for conversion to character value"); + warned = true; } } - } - retval = octave_value (chm, 1); + chm (i) = static_cast<char> (ival); + } } + + retval = octave_value (chm, 1); } return retval;