msvcp90: Add complex_float << implementation

YongHao Hu christopherwuy at gmail.com
Fri Aug 15 05:18:36 CDT 2014


I tried to fix this problem and and the result is below.
-        basic_streambuf_char_sputc(base->strbuf, '(');
+//        basic_streambuf_char_sputc(base->strbuf, '(');
+        basic_ostream_char_print_ch(ostr, '(');
After this change, the problem is solve. And other cout format like 
setw() and setfill() tests are normal.
However, I am considering an issue now.
+//       basic_ostream_char_print_double(ostr, val->real);
          num_put_char_put_double(numput, &dest, dest, &base->base, 
basic_ios_char_fill_get(base), val->real);
+ //       basic_ostream_char_print_ch(ostr, ',');
          basic_streambuf_char_sputc(base->strbuf, ',');
+ //       basic_ostream_char_print_double(ostr, val->imag);
          num_put_char_put_double(numput, &dest, dest, &base->base, 
basic_ios_char_fill_get(base), val->imag);
+ //       basic_ostream_char_print_ch(ostr, ')');
          basic_streambuf_char_sputc(base->strbuf, ')');

I thought the difference between basic_ostream_char_print_xxx and 
num_put_char_put_xx is that
the former create and destroy sentry. There is no doubt that it will 
decrease the efficency.
On the other hand, my fix seems not so right.
Could you please give me some advice?
Thank you.


On Thursday, August 14, 2014 09:09 PM, Piotr Caban wrote:
> On 08/10/14 10:32, YongHao Hu wrote:
>> ---
>>    dlls/msvcp90/ios.c        |   28 ++++++++++++++++++++++++++++
>>    dlls/msvcp90/msvcp90.spec |    4 ++--
>>    2 files changed, 30 insertions(+), 2 deletions(-)
>>
>>
> This implementation is not behaving well in following case:
> complex<float> c = complex<float>(3.1, -0.5);
> cout.width(20);
> cout << c << endl;
> The width should affect whole complex value instead of first float.
>
> Cheers,
> Piotr
>




More information about the wine-devel mailing list