111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Silicon Graphics Computer Systems, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_COMPLEX 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_INTERNAL_COMPLEX 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This header declares the template class complex, as described in 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// in the draft C++ standard. Single-precision complex numbers 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// are complex<float>, double-precision are complex<double>, and 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// quad precision are complex<long double>. 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Note that the template class complex is declared within namespace 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// std, as called for by the draft C++ standard. 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_CMATH 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_cmath.h> 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct complex { 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _Tp value_type; 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef complex<_Tp> _Self; 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Constructors, destructor, assignment operator. 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex() : _M_re(0), _M_im(0) {} 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(const value_type& __x) 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__x), _M_im(0) {} 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(const value_type& __x, const value_type& __y) 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__x), _M_im(__y) {} 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(const _Self& __z) 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const _Self& __z) { 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit complex(const complex<_Tp2>& __z) 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const complex<_Tp2>& __z) { 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_MEMBER_TEMPLATES */ 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Element access. 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type real() const { return _M_re; } 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type imag() const { return _M_im; } 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving one real argument. 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator= (const value_type& __x) { 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __x; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = 0; 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (const value_type& __x) { 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __x; 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (const value_type& __x) { 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __x; 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (const value_type& __x) { 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re *= __x; 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im *= __x; 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (const value_type& __x) { 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re /= __x; 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im /= __x; 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving two complex arguments. 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const value_type& __z1_r, const value_type& __z1_i, 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const value_type& __z2_r, const value_type& __z2_i, 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type& __res_r, value_type& __res_i); 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const value_type& __z1_r, 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const value_type& __z2_r, const value_type& __z2_i, 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type& __res_r, value_type& __res_i); 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) // && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> _Self& operator+= (const complex<_Tp2>& __z) { 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> _Self& operator-= (const complex<_Tp2>& __z) { 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> _Self& operator*= (const complex<_Tp2>& __z) { 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> _Self& operator/= (const complex<_Tp2>& __z) { 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r; 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i; 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_MEMBER_TEMPLATES */ 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (const _Self& __z) { 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (const _Self& __z) { 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (const _Self& __z) { 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (const _Self& __z) { 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r; 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i; 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Data members. 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_re; 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_im; 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Explicit specializations for float, double, long double. The only 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// reason for these specializations is to enable automatic conversions 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// from complex<float> to complex<double>, and complex<double> to 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// complex<long double>. 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _STLP_CLASS_DECLSPEC complex<float> { 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef float value_type; 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef complex<float> _Self; 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Constructors, destructor, assignment operator. 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(value_type __x = 0.0f, value_type __y = 0.0f) 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__x), _M_im(__y) {} 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(const complex<float>& __z) : _M_re(__z._M_re), _M_im(__z._M_im) {} 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline explicit complex(const complex<double>& __z); 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_NO_LONG_DOUBLE 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline explicit complex(const complex<long double>& __z); 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Element access. 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type real() const { return _M_re; } 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type imag() const { return _M_im; } 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving one real argument. 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator= (value_type __x) { 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __x; 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = 0.0f; 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (value_type __x) { 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __x; 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (value_type __x) { 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __x; 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (value_type __x) { 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re *= __x; 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im *= __x; 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (value_type __x) { 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re /= __x; 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im /= __x; 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving two complex arguments. 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const float& __z1_r, const float& __z1_i, 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const float& __z2_r, const float& __z2_i, 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float& __res_r, float& __res_i); 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const float& __z1_r, 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const float& __z2_r, const float& __z2_i, 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float& __res_r, float& __res_i); 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<float>& operator=(const complex<_Tp2>& __z) { 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<float>& operator+= (const complex<_Tp2>& __z) { 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<float>& operator-= (const complex<_Tp2>& __z) { 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<float>& operator*= (const complex<_Tp2>& __z) { 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float __r = _M_re * __z._M_re - _M_im * __z._M_im; 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float __i = _M_re * __z._M_im + _M_im * __z._M_re; 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<float>& operator/= (const complex<_Tp2>& __z) { 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float __r; 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float __i; 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_MEMBER_TEMPLATES */ 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const _Self& __z) { 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (const _Self& __z) { 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (const _Self& __z) { 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (const _Self& __z) { 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (const _Self& __z) { 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r; 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i; 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Data members. 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_re; 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_im; 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _STLP_CLASS_DECLSPEC complex<double> { 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef double value_type; 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef complex<double> _Self; 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Constructors, destructor, assignment operator. 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(value_type __x = 0.0, value_type __y = 0.0) 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__x), _M_im(__y) {} 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(const complex<double>& __z) 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline complex(const complex<float>& __z); 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_LONG_DOUBLE) 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit inline complex(const complex<long double>& __z); 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Element access. 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type real() const { return _M_re; } 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type imag() const { return _M_im; } 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving one real argument. 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator= (value_type __x) { 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __x; 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = 0.0; 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (value_type __x) { 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __x; 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (value_type __x) { 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __x; 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (value_type __x) { 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re *= __x; 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im *= __x; 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (value_type __x) { 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re /= __x; 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im /= __x; 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving two complex arguments. 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const double& __z1_r, const double& __z1_i, 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const double& __z2_r, const double& __z2_i, 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double& __res_r, double& __res_i); 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const double& __z1_r, 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const double& __z2_r, const double& __z2_i, 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double& __res_r, double& __res_i); 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<double>& operator=(const complex<_Tp2>& __z) { 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<double>& operator+= (const complex<_Tp2>& __z) { 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<double>& operator-= (const complex<_Tp2>& __z) { 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<double>& operator*= (const complex<_Tp2>& __z) { 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double __r = _M_re * __z._M_re - _M_im * __z._M_im; 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double __i = _M_re * __z._M_im + _M_im * __z._M_re; 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<double>& operator/= (const complex<_Tp2>& __z) { 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double __r; 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double __i; 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_MEMBER_TEMPLATES */ 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const _Self& __z) { 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (const _Self& __z) { 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (const _Self& __z) { 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (const _Self& __z) { 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (const _Self& __z) { 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r; 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i; 44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Data members. 45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_re; 45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_im; 45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_LONG_DOUBLE) 45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _STLP_CLASS_DECLSPEC complex<long double> { 45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef long double value_type; 46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef complex<long double> _Self; 46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Constructors, destructor, assignment operator. 46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(value_type __x = 0.0l, value_type __y = 0.0l) 46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__x), _M_im(__y) {} 46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex(const complex<long double>& __z) 46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline complex(const complex<float>& __z); 46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline complex(const complex<double>& __z); 47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Element access. 47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type real() const { return _M_re; } 47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type imag() const { return _M_im; } 47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving one real argument. 47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator= (value_type __x) { 47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __x; 47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = 0.0l; 48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (value_type __x) { 48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __x; 48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (value_type __x) { 48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __x; 48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (value_type __x) { 49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re *= __x; 49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im *= __x; 49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 49511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (value_type __x) { 49611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re /= __x; 49711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im /= __x; 49811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 49911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 50011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 50111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Arithmetic op= operations involving two complex arguments. 50211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 50311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const long double& __z1_r, const long double& __z1_i, 50411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const long double& __z2_r, const long double& __z2_i, 50511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert long double& __res_r, long double& __res_i); 50611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 50711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _div(const long double& __z1_r, 50811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const long double& __z2_r, const long double& __z2_i, 50911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert long double& __res_r, long double& __res_i); 51011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 51111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 51211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 51311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 51411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<long double>& operator=(const complex<_Tp2>& __z) { 51511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 51611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 51711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 51811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 51911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 52111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<long double>& operator+= (const complex<_Tp2>& __z) { 52211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 52311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 52411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 52511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 52611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 52811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<long double>& operator-= (const complex<_Tp2>& __z) { 52911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 53011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 53111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 53211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 53311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 53411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 53511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<long double>& operator*= (const complex<_Tp2>& __z) { 53611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert long double __r = _M_re * __z._M_re - _M_im * __z._M_im; 53711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert long double __i = _M_re * __z._M_im + _M_im * __z._M_re; 53811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 53911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 54011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 54111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 54211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Tp2> 54411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<long double>& operator/= (const complex<_Tp2>& __z) { 54511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert long double __r; 54611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert long double __i; 54711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 54811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 54911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 55011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 55111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 55211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif /* _STLP_MEMBER_TEMPLATES */ 55411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const _Self& __z) { 55611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __z._M_re; 55711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __z._M_im; 55811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 55911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 56011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator+= (const _Self& __z) { 56211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re += __z._M_re; 56311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im += __z._M_im; 56411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 56511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 56611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator-= (const _Self& __z) { 56811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re -= __z._M_re; 56911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im -= __z._M_im; 57011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 57111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 57211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator*= (const _Self& __z) { 57411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r = _M_re * __z._M_re - _M_im * __z._M_im; 57511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i = _M_re * __z._M_im + _M_im * __z._M_re; 57611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 57711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 57811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 57911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 58011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 58111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator/= (const _Self& __z) { 58211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __r; 58311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type __i; 58411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i); 58511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_re = __r; 58611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_im = __i; 58711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 58811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 58911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Data members. 59111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_re; 59211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert value_type _M_im; 59311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 59411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_NO_LONG_DOUBLE */ 59611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Converting constructors from one of these three specialized types 59811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// to another. 59911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 60011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<float>::complex(const complex<double>& __z) 60111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re((float)__z._M_re), _M_im((float)__z._M_im) {} 60211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<double>::complex(const complex<float>& __z) 60311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 60411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_NO_LONG_DOUBLE 60511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<float>::complex(const complex<long double>& __z) 60611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re((float)__z._M_re), _M_im((float)__z._M_im) {} 60711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<double>::complex(const complex<long double>& __z) 60811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re((double)__z._M_re), _M_im((double)__z._M_im) {} 60911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<long double>::complex(const complex<float>& __z) 61011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 61111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<long double>::complex(const complex<double>& __z) 61211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_re(__z._M_re), _M_im(__z._M_im) {} 61311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 61411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 61511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Unary non-member arithmetic operators. 61611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 61711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 61811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator+(const complex<_Tp>& __z) 61911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z; } 62011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 62111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 62211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator-(const complex<_Tp>& __z) 62311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(-__z._M_re, -__z._M_im); } 62411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 62511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Non-member arithmetic operations involving one real argument. 62611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 62711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 62811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator+(const _Tp& __x, const complex<_Tp>& __z) 62911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__x + __z._M_re, __z._M_im); } 63011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 63111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 63211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator+(const complex<_Tp>& __z, const _Tp& __x) 63311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z._M_re + __x, __z._M_im); } 63411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 63511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 63611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator-(const _Tp& __x, const complex<_Tp>& __z) 63711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__x - __z._M_re, -__z._M_im); } 63811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 63911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 64011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator-(const complex<_Tp>& __z, const _Tp& __x) 64111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z._M_re - __x, __z._M_im); } 64211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 64311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 64411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator*(const _Tp& __x, const complex<_Tp>& __z) 64511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__x * __z._M_re, __x * __z._M_im); } 64611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 64711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 64811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator*(const complex<_Tp>& __z, const _Tp& __x) 64911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z._M_re * __x, __z._M_im * __x); } 65011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 65111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 65211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator/(const _Tp& __x, const complex<_Tp>& __z) { 65311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<_Tp> __result; 65411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<_Tp>::_div(__x, 65511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __z._M_re, __z._M_im, 65611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __result._M_re, __result._M_im); 65711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return __result; 65811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 65911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 66011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 66111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL operator/(const complex<_Tp>& __z, const _Tp& __x) 66211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z._M_re / __x, __z._M_im / __x); } 66311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 66411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Non-member arithmetic operations involving two complex arguments 66511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 66611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 66711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL 66811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator+(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 66911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z1._M_re + __z2._M_re, __z1._M_im + __z2._M_im); } 67011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 67111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 67211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL 67311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator-(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 67411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z1._M_re - __z2._M_re, __z1._M_im - __z2._M_im); } 67511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 67611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 67711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL 67811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator*(const complex<_Tp>& __z1, const complex<_Tp>& __z2) { 67911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return complex<_Tp>(__z1._M_re * __z2._M_re - __z1._M_im * __z2._M_im, 68011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __z1._M_re * __z2._M_im + __z1._M_im * __z2._M_re); 68111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 68211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 68311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 68411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL 68511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator/(const complex<_Tp>& __z1, const complex<_Tp>& __z2) { 68611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<_Tp> __result; 68711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<_Tp>::_div(__z1._M_re, __z1._M_im, 68811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __z2._M_re, __z2._M_im, 68911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __result._M_re, __result._M_im); 69011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return __result; 69111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 69211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 69311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Comparison operators. 69411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 69511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 69611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL operator==(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 69711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z1._M_re == __z2._M_re && __z1._M_im == __z2._M_im; } 69811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 69911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 70011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL operator==(const complex<_Tp>& __z, const _Tp& __x) 70111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z._M_re == __x && __z._M_im == 0; } 70211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 70311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 70411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL operator==(const _Tp& __x, const complex<_Tp>& __z) 70511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __x == __z._M_re && 0 == __z._M_im; } 70611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 70711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//04/27/04 dums: removal of this check, if it is restablish 70811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//please explain why the other operators are not macro guarded 70911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//#ifdef _STLP_FUNCTION_TMPL_PARTIAL_ORDER 71011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 71111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 71211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL operator!=(const complex<_Tp>& __z1, const complex<_Tp>& __z2) 71311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z1._M_re != __z2._M_re || __z1._M_im != __z2._M_im; } 71411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 71511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//#endif /* _STLP_FUNCTION_TMPL_PARTIAL_ORDER */ 71611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 71711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 71811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL operator!=(const complex<_Tp>& __z, const _Tp& __x) 71911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z._M_re != __x || __z._M_im != 0; } 72011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 72111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 72211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL operator!=(const _Tp& __x, const complex<_Tp>& __z) 72311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __x != __z._M_re || 0 != __z._M_im; } 72411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 72511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Other basic arithmetic operations 72611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 72711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _Tp _STLP_CALL real(const complex<_Tp>& __z) 72811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z._M_re; } 72911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 73011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 73111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _Tp _STLP_CALL imag(const complex<_Tp>& __z) 73211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z._M_im; } 73311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 73411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 73511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Tp _STLP_CALL abs(const complex<_Tp>& __z); 73611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 73711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 73811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Tp _STLP_CALL arg(const complex<_Tp>& __z); 73911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 74011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 74111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _Tp _STLP_CALL norm(const complex<_Tp>& __z) 74211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __z._M_re * __z._M_re + __z._M_im * __z._M_im; } 74311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 74411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 74511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline complex<_Tp> _STLP_CALL conj(const complex<_Tp>& __z) 74611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__z._M_re, -__z._M_im); } 74711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 74811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 74911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcomplex<_Tp> _STLP_CALL polar(const _Tp& __rho) 75011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return complex<_Tp>(__rho, 0); } 75111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 75211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 75311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcomplex<_Tp> _STLP_CALL polar(const _Tp& __rho, const _Tp& __phi); 75411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 75511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 75611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC float _STLP_CALL abs(const complex<float>&); 75711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 75811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC double _STLP_CALL abs(const complex<double>&); 75911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 76011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC float _STLP_CALL arg(const complex<float>&); 76111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 76211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC double _STLP_CALL arg(const complex<double>&); 76311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 76411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL polar(const float& __rho, const float& __phi); 76511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 76611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL polar(const double& __rho, const double& __phi); 76711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 76811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 76911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Tp _STLP_CALL abs(const complex<_Tp>& __z) 77011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return _Tp(abs(complex<double>(double(__z.real()), double(__z.imag())))); } 77111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 77211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 77311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Tp _STLP_CALL arg(const complex<_Tp>& __z) 77411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return _Tp(arg(complex<double>(double(__z.real()), double(__z.imag())))); } 77511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 77611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 77711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcomplex<_Tp> _STLP_CALL polar(const _Tp& __rho, const _Tp& __phi) { 77811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert complex<double> __tmp = polar(double(__rho), double(__phi)); 77911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return complex<_Tp>(_Tp(__tmp.real()), _Tp(__tmp.imag())); 78011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 78111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 78211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_LONG_DOUBLE) 78311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 78411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC long double _STLP_CALL arg(const complex<long double>&); 78511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 78611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC long double _STLP_CALL abs(const complex<long double>&); 78711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 78811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL polar(const long double&, const long double&); 78911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 79011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 79111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 79211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_USE_NO_IOSTREAMS) 79311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 79411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 79511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 79611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# ifndef _STLP_INTERNAL_IOSFWD 79711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_iosfwd.h> 79811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 79911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 80011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 80111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 80211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Complex output, in the form (re,im). We use a two-step process 80311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// involving stringstream so that we get the padding right. 80411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, class _CharT, class _Traits> 80511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbasic_ostream<_CharT, _Traits>& _STLP_CALL 80611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __z); 80711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 80811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, class _CharT, class _Traits> 80911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbasic_istream<_CharT, _Traits>& _STLP_CALL 81011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __z); 81111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 81211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Specializations for narrow characters; lets us avoid widen. 81311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 81411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_OPERATOR_TEMPLATE 81511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL 81611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<char, char_traits<char> >& __is, complex<float>& __z); 81711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 81811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_OPERATOR_TEMPLATE 81911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL 82011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<char, char_traits<char> >& __is, complex<double>& __z); 82111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 82211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_OPERATOR_TEMPLATE 82311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL 82411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<float>& __z); 82511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 82611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_OPERATOR_TEMPLATE 82711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL 82811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<double>& __z); 82911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 83011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_NO_LONG_DOUBLE) 83111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_OPERATOR_TEMPLATE 83211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL 83311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<char, char_traits<char> >& __is, complex<long double>& __z); 83411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 83511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_OPERATOR_TEMPLATE 83611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL 83711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<long double>& __z); 83811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 83911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 84011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 84111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_USE_TEMPLATE_EXPORT) && ! defined (_STLP_NO_WCHAR_T) 84211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 84311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 84411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&); 84511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 84611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&); 84711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 84811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&); 84911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 85011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&); 85111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 85211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_NO_LONG_DOUBLE) 85311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 85411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&); 85511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL 85611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&); 85711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 85811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 85911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 86011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Transcendental functions. These are defined only for float, 86311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// double, and long double. (Sqrt isn't transcendental, of course, 86411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// but it's included in this section anyway.) 86511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL sqrt(const complex<float>&); 86711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL exp(const complex<float>&); 86911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL log(const complex<float>&); 87011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL log10(const complex<float>&); 87111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 87211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, int); 87311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, const float&); 87411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL pow(const float&, const complex<float>&); 87511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, const complex<float>&); 87611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 87711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL sin(const complex<float>&); 87811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL cos(const complex<float>&); 87911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL tan(const complex<float>&); 88011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 88111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL sinh(const complex<float>&); 88211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL cosh(const complex<float>&); 88311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<float> _STLP_CALL tanh(const complex<float>&); 88411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 88511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL sqrt(const complex<double>&); 88611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 88711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL exp(const complex<double>&); 88811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL log(const complex<double>&); 88911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL log10(const complex<double>&); 89011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 89111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, int); 89211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, const double&); 89311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL pow(const double&, const complex<double>&); 89411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, const complex<double>&); 89511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 89611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL sin(const complex<double>&); 89711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL cos(const complex<double>&); 89811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL tan(const complex<double>&); 89911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 90011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL sinh(const complex<double>&); 90111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL cosh(const complex<double>&); 90211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<double> _STLP_CALL tanh(const complex<double>&); 90311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 90411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_LONG_DOUBLE) 90511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL sqrt(const complex<long double>&); 90611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL exp(const complex<long double>&); 90711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL log(const complex<long double>&); 90811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL log10(const complex<long double>&); 90911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 91011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, int); 91111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, const long double&); 91211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const long double&, const complex<long double>&); 91311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, 91411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const complex<long double>&); 91511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 91611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL sin(const complex<long double>&); 91711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL cos(const complex<long double>&); 91811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL tan(const complex<long double>&); 91911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 92011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL sinh(const complex<long double>&); 92111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL cosh(const complex<long double>&); 92211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_DECLSPEC complex<long double> _STLP_CALL tanh(const complex<long double>&); 92311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 92411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 92511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 92611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 92711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_LINK_TIME_INSTANTIATION 92811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_complex.c> 92911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 93011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 93111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 93211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 93311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables: 93411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++ 93511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End: 936