/* * Copyright (c) 1999 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1999 * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */ #include "stlport_prefix.h" #include <complex> #include <istream> _STLP_BEGIN_NAMESPACE // Specializations for narrow characters; lets us avoid the nuisance of // widening. _STLP_OPERATOR_SPEC basic_ostream<char, char_traits<char> >& _STLP_CALL operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<float>& __z) { return __os << '(' << (double)__z.real() << ',' << (double)__z.imag() << ')'; } _STLP_OPERATOR_SPEC basic_ostream<char, char_traits<char> >& _STLP_CALL operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<double>& __z) { return __os << '(' << __z.real() << ',' << __z.imag() << ')'; } #ifndef _STLP_NO_LONG_DOUBLE _STLP_OPERATOR_SPEC basic_ostream<char, char_traits<char> >& _STLP_CALL operator<< (basic_ostream<char, char_traits<char> >& __os, const complex<long double>& __z) { return __os << '(' << __z.real() << ',' << __z.imag() << ')'; } #endif // Specialization for narrow characters; lets us avoid widen. _STLP_OPERATOR_SPEC basic_istream<char, char_traits<char> >& _STLP_CALL operator>>(basic_istream<char, char_traits<char> >& __is, complex<float>& __z) { float __re = 0; float __im = 0; char __c; __is >> __c; if (__c == '(') { __is >> __re >> __c; if (__c == ',') __is >> __im >> __c; if (__c != ')') __is.setstate(ios_base::failbit); } else { __is.putback(__c); __is >> __re; } if (__is) __z = complex<float>(__re, __im); return __is; } _STLP_OPERATOR_SPEC basic_istream<char, char_traits<char> >& _STLP_CALL operator>>(basic_istream<char, char_traits<char> >& __is, complex<double>& __z) { double __re = 0; double __im = 0; char __c; __is >> __c; if (__c == '(') { __is >> __re >> __c; if (__c == ',') __is >> __im >> __c; if (__c != ')') __is.setstate(ios_base::failbit); } else { __is.putback(__c); __is >> __re; } if (__is) __z = complex<double>(__re, __im); return __is; } #ifndef _STLP_NO_LONG_DOUBLE _STLP_OPERATOR_SPEC basic_istream<char, char_traits<char> >& _STLP_CALL operator>>(basic_istream<char, char_traits<char> >& __is, complex<long double>& __z) { long double __re = 0; long double __im = 0; char __c; __is >> __c; if (__c == '(') { __is >> __re >> __c; if (__c == ',') __is >> __im >> __c; if (__c != ')') __is.setstate(ios_base::failbit); } else { __is.putback(__c); __is >> __re; } if (__is) __z = complex<long double>(__re, __im); return __is; } #endif // Force instantiation of complex I/O functions #if !(defined (_STLP_NO_FORCE_INSTANTIATE) || defined (_STLP_NO_WCHAR_T)) _STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&); _STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&); #ifndef _STLP_NO_LONG_DOUBLE _STLP_OPERATOR_SPEC basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL operator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&); _STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&); #endif _STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&); _STLP_OPERATOR_SPEC basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&); #endif /* _STLP_NO_WCHAR_T */ _STLP_END_NAMESPACE // Local Variables: // mode:C++ // End: