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
operator <<(basic_ostream<char,char_traits<char>> & __os,const complex<float> & __z)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
operator <<(basic_ostream<char,char_traits<char>> & __os,const complex<double> & __z)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
operator <<(basic_ostream<char,char_traits<char>> & __os,const complex<long double> & __z)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
operator >>(basic_istream<char,char_traits<char>> & __is,complex<float> & __z)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
operator >>(basic_istream<char,char_traits<char>> & __is,complex<double> & __z)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
operator >>(basic_istream<char,char_traits<char>> & __is,complex<long double> & __z)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
162