00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <bits/std_complex.h>
00031 #include <bits/std_istream.h>
00032 #include <bits/std_ostream.h>
00033 #include <bits/std_sstream.h>
00034
00035 namespace std
00036 {
00037
00038 template<typename _Tp, typename _CharT, class _Traits>
00039 basic_istream <_CharT, _Traits> &
00040 operator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __x)
00041 {
00042 #if !defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) && !defined(_GLIBCPP_BUGGY_COMPLEX)
00043 _Tp __re_x, __im_x;
00044 _CharT __ch;
00045 __is >> __ch;
00046 if (__ch == '(')
00047 {
00048 __is >> __re_x >> __ch;
00049 if (__ch == ',')
00050 {
00051 __is >> __im_x >> __ch;
00052 if (__ch == ')')
00053 {
00054 __x = complex<_Tp>(__re_x, __im_x);
00055 return __is;
00056 }
00057 }
00058 else if (__ch == ')')
00059 {
00060 __x = complex<_Tp>(__re_x, _Tp(0));
00061 return __is;
00062 }
00063 }
00064 else
00065 {
00066 __is.putback(__ch);
00067 __is >> __re_x;
00068 __x = complex<_Tp>(__re_x, _Tp(0));
00069 return __is;
00070 }
00071 __is.setstate(ios_base::failbit);
00072 #else
00073 __x = complex<_Tp>(_Tp(0), _Tp(0));
00074 #endif
00075 return __is;
00076 }
00077
00078 template<typename _Tp, typename _CharT, class _Traits>
00079 basic_ostream<_CharT, _Traits>&
00080 operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
00081 {
00082 basic_ostringstream<_CharT, _Traits> __s;
00083 __s.flags(__os.flags());
00084 __s.imbue(__os.getloc());
00085 __s.precision (__os.precision());
00086 __s << '(' << __x.real() << "," << __x.imag() << ')' << ends;
00087 return __os << __s.str();
00088 }
00089
00090
00091 template
00092 basic_istream<char, char_traits<char> >&
00093 operator>>(basic_istream<char, char_traits<char> >&, complex<float>&);
00094
00095 template
00096 basic_ostream<char, char_traits<char> >&
00097 operator<<(basic_ostream<char, char_traits<char> >&,
00098 const complex<float>&);
00099
00100 template
00101 basic_istream<char, char_traits<char> >&
00102 operator>>(basic_istream<char, char_traits<char> >&, complex<double>&);
00103
00104 template
00105 basic_ostream<char, char_traits<char> >&
00106 operator<<(basic_ostream<char, char_traits<char> >&,
00107 const complex<double>&);
00108
00109 template
00110 basic_istream<char, char_traits<char> >&
00111 operator>>(basic_istream<char, char_traits<char> >&,
00112 complex<long double>&);
00113
00114 template
00115 basic_ostream<char, char_traits<char> >&
00116 operator<<(basic_ostream<char, char_traits<char> >&,
00117 const complex<long double>&);
00118
00119 #ifdef _GLIBCPP_USE_WCHAR_T
00120 template
00121 basic_istream<wchar_t, char_traits<wchar_t> >&
00122 operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&,
00123 complex<float>&);
00124
00125 template
00126 basic_ostream<wchar_t, char_traits<wchar_t> >&
00127 operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,
00128 const complex<float>&);
00129
00130 template
00131 basic_istream<wchar_t, char_traits<wchar_t> >&
00132 operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&,
00133 complex<double>&);
00134
00135 template
00136 basic_ostream<wchar_t, char_traits<wchar_t> >&
00137 operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,
00138 const complex<double>&);
00139
00140 template
00141 basic_istream<wchar_t, char_traits<wchar_t> >&
00142 operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&,
00143 complex<long double>&);
00144
00145 template
00146 basic_ostream<wchar_t, char_traits<wchar_t> >&
00147 operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,
00148 const complex<long double>&);
00149 #endif //_GLIBCPP_USE_WCHAR_T
00150 }
00151