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// Specializations for narrow characters; lets us avoid the nuisance of
27// widening.
28_STLP_OPERATOR_SPEC
29basic_ostream<char, char_traits<char> >& _STLP_CALL
30operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<float>& __z)
31{ return __os << '(' << (double)__z.real() << ',' << (double)__z.imag() << ')'; }
32
33_STLP_OPERATOR_SPEC
34basic_ostream<char, char_traits<char> >& _STLP_CALL
35operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<double>& __z)
36{ return __os << '(' << __z.real() << ',' << __z.imag() << ')'; }
37
38#ifndef _STLP_NO_LONG_DOUBLE
39_STLP_OPERATOR_SPEC
40basic_ostream<char, char_traits<char> >& _STLP_CALL
41operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<long double>& __z)
42{ return __os << '(' << __z.real() << ',' << __z.imag() << ')'; }
43#endif
44
45// Specialization for narrow characters; lets us avoid widen.
46_STLP_OPERATOR_SPEC
47basic_istream<char, char_traits<char> >& _STLP_CALL
48operator>>(basic_istream<char, char_traits<char> >& __is, complex<float>& __z) {
49  float  __re = 0;
50  float  __im = 0;
51
52  char __c;
53
54  __is >> __c;
55  if (__c == '(') {
56    __is >> __re >> __c;
57    if (__c == ',')
58      __is >> __im >> __c;
59    if (__c != ')')
60      __is.setstate(ios_base::failbit);
61  }
62  else {
63    __is.putback(__c);
64    __is >> __re;
65  }
66
67  if (__is)
68    __z = complex<float>(__re, __im);
69  return __is;
70}
71
72_STLP_OPERATOR_SPEC
73basic_istream<char, char_traits<char> >& _STLP_CALL
74operator>>(basic_istream<char, char_traits<char> >& __is, complex<double>& __z) {
75  double  __re = 0;
76  double  __im = 0;
77
78  char __c;
79
80  __is >> __c;
81  if (__c == '(') {
82    __is >> __re >> __c;
83    if (__c == ',')
84      __is >> __im >> __c;
85    if (__c != ')')
86      __is.setstate(ios_base::failbit);
87  }
88  else {
89    __is.putback(__c);
90    __is >> __re;
91  }
92
93  if (__is)
94    __z = complex<double>(__re, __im);
95  return __is;
96}
97
98#ifndef _STLP_NO_LONG_DOUBLE
99_STLP_OPERATOR_SPEC
100basic_istream<char, char_traits<char> >& _STLP_CALL
101operator>>(basic_istream<char, char_traits<char> >& __is, complex<long double>& __z) {
102  long double  __re = 0;
103  long double  __im = 0;
104
105  char __c;
106
107  __is >> __c;
108  if (__c == '(') {
109    __is >> __re >> __c;
110    if (__c == ',')
111      __is >> __im >> __c;
112    if (__c != ')')
113      __is.setstate(ios_base::failbit);
114  }
115  else {
116    __is.putback(__c);
117    __is >> __re;
118  }
119
120  if (__is)
121    __z = complex<long double>(__re, __im);
122  return __is;
123}
124#endif
125
126// Force instantiation of complex I/O functions
127#if !(defined (_STLP_NO_FORCE_INSTANTIATE) || defined (_STLP_NO_WCHAR_T))
128
129_STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
130operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&);
131
132_STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
133operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&);
134
135#ifndef _STLP_NO_LONG_DOUBLE
136_STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
137operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&);
138
139_STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
140operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&);
141#endif
142
143_STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
144operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&);
145
146_STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >&  _STLP_CALL
147operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&);
148
149#endif /* _STLP_NO_WCHAR_T */
150
151_STLP_END_NAMESPACE
152
153
154// Local Variables:
155// mode:C++
156// End:
157
158