19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_COMPLEX 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_COMPLEX 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This header declares the template class complex, as described in 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// in the draft C++ standard. Single-precision complex numbers 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// are complex<float>, double-precision are complex<double>, and 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// quad precision are complex<long double>. 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Note that the template class complex is declared within namespace 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// std, as called for by the draft C++ standard. 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CMATH 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cmath.h> 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct complex { 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef complex<_Tp> _Self; 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Constructors, destructor, assignment operator. 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex() : _M_re(0), _M_im(0) {} 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(const value_type& __x) 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__x), _M_im(0) {} 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(const value_type& __x, const value_type& __y) 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__x), _M_im(__y) {} 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(const _Self& __z) 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __z) { 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit complex(const complex<_Tp2>& __z) 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const complex<_Tp2>& __z) { 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Element access. 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type real() const { return _M_re; } 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type imag() const { return _M_im; } 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving one real argument. 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator= (const value_type& __x) { 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __x; 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = 0; 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (const value_type& __x) { 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __x; 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (const value_type& __x) { 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __x; 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (const value_type& __x) { 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re *= __x; 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im *= __x; 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (const value_type& __x) { 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re /= __x; 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im /= __x; 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving two complex arguments. 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const value_type& __z1_r, const value_type& __z1_i, 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type& __z2_r, const value_type& __z2_i, 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type& __res_r, value_type& __res_i); 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const value_type& __z1_r, 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type& __z2_r, const value_type& __z2_i, 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type& __res_r, value_type& __res_i); 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) // && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> _Self& operator+= (const complex<_Tp2>& __z) { 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> _Self& operator-= (const complex<_Tp2>& __z) { 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> _Self& operator*= (const complex<_Tp2>& __z) { 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> _Self& operator/= (const complex<_Tp2>& __z) { 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r; 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i; 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (const _Self& __z) { 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (const _Self& __z) { 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (const _Self& __z) { 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (const _Self& __z) { 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r; 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i; 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Data members. 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_re; 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_im; 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Explicit specializations for float, double, long double. The only 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// reason for these specializations is to enable automatic conversions 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// from complex<float> to complex<double>, and complex<double> to 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// complex<long double>. 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STLP_CLASS_DECLSPEC complex<float> { 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef float value_type; 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef complex<float> _Self; 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Constructors, destructor, assignment operator. 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(value_type __x = 0.0f, value_type __y = 0.0f) 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__x), _M_im(__y) {} 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(const complex<float>& __z) : _M_re(__z._M_re), _M_im(__z._M_im) {} 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline explicit complex(const complex<double>& __z); 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_LONG_DOUBLE 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline explicit complex(const complex<long double>& __z); 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Element access. 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type real() const { return _M_re; } 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type imag() const { return _M_im; } 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving one real argument. 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator= (value_type __x) { 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __x; 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = 0.0f; 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (value_type __x) { 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __x; 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (value_type __x) { 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __x; 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (value_type __x) { 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re *= __x; 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im *= __x; 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (value_type __x) { 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re /= __x; 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im /= __x; 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving two complex arguments. 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const float& __z1_r, const float& __z1_i, 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const float& __z2_r, const float& __z2_i, 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block float& __res_r, float& __res_i); 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const float& __z1_r, 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const float& __z2_r, const float& __z2_i, 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block float& __res_r, float& __res_i); 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_MEMBER_TEMPLATES) 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<float>& operator=(const complex<_Tp2>& __z) { 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<float>& operator+= (const complex<_Tp2>& __z) { 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<float>& operator-= (const complex<_Tp2>& __z) { 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<float>& operator*= (const complex<_Tp2>& __z) { 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block float __r = _M_re * __z._M_re - _M_im * __z._M_im; 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block float __i = _M_re * __z._M_im + _M_im * __z._M_re; 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<float>& operator/= (const complex<_Tp2>& __z) { 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block float __r; 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block float __i; 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_MEMBER_TEMPLATES */ 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __z) { 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (const _Self& __z) { 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (const _Self& __z) { 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (const _Self& __z) { 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (const _Self& __z) { 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r; 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i; 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Data members. 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_re; 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_im; 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STLP_CLASS_DECLSPEC complex<double> { 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef double value_type; 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef complex<double> _Self; 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Constructors, destructor, assignment operator. 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(value_type __x = 0.0, value_type __y = 0.0) 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__x), _M_im(__y) {} 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(const complex<double>& __z) 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline complex(const complex<float>& __z); 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_LONG_DOUBLE) 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit inline complex(const complex<long double>& __z); 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Element access. 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type real() const { return _M_re; } 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type imag() const { return _M_im; } 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving one real argument. 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator= (value_type __x) { 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __x; 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = 0.0; 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (value_type __x) { 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __x; 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (value_type __x) { 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __x; 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (value_type __x) { 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re *= __x; 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im *= __x; 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (value_type __x) { 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re /= __x; 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im /= __x; 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving two complex arguments. 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const double& __z1_r, const double& __z1_i, 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const double& __z2_r, const double& __z2_i, 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double& __res_r, double& __res_i); 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const double& __z1_r, 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const double& __z2_r, const double& __z2_i, 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double& __res_r, double& __res_i); 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<double>& operator=(const complex<_Tp2>& __z) { 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<double>& operator+= (const complex<_Tp2>& __z) { 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<double>& operator-= (const complex<_Tp2>& __z) { 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<double>& operator*= (const complex<_Tp2>& __z) { 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double __r = _M_re * __z._M_re - _M_im * __z._M_im; 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double __i = _M_re * __z._M_im + _M_im * __z._M_re; 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<double>& operator/= (const complex<_Tp2>& __z) { 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double __r; 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double __i; 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_MEMBER_TEMPLATES */ 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __z) { 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (const _Self& __z) { 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (const _Self& __z) { 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (const _Self& __z) { 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (const _Self& __z) { 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r; 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i; 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Data members. 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_re; 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_im; 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_LONG_DOUBLE) 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STLP_CLASS_DECLSPEC complex<long double> { 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef long double value_type; 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef complex<long double> _Self; 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Constructors, destructor, assignment operator. 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(value_type __x = 0.0l, value_type __y = 0.0l) 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__x), _M_im(__y) {} 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex(const complex<long double>& __z) 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline complex(const complex<float>& __z); 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline complex(const complex<double>& __z); 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Element access. 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type real() const { return _M_re; } 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type imag() const { return _M_im; } 4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving one real argument. 4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator= (value_type __x) { 4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __x; 4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = 0.0l; 4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (value_type __x) { 4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __x; 4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (value_type __x) { 4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __x; 4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (value_type __x) { 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re *= __x; 4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im *= __x; 4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (value_type __x) { 4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re /= __x; 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im /= __x; 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Arithmetic op= operations involving two complex arguments. 5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const long double& __z1_r, const long double& __z1_i, 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const long double& __z2_r, const long double& __z2_i, 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long double& __res_r, long double& __res_i); 5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _div(const long double& __z1_r, 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const long double& __z2_r, const long double& __z2_i, 5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long double& __res_r, long double& __res_i); 5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<long double>& operator=(const complex<_Tp2>& __z) { 5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<long double>& operator+= (const complex<_Tp2>& __z) { 5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<long double>& operator-= (const complex<_Tp2>& __z) { 5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<long double>& operator*= (const complex<_Tp2>& __z) { 5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long double __r = _M_re * __z._M_re - _M_im * __z._M_im; 5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long double __i = _M_re * __z._M_im + _M_im * __z._M_re; 5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Tp2> 5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<long double>& operator/= (const complex<_Tp2>& __z) { 5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long double __r; 5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block long double __i; 5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif /* _STLP_MEMBER_TEMPLATES */ 5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __z) { 5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __z._M_re; 5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __z._M_im; 5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+= (const _Self& __z) { 5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re += __z._M_re; 5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im += __z._M_im; 5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-= (const _Self& __z) { 5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re -= __z._M_re; 5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im -= __z._M_im; 5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator*= (const _Self& __z) { 5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator/= (const _Self& __z) { 5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __r; 5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __i; 5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_re = __r; 5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_im = __i; 5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Data members. 5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_re; 5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type _M_im; 5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_NO_LONG_DOUBLE */ 5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Converting constructors from one of these three specialized types 5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// to another. 5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<float>::complex(const complex<double>& __z) 6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re((float)__z._M_re), _M_im((float)__z._M_im) {} 6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<double>::complex(const complex<float>& __z) 6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_LONG_DOUBLE 6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<float>::complex(const complex<long double>& __z) 6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re((float)__z._M_re), _M_im((float)__z._M_im) {} 6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<double>::complex(const complex<long double>& __z) 6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re((double)__z._M_re), _M_im((double)__z._M_im) {} 6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<long double>::complex(const complex<float>& __z) 6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<long double>::complex(const complex<double>& __z) 6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_re(__z._M_re), _M_im(__z._M_im) {} 613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Unary non-member arithmetic operators. 6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator+(const complex<_Tp>& __z) 6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z; } 6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator-(const complex<_Tp>& __z) 6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(-__z._M_re, -__z._M_im); } 6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Non-member arithmetic operations involving one real argument. 6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator+(const _Tp& __x, const complex<_Tp>& __z) 6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__x + __z._M_re, __z._M_im); } 6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator+(const complex<_Tp>& __z, const _Tp& __x) 6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z._M_re + __x, __z._M_im); } 6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator-(const _Tp& __x, const complex<_Tp>& __z) 6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__x - __z._M_re, -__z._M_im); } 6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator-(const complex<_Tp>& __z, const _Tp& __x) 6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z._M_re - __x, __z._M_im); } 6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator*(const _Tp& __x, const complex<_Tp>& __z) 6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__x * __z._M_re, __x * __z._M_im); } 6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator*(const complex<_Tp>& __z, const _Tp& __x) 6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z._M_re * __x, __z._M_im * __x); } 6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator/(const _Tp& __x, const complex<_Tp>& __z) { 6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<_Tp> __result; 6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<_Tp>::_div(__x, 6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __z._M_re, __z._M_im, 6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __result._M_re, __result._M_im); 6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL operator/(const complex<_Tp>& __z, const _Tp& __x) 6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z._M_re / __x, __z._M_im / __x); } 6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Non-member arithmetic operations involving two complex arguments 6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL 6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator+(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z1._M_re + __z2._M_re, __z1._M_im + __z2._M_im); } 6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL 6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator-(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z1._M_re - __z2._M_re, __z1._M_im - __z2._M_im); } 6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL 6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator*(const complex<_Tp>& __z1, const complex<_Tp>& __z2) { 6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return complex<_Tp>(__z1._M_re * __z2._M_re - __z1._M_im * __z2._M_im, 6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __z1._M_re * __z2._M_im + __z1._M_im * __z2._M_re); 6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL 6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator/(const complex<_Tp>& __z1, const complex<_Tp>& __z2) { 6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<_Tp> __result; 6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<_Tp>::_div(__z1._M_re, __z1._M_im, 6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __z2._M_re, __z2._M_im, 6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __result._M_re, __result._M_im); 6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Comparison operators. 6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL operator==(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z1._M_re == __z2._M_re && __z1._M_im == __z2._M_im; } 6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL operator==(const complex<_Tp>& __z, const _Tp& __x) 7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z._M_re == __x && __z._M_im == 0; } 7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL operator==(const _Tp& __x, const complex<_Tp>& __z) 7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __x == __z._M_re && 0 == __z._M_im; } 7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//04/27/04 dums: removal of this check, if it is restablish 7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//please explain why the other operators are not macro guarded 7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//#ifdef _STLP_FUNCTION_TMPL_PARTIAL_ORDER 7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL operator!=(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z1._M_re != __z2._M_re || __z1._M_im != __z2._M_im; } 7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//#endif /* _STLP_FUNCTION_TMPL_PARTIAL_ORDER */ 7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL operator!=(const complex<_Tp>& __z, const _Tp& __x) 7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z._M_re != __x || __z._M_im != 0; } 7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL operator!=(const _Tp& __x, const complex<_Tp>& __z) 7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __x != __z._M_re || 0 != __z._M_im; } 7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Other basic arithmetic operations 7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp _STLP_CALL real(const complex<_Tp>& __z) 7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z._M_re; } 7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp _STLP_CALL imag(const complex<_Tp>& __z) 7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z._M_im; } 7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Tp _STLP_CALL abs(const complex<_Tp>& __z); 7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Tp _STLP_CALL arg(const complex<_Tp>& __z); 7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp _STLP_CALL norm(const complex<_Tp>& __z) 7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __z._M_re * __z._M_re + __z._M_im * __z._M_im; } 7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline complex<_Tp> _STLP_CALL conj(const complex<_Tp>& __z) 7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__z._M_re, -__z._M_im); } 7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockcomplex<_Tp> _STLP_CALL polar(const _Tp& __rho) 7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return complex<_Tp>(__rho, 0); } 7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockcomplex<_Tp> _STLP_CALL polar(const _Tp& __rho, const _Tp& __phi); 7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC float _STLP_CALL abs(const complex<float>&); 7579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC double _STLP_CALL abs(const complex<double>&); 7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC float _STLP_CALL arg(const complex<float>&); 7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC double _STLP_CALL arg(const complex<double>&); 7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL polar(const float& __rho, const float& __phi); 7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL polar(const double& __rho, const double& __phi); 7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Tp _STLP_CALL abs(const complex<_Tp>& __z) 7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _Tp(abs(complex<double>(double(__z.real()), double(__z.imag())))); } 7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Tp _STLP_CALL arg(const complex<_Tp>& __z) 7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _Tp(arg(complex<double>(double(__z.real()), double(__z.imag())))); } 7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockcomplex<_Tp> _STLP_CALL polar(const _Tp& __rho, const _Tp& __phi) { 7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block complex<double> __tmp = polar(double(__rho), double(__phi)); 7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return complex<_Tp>(_Tp(__tmp.real()), _Tp(__tmp.imag())); 7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_LONG_DOUBLE) 7839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC long double _STLP_CALL arg(const complex<long double>&); 7859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC long double _STLP_CALL abs(const complex<long double>&); 7879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 7889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL polar(const long double&, const long double&); 7899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_USE_NO_IOSTREAMS) 7939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 7959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 796e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_INTERNAL_IOSFWD 797e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stl/_iosfwd.h> 798e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 7999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 8019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Complex output, in the form (re,im). We use a two-step process 8039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// involving stringstream so that we get the padding right. 8049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _CharT, class _Traits> 8059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ostream<_CharT, _Traits>& _STLP_CALL 8069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __z); 8079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _CharT, class _Traits> 8099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_istream<_CharT, _Traits>& _STLP_CALL 8109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __z); 8119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Specializations for narrow characters; lets us avoid widen. 8139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_OPERATOR_TEMPLATE 8159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL 8169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, char_traits<char> >& __is, complex<float>& __z); 8179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_OPERATOR_TEMPLATE 8199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL 8209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, char_traits<char> >& __is, complex<double>& __z); 8219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_OPERATOR_TEMPLATE 8239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL 8249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<float>& __z); 8259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_OPERATOR_TEMPLATE 8279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL 8289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<double>& __z); 8299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_LONG_DOUBLE) 8319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_OPERATOR_TEMPLATE 8329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL 8339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, char_traits<char> >& __is, complex<long double>& __z); 8349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_OPERATOR_TEMPLATE 8369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL 8379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<long double>& __z); 8389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 8409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_USE_TEMPLATE_EXPORT) && ! defined (_STLP_NO_WCHAR_T) 8429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 8449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&); 8459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 8469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&); 8479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 8489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&); 8499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 8509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&); 8519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_LONG_DOUBLE) 8539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 8549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&); 8559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 8569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&); 8579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 8589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 8599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 8609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Transcendental functions. These are defined only for float, 8639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// double, and long double. (Sqrt isn't transcendental, of course, 8649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// but it's included in this section anyway.) 8659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL sqrt(const complex<float>&); 8679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL exp(const complex<float>&); 8699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL log(const complex<float>&); 8709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL log10(const complex<float>&); 8719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, int); 8739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, const float&); 8749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL pow(const float&, const complex<float>&); 8759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, const complex<float>&); 8769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL sin(const complex<float>&); 8789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL cos(const complex<float>&); 8799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL tan(const complex<float>&); 8809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL sinh(const complex<float>&); 8829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL cosh(const complex<float>&); 8839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<float> _STLP_CALL tanh(const complex<float>&); 8849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL sqrt(const complex<double>&); 8869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL exp(const complex<double>&); 8889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL log(const complex<double>&); 8899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL log10(const complex<double>&); 8909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, int); 8929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, const double&); 8939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL pow(const double&, const complex<double>&); 8949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, const complex<double>&); 8959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL sin(const complex<double>&); 8979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL cos(const complex<double>&); 8989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL tan(const complex<double>&); 8999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL sinh(const complex<double>&); 9019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL cosh(const complex<double>&); 9029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<double> _STLP_CALL tanh(const complex<double>&); 9039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_LONG_DOUBLE) 9059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL sqrt(const complex<long double>&); 9069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL exp(const complex<long double>&); 9079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL log(const complex<long double>&); 9089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL log10(const complex<long double>&); 9099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, int); 9119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, const long double&); 9129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const long double&, const complex<long double>&); 9139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, 9149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const complex<long double>&); 9159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL sin(const complex<long double>&); 9179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL cos(const complex<long double>&); 9189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL tan(const complex<long double>&); 9199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL sinh(const complex<long double>&); 9219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL cosh(const complex<long double>&); 9229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC complex<long double> _STLP_CALL tanh(const complex<long double>&); 9239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 9249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 9269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_LINK_TIME_INSTANTIATION 9289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_complex.c> 9299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 9309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 9329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 9339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 9349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 9359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 936