Mercurial > hg > octave-lyh
diff src/oct-stream.cc @ 4303:e15a96673976
[project @ 2003-01-23 03:03:08 by jwe]
author | jwe |
---|---|
date | Thu, 23 Jan 2003 03:03:08 +0000 |
parents | 977f977fb2c3 |
children | 98e65d1728a1 |
line wrap: on
line diff
--- a/src/oct-stream.cc +++ b/src/oct-stream.cc @@ -2298,44 +2298,67 @@ if (val_cache) { - switch (elt->type) + if ((xisnan (val) || xisinf (val) + && (elt->type == 'd' + || elt->type == 'i' + || elt->type == 'c' + || elt->type == 'o' + || elt->type == 'x' + || elt->type == 'X' + || elt->type == 'u'))) + { + std::string tfmt = fmt; + + tfmt.replace (tfmt.rfind (elt->type), 1, 1, 's'); + + const char *tval = xisinf (val) + ? (val < 0 ? "-Inf" : "Inf") : "NaN"; + + retval += do_printf_conv (os, tfmt.c_str (), + nsa, sa_1, sa_2, tval); + } + else { - case 'd': case 'i': case 'c': - { - if (elt->modifier == 'l') - retval += do_printf_conv - (os, fmt, nsa, sa_1, sa_2, - static_cast<long int> (val)); - else - retval += do_printf_conv - (os, fmt, nsa, sa_1, sa_2, - static_cast<int> (val)); - } - break; - - case 'o': case 'x': case 'X': case 'u': - { - if (elt->modifier == 'l') - retval += do_printf_conv - (os, fmt, nsa, sa_1, sa_2, - static_cast<unsigned long int> (val)); - else - retval += do_printf_conv - (os, fmt, nsa, sa_1, sa_2, - static_cast<unsigned int> (val)); - } - break; - - case 'f': case 'e': case 'E': - case 'g': case 'G': - retval - += do_printf_conv (os, fmt, nsa, sa_1, sa_2, val); - break; - - default: - error ("fprintf: invalid format specifier"); - return -1; - break; + switch (elt->type) + { + case 'd': case 'i': case 'c': + { + if (elt->modifier == 'l') + retval += do_printf_conv + (os, fmt, nsa, sa_1, sa_2, + static_cast<long int> (val)); + else + retval += do_printf_conv + (os, fmt, nsa, sa_1, sa_2, + static_cast<int> (val)); + } + break; + + case 'o': case 'x': case 'X': case 'u': + { + if (elt->modifier == 'l') + retval += do_printf_conv + (os, fmt, nsa, sa_1, sa_2, + static_cast<unsigned long int> (val)); + else + retval += do_printf_conv + (os, fmt, nsa, sa_1, sa_2, + static_cast<unsigned int> (val)); + } + break; + + case 'f': case 'e': case 'E': + case 'g': case 'G': + retval + += do_printf_conv (os, fmt, nsa, sa_1, sa_2, + val); + break; + + default: + error ("fprintf: invalid format specifier"); + return -1; + break; + } } } else