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
29
basic_ostream<char, char_traits<char> >& _STLP_CALL
30
operator<< (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
34
basic_ostream<char, char_traits<char> >& _STLP_CALL
35
operator<< (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
40
basic_ostream<char, char_traits<char> >& _STLP_CALL
41
operator<< (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
47
basic_istream<char, char_traits<char> >& _STLP_CALL
48
operator>>(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
73
basic_istream<char, char_traits<char> >& _STLP_CALL
74
operator>>(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
100
basic_istream<char, char_traits<char> >& _STLP_CALL
101
operator>>(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
130
operator>>(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
133
operator>>(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
137
operator>>(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
140
operator<<(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
144
operator<<(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
147
operator<<(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: