os/ossrv/genericopenlibs/cppstdlib/stl/src/complex_io.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     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