Mercurial > octave
diff liboctave/lo-utils.cc @ 9469:c6edba80dfae
sanity checks for loading sparse matrices
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 29 Jul 2009 12:15:27 -0400 |
parents | eb63fbe60fab |
children | ca93f583573d |
line wrap: on
line diff
--- a/liboctave/lo-utils.cc Wed Jul 29 07:22:05 2009 -0400 +++ b/liboctave/lo-utils.cc Wed Jul 29 12:15:27 2009 -0400 @@ -290,8 +290,9 @@ return d; } +template <> double -octave_read_double (std::istream& is) +octave_read_value (std::istream& is) { double d = 0.0; @@ -345,8 +346,9 @@ return d; } +template <> Complex -octave_read_complex (std::istream& is) +octave_read_value (std::istream& is) { double re = 0.0, im = 0.0; @@ -359,12 +361,12 @@ if (ch == '(') { - re = octave_read_double (is); + re = octave_read_value<double> (is); ch = is.get (); if (ch == ',') { - im = octave_read_double (is); + im = octave_read_value<double> (is); ch = is.get (); if (ch == ')') @@ -380,57 +382,13 @@ else { is.putback (ch); - cx = octave_read_double (is); + cx = octave_read_value<double> (is); } return cx; } -void -octave_write_double (std::ostream& os, double d) -{ - if (lo_ieee_is_NA (d)) - os << "NA"; - else if (lo_ieee_isnan (d)) - os << "NaN"; - else if (lo_ieee_isinf (d)) - os << (d < 0 ? "-Inf" : "Inf"); - else - os << d; -} - -void -octave_write_complex (std::ostream& os, const Complex& c) -{ - os << "("; - octave_write_double (os, real (c)); - os << ","; - octave_write_double (os, imag (c)); - os << ")"; -} - - - - - - - - - - - - - - - - - - - - - - static inline float read_float_inf_nan_na (std::istream& is, char c, char sign = '+') { @@ -480,8 +438,9 @@ return d; } +template <> float -octave_read_float (std::istream& is) +octave_read_value (std::istream& is) { float d = 0.0; @@ -535,8 +494,9 @@ return d; } +template <> FloatComplex -octave_read_float_complex (std::istream& is) +octave_read_value (std::istream& is) { float re = 0.0, im = 0.0; @@ -549,12 +509,12 @@ if (ch == '(') { - re = octave_read_float (is); + re = octave_read_value<float> (is); ch = is.get (); if (ch == ',') { - im = octave_read_float (is); + im = octave_read_value<float> (is); ch = is.get (); if (ch == ')') @@ -570,7 +530,7 @@ else { is.putback (ch); - cx = octave_read_float (is); + cx = octave_read_value<float> (is); } return cx; @@ -578,6 +538,29 @@ } void +octave_write_double (std::ostream& os, double d) +{ + if (lo_ieee_is_NA (d)) + os << "NA"; + else if (lo_ieee_isnan (d)) + os << "NaN"; + else if (lo_ieee_isinf (d)) + os << (d < 0 ? "-Inf" : "Inf"); + else + os << d; +} + +void +octave_write_complex (std::ostream& os, const Complex& c) +{ + os << "("; + octave_write_double (os, real (c)); + os << ","; + octave_write_double (os, imag (c)); + os << ")"; +} + +void octave_write_float (std::ostream& os, float d) { if (lo_ieee_is_NA (d))