genericopenlibs/cppstdlib/stl/src/complex_io.cpp
changeset 31 ce057bb09d0b
parent 0 e4d67989cc36
equal deleted inserted replaced
30:e20de85af2ee 31:ce057bb09d0b
       
     1 /*
       
     2  * Copyright (c) 1999
       
     3  * Silicon Graphics Computer Systems, Inc.
       
     4  *
       
     5  * Copyright (c) 1999
       
     6  * Boris Fomitchev
       
     7  *
       
     8  * This material is provided "as is", with absolutely no warranty expressed
       
     9  * or implied. Any use is at your own risk.
       
    10  *
       
    11  * Permission to use or copy this software for any purpose is hereby granted
       
    12  * without fee, provided the above notices are retained on all copies.
       
    13  * Permission to modify the code and to distribute modified code is granted,
       
    14  * provided the above notices are retained, and a notice that the code was
       
    15  * modified is included with the above copyright notice.
       
    16  *
       
    17  */
       
    18 
       
    19 #include "stlport_prefix.h"
       
    20 
       
    21 #include <complex>
       
    22 #include <istream>
       
    23 
       
    24 _STLP_BEGIN_NAMESPACE
       
    25 
       
    26 #if !(defined (_STLP_MSVC) && _STLP_MSVC < 1200)
       
    27 
       
    28 // Specializations for narrow characters; lets us avoid the nuisance of
       
    29 // widening.
       
    30 _STLP_OPERATOR_SPEC
       
    31 basic_ostream<char, char_traits<char> >& _STLP_CALL
       
    32 operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<float>& __z)
       
    33 { return __os << '(' << (double)__z.real() << ',' << (double)__z.imag() << ')'; }
       
    34 
       
    35 _STLP_OPERATOR_SPEC
       
    36 basic_ostream<char, char_traits<char> >& _STLP_CALL
       
    37 operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<double>& __z)
       
    38 { return __os << '(' << __z.real() << ',' << __z.imag() << ')'; }
       
    39 
       
    40 #  ifndef _STLP_NO_LONG_DOUBLE
       
    41 _STLP_OPERATOR_SPEC
       
    42 basic_ostream<char, char_traits<char> >& _STLP_CALL
       
    43 operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<long double>& __z)
       
    44 { return __os << '(' << __z.real() << ',' << __z.imag() << ')'; }
       
    45 #  endif
       
    46 
       
    47 // Specialization for narrow characters; lets us avoid widen.
       
    48 _STLP_OPERATOR_SPEC
       
    49 basic_istream<char, char_traits<char> >& _STLP_CALL
       
    50 operator>>(basic_istream<char, char_traits<char> >& __is, complex<float>& __z) {
       
    51   float  __re = 0;
       
    52   float  __im = 0;
       
    53 
       
    54   char __c;
       
    55 
       
    56   __is >> __c;
       
    57   if (__c == '(') {
       
    58     __is >> __re >> __c;
       
    59     if (__c == ',')
       
    60       __is >> __im >> __c;
       
    61     if (__c != ')')
       
    62       __is.setstate(ios_base::failbit);
       
    63   }
       
    64   else {
       
    65     __is.putback(__c);
       
    66     __is >> __re;
       
    67   }
       
    68 
       
    69   if (__is)
       
    70     __z = complex<float>(__re, __im);
       
    71   return __is;
       
    72 }
       
    73 
       
    74 _STLP_OPERATOR_SPEC
       
    75 basic_istream<char, char_traits<char> >& _STLP_CALL
       
    76 operator>>(basic_istream<char, char_traits<char> >& __is, complex<double>& __z) {
       
    77   double  __re = 0;
       
    78   double  __im = 0;
       
    79 
       
    80   char __c;
       
    81 
       
    82   __is >> __c;
       
    83   if (__c == '(') {
       
    84     __is >> __re >> __c;
       
    85     if (__c == ',')
       
    86       __is >> __im >> __c;
       
    87     if (__c != ')')
       
    88       __is.setstate(ios_base::failbit);
       
    89   }
       
    90   else {
       
    91     __is.putback(__c);
       
    92     __is >> __re;
       
    93   }
       
    94 
       
    95   if (__is)
       
    96     __z = complex<double>(__re, __im);
       
    97   return __is;
       
    98 }
       
    99 
       
   100 #  ifndef _STLP_NO_LONG_DOUBLE
       
   101 _STLP_OPERATOR_SPEC
       
   102 basic_istream<char, char_traits<char> >& _STLP_CALL
       
   103 operator>>(basic_istream<char, char_traits<char> >& __is, complex<long double>& __z) {
       
   104   long double  __re = 0;
       
   105   long double  __im = 0;
       
   106 
       
   107   char __c;
       
   108 
       
   109   __is >> __c;
       
   110   if (__c == '(') {
       
   111     __is >> __re >> __c;
       
   112     if (__c == ',')
       
   113       __is >> __im >> __c;
       
   114     if (__c != ')')
       
   115       __is.setstate(ios_base::failbit);
       
   116   }
       
   117   else {
       
   118     __is.putback(__c);
       
   119     __is >> __re;
       
   120   }
       
   121 
       
   122   if (__is)
       
   123     __z = complex<long double>(__re, __im);
       
   124   return __is;
       
   125 }
       
   126 #  endif
       
   127 
       
   128 #endif /* MSVC */
       
   129 
       
   130 // Force instantiation of complex I/O functions
       
   131 #if !(defined (_STLP_NO_FORCE_INSTANTIATE) || defined (_STLP_NO_WCHAR_T))
       
   132 
       
   133 _STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
       
   134 operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&);
       
   135 
       
   136 _STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
       
   137 operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&);
       
   138 
       
   139 #ifndef _STLP_NO_LONG_DOUBLE
       
   140 _STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
       
   141 operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&);
       
   142 
       
   143 _STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
       
   144 operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&);
       
   145 #endif
       
   146 
       
   147 _STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
       
   148 operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&);
       
   149 
       
   150 _STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
       
   151 operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&);
       
   152 
       
   153 #endif /* _STLP_NO_WCHAR_T */
       
   154 
       
   155 _STLP_END_NAMESPACE
       
   156 
       
   157 
       
   158 // Local Variables:
       
   159 // mode:C++
       
   160 // End:
       
   161