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