177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_COMPLEX
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_COMPLEX
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// This header declares the template class complex, as described in
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// in the draft C++ standard.  Single-precision complex numbers
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// are complex<float>, double-precision are complex<double>, and
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// quad precision are complex<long double>.
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Note that the template class complex is declared within namespace
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// std, as called for by the draft C++ standard.
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_CMATH
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_cmath.h>
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct complex {
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _Tp value_type;
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef complex<_Tp> _Self;
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Constructors, destructor, assignment operator.
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex() : _M_re(0), _M_im(0) {}
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(const value_type& __x)
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__x), _M_im(0) {}
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(const value_type& __x, const value_type& __y)
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__x), _M_im(__y) {}
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(const _Self& __z)
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__z._M_re), _M_im(__z._M_im) {}
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __z) {
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit complex(const complex<_Tp2>& __z)
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__z._M_re), _M_im(__z._M_im) {}
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const complex<_Tp2>& __z) {
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_MEMBER_TEMPLATES */
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Element access.
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type real() const { return _M_re; }
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type imag() const { return _M_im; }
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving one real argument.
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator= (const value_type& __x) {
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __x;
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = 0;
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (const value_type& __x) {
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __x;
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (const value_type& __x) {
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __x;
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (const value_type& __x) {
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re *= __x;
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im *= __x;
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (const value_type& __x) {
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re /= __x;
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im /= __x;
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving two complex arguments.
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void  _STLP_CALL _div(const value_type& __z1_r, const value_type& __z1_i,
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const value_type& __z2_r, const value_type& __z2_i,
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               value_type& __res_r, value_type& __res_i);
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const value_type& __z1_r,
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const value_type& __z2_r, const value_type& __z2_i,
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              value_type& __res_r, value_type& __res_i);
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES) // && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2> _Self& operator+= (const complex<_Tp2>& __z) {
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2> _Self& operator-= (const complex<_Tp2>& __z) {
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2> _Self& operator*= (const complex<_Tp2>& __z) {
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2> _Self& operator/= (const complex<_Tp2>& __z) {
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r;
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i;
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_MEMBER_TEMPLATES */
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (const _Self& __z) {
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (const _Self& __z) {
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (const _Self& __z) {
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (const _Self& __z) {
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r;
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i;
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Data members.
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_re;
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_im;
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Explicit specializations for float, double, long double.  The only
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// reason for these specializations is to enable automatic conversions
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// from complex<float> to complex<double>, and complex<double> to
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// complex<long double>.
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _STLP_CLASS_DECLSPEC complex<float> {
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef float value_type;
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef complex<float> _Self;
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Constructors, destructor, assignment operator.
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(value_type __x = 0.0f, value_type __y = 0.0f)
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__x), _M_im(__y) {}
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(const complex<float>& __z)    : _M_re(__z._M_re), _M_im(__z._M_im) {}
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  inline explicit complex(const complex<double>& __z);
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_LONG_DOUBLE
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  inline explicit complex(const complex<long double>& __z);
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Element access.
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type real() const { return _M_re; }
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type imag() const { return _M_im; }
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving one real argument.
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator= (value_type __x) {
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __x;
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = 0.0f;
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (value_type __x) {
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __x;
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (value_type __x) {
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __x;
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (value_type __x) {
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re *= __x;
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im *= __x;
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (value_type __x) {
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re /= __x;
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im /= __x;
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving two complex arguments.
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const float& __z1_r, const float& __z1_i,
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const float& __z2_r, const float& __z2_i,
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              float& __res_r, float& __res_i);
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const float& __z1_r,
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const float& __z2_r, const float& __z2_i,
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              float& __res_r, float& __res_i);
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<float>& operator=(const complex<_Tp2>& __z) {
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<float>& operator+= (const complex<_Tp2>& __z) {
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<float>& operator-= (const complex<_Tp2>& __z) {
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<float>& operator*= (const complex<_Tp2>& __z) {
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    float __r = _M_re * __z._M_re - _M_im * __z._M_im;
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    float __i = _M_re * __z._M_im + _M_im * __z._M_re;
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<float>& operator/= (const complex<_Tp2>& __z) {
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    float __r;
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    float __i;
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_MEMBER_TEMPLATES */
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __z) {
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (const _Self& __z) {
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (const _Self& __z) {
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (const _Self& __z) {
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (const _Self& __z) {
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r;
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i;
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Data members.
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_re;
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_im;
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _STLP_CLASS_DECLSPEC complex<double> {
31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef double value_type;
32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef complex<double> _Self;
32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Constructors, destructor, assignment operator.
32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(value_type __x = 0.0, value_type __y = 0.0)
32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__x), _M_im(__y) {}
32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(const complex<double>& __z)
32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__z._M_re), _M_im(__z._M_im) {}
32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  inline complex(const complex<float>& __z);
33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_LONG_DOUBLE)
33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit inline complex(const complex<long double>& __z);
33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Element access.
33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type real() const { return _M_re; }
33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type imag() const { return _M_im; }
33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving one real argument.
33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator= (value_type __x) {
34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __x;
34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = 0.0;
34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (value_type __x) {
34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __x;
34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (value_type __x) {
34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __x;
35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (value_type __x) {
35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re *= __x;
35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im *= __x;
35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (value_type __x) {
35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re /= __x;
35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im /= __x;
36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving two complex arguments.
36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const double& __z1_r, const double& __z1_i,
36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const double& __z2_r, const double& __z2_i,
36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              double& __res_r, double& __res_i);
36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const double& __z1_r,
36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const double& __z2_r, const double& __z2_i,
37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              double& __res_r, double& __res_i);
37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<double>& operator=(const complex<_Tp2>& __z) {
37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<double>& operator+= (const complex<_Tp2>& __z) {
38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<double>& operator-= (const complex<_Tp2>& __z) {
38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<double>& operator*= (const complex<_Tp2>& __z) {
39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    double __r = _M_re * __z._M_re - _M_im * __z._M_im;
39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    double __i = _M_re * __z._M_im + _M_im * __z._M_re;
39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<double>& operator/= (const complex<_Tp2>& __z) {
40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    double __r;
40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    double __i;
40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_MEMBER_TEMPLATES */
41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __z) {
41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (const _Self& __z) {
42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (const _Self& __z) {
42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (const _Self& __z) {
43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;
43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;
43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (const _Self& __z) {
44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r;
44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i;
44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Data members.
45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_re;
45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_im;
45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_LONG_DOUBLE)
45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _STLP_CLASS_DECLSPEC complex<long double> {
45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef long double value_type;
46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef complex<long double> _Self;
46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Constructors, destructor, assignment operator.
46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(value_type __x = 0.0l, value_type __y = 0.0l)
46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__x), _M_im(__y) {}
46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex(const complex<long double>& __z)
46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_re(__z._M_re), _M_im(__z._M_im) {}
46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  inline complex(const complex<float>& __z);
46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  inline complex(const complex<double>& __z);
47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Element access.
47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type real() const { return _M_re; }
47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type imag() const { return _M_im; }
47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving one real argument.
47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator= (value_type __x) {
47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __x;
47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = 0.0l;
48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (value_type __x) {
48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __x;
48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (value_type __x) {
48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __x;
48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (value_type __x) {
49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re *= __x;
49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im *= __x;
49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (value_type __x) {
49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re /= __x;
49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im /= __x;
49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Arithmetic op= operations involving two complex arguments.
50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const long double& __z1_r, const long double& __z1_i,
50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const long double& __z2_r, const long double& __z2_i,
50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              long double& __res_r, long double& __res_i);
50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static void _STLP_CALL _div(const long double& __z1_r,
50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const long double& __z2_r, const long double& __z2_i,
50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              long double& __res_r, long double& __res_i);
51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<long double>& operator=(const complex<_Tp2>& __z) {
51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<long double>& operator+= (const complex<_Tp2>& __z) {
52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<long double>& operator-= (const complex<_Tp2>& __z) {
52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<long double>& operator*= (const complex<_Tp2>& __z) {
53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    long double __r = _M_re * __z._M_re - _M_im * __z._M_im;
53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    long double __i = _M_re * __z._M_im + _M_im * __z._M_re;
53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Tp2>
54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<long double>& operator/= (const complex<_Tp2>& __z) {
54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    long double __r;
54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    long double __i;
54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif /* _STLP_MEMBER_TEMPLATES */
55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __z) {
55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __z._M_re;
55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __z._M_im;
55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+= (const _Self& __z) {
56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re += __z._M_re;
56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im += __z._M_im;
56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator-= (const _Self& __z) {
56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re -= __z._M_re;
56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im -= __z._M_im;
57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator*= (const _Self& __z) {
57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;
57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;
57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator/= (const _Self& __z) {
58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __r;
58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    value_type __i;
58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);
58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_re = __r;
58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_im = __i;
58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Data members.
59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_re;
59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  value_type _M_im;
59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_NO_LONG_DOUBLE */
59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Converting constructors from one of these three specialized types
59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// to another.
59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<float>::complex(const complex<double>& __z)
60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : _M_re((float)__z._M_re), _M_im((float)__z._M_im) {}
60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<double>::complex(const complex<float>& __z)
60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : _M_re(__z._M_re), _M_im(__z._M_im) {}
60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_LONG_DOUBLE
60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<float>::complex(const complex<long double>& __z)
60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : _M_re((float)__z._M_re), _M_im((float)__z._M_im) {}
60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<double>::complex(const complex<long double>& __z)
60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : _M_re((double)__z._M_re), _M_im((double)__z._M_im) {}
60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<long double>::complex(const complex<float>& __z)
61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : _M_re(__z._M_re), _M_im(__z._M_im) {}
61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<long double>::complex(const complex<double>& __z)
61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : _M_re(__z._M_re), _M_im(__z._M_im) {}
61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Unary non-member arithmetic operators.
61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator+(const complex<_Tp>& __z)
61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z; }
62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL  operator-(const complex<_Tp>& __z)
62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(-__z._M_re, -__z._M_im); }
62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Non-member arithmetic operations involving one real argument.
62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator+(const _Tp& __x, const complex<_Tp>& __z)
62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__x + __z._M_re, __z._M_im); }
63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator+(const complex<_Tp>& __z, const _Tp& __x)
63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z._M_re + __x, __z._M_im); }
63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator-(const _Tp& __x, const complex<_Tp>& __z)
63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__x - __z._M_re, -__z._M_im); }
63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator-(const complex<_Tp>& __z, const _Tp& __x)
64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z._M_re - __x, __z._M_im); }
64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator*(const _Tp& __x, const complex<_Tp>& __z)
64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__x * __z._M_re, __x * __z._M_im); }
64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator*(const complex<_Tp>& __z, const _Tp& __x)
64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z._M_re * __x, __z._M_im * __x); }
65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator/(const _Tp& __x, const complex<_Tp>& __z) {
65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<_Tp> __result;
65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<_Tp>::_div(__x,
65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     __z._M_re, __z._M_im,
65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     __result._M_re, __result._M_im);
65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL operator/(const complex<_Tp>& __z, const _Tp& __x)
66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z._M_re / __x, __z._M_im / __x); }
66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Non-member arithmetic operations involving two complex arguments
66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL
66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator+(const complex<_Tp>& __z1, const complex<_Tp>& __z2)
66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z1._M_re + __z2._M_re, __z1._M_im + __z2._M_im); }
67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL
67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator-(const complex<_Tp>& __z1, const complex<_Tp>& __z2)
67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z1._M_re - __z2._M_re, __z1._M_im - __z2._M_im); }
67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL
67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator*(const complex<_Tp>& __z1, const complex<_Tp>& __z2) {
67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return complex<_Tp>(__z1._M_re * __z2._M_re - __z1._M_im * __z2._M_im,
68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      __z1._M_re * __z2._M_im + __z1._M_im * __z2._M_re);
68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL
68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator/(const complex<_Tp>& __z1, const complex<_Tp>& __z2) {
68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<_Tp> __result;
68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<_Tp>::_div(__z1._M_re, __z1._M_im,
68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     __z2._M_re, __z2._M_im,
68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     __result._M_re, __result._M_im);
69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Comparison operators.
69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL operator==(const complex<_Tp>& __z1, const complex<_Tp>& __z2)
69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z1._M_re == __z2._M_re && __z1._M_im == __z2._M_im; }
69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL operator==(const complex<_Tp>& __z, const _Tp& __x)
70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z._M_re == __x && __z._M_im == 0; }
70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL operator==(const _Tp& __x, const complex<_Tp>& __z)
70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __x == __z._M_re && 0 == __z._M_im; }
70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//04/27/04 dums: removal of this check, if it is restablish
70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//please explain why the other operators are not macro guarded
70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//#ifdef _STLP_FUNCTION_TMPL_PARTIAL_ORDER
71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL operator!=(const complex<_Tp>& __z1, const complex<_Tp>& __z2)
71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z1._M_re != __z2._M_re || __z1._M_im != __z2._M_im; }
71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//#endif /* _STLP_FUNCTION_TMPL_PARTIAL_ORDER */
71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL operator!=(const complex<_Tp>& __z, const _Tp& __x)
71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z._M_re != __x || __z._M_im != 0; }
72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL operator!=(const _Tp& __x, const complex<_Tp>& __z)
72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __x != __z._M_re || 0 != __z._M_im; }
72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Other basic arithmetic operations
72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Tp _STLP_CALL real(const complex<_Tp>& __z)
72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z._M_re; }
72977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
73077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
73177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Tp _STLP_CALL imag(const complex<_Tp>& __z)
73277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z._M_im; }
73377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
73477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
73577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_Tp _STLP_CALL abs(const complex<_Tp>& __z);
73677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
73777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
73877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_Tp _STLP_CALL arg(const complex<_Tp>& __z);
73977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
74077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
74177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Tp _STLP_CALL norm(const complex<_Tp>& __z)
74277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __z._M_re * __z._M_re + __z._M_im * __z._M_im; }
74377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
74477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
74577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline complex<_Tp> _STLP_CALL conj(const complex<_Tp>& __z)
74677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__z._M_re, -__z._M_im); }
74777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
74877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
74977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercomplex<_Tp> _STLP_CALL polar(const _Tp& __rho)
75077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return complex<_Tp>(__rho, 0); }
75177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
75277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
75377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercomplex<_Tp> _STLP_CALL polar(const _Tp& __rho, const _Tp& __phi);
75477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
75577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
75677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC float _STLP_CALL abs(const complex<float>&);
75777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
75877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC double _STLP_CALL abs(const complex<double>&);
75977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
76077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC float _STLP_CALL arg(const complex<float>&);
76177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
76277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC double _STLP_CALL arg(const complex<double>&);
76377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
76477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL polar(const float& __rho, const float& __phi);
76577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
76677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL polar(const double& __rho, const double& __phi);
76777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
76877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
76977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_Tp _STLP_CALL abs(const complex<_Tp>& __z)
77077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Tp(abs(complex<double>(double(__z.real()), double(__z.imag())))); }
77177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
77277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
77377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_Tp _STLP_CALL arg(const complex<_Tp>& __z)
77477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return _Tp(arg(complex<double>(double(__z.real()), double(__z.imag())))); }
77577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
77677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
77777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercomplex<_Tp> _STLP_CALL polar(const _Tp& __rho, const _Tp& __phi) {
77877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  complex<double> __tmp = polar(double(__rho), double(__phi));
77977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return complex<_Tp>(_Tp(__tmp.real()), _Tp(__tmp.imag()));
78077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
78177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
78277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_LONG_DOUBLE)
78377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
78477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC long double _STLP_CALL arg(const complex<long double>&);
78577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
78677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC long double _STLP_CALL abs(const complex<long double>&);
78777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
78877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL polar(const long double&, const long double&);
78977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
79077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
79177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
79277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_USE_NO_IOSTREAMS)
79377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
79477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
79577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
79677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  ifndef _STLP_INTERNAL_IOSFWD
79777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    include <stl/_iosfwd.h>
79877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
79977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
80077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
80177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
80277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Complex output, in the form (re,im).  We use a two-step process
80377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// involving stringstream so that we get the padding right.
80477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _CharT, class _Traits>
80577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ostream<_CharT, _Traits>&  _STLP_CALL
80677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __z);
80777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
80877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _CharT, class _Traits>
80977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_istream<_CharT, _Traits>& _STLP_CALL
81077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __z);
81177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
81277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Specializations for narrow characters; lets us avoid widen.
81377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
81477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_OPERATOR_TEMPLATE
81577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL
81677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<char, char_traits<char> >& __is, complex<float>& __z);
81777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
81877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_OPERATOR_TEMPLATE
81977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL
82077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<char, char_traits<char> >& __is, complex<double>& __z);
82177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
82277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_OPERATOR_TEMPLATE
82377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL
82477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<float>& __z);
82577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
82677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_OPERATOR_TEMPLATE
82777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL
82877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<double>& __z);
82977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
83077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (_STLP_NO_LONG_DOUBLE)
83177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_OPERATOR_TEMPLATE
83277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC basic_istream<char, char_traits<char> >& _STLP_CALL
83377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<char, char_traits<char> >& __is, complex<long double>& __z);
83477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
83577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_OPERATOR_TEMPLATE
83677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC basic_ostream<char, char_traits<char> >& _STLP_CALL
83777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<char, char_traits<char> >& __is, const complex<long double>& __z);
83877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
83977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
84077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
84177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_USE_TEMPLATE_EXPORT) && ! defined (_STLP_NO_WCHAR_T)
84277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
84377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL
84477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&);
84577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL
84677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&);
84777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL
84877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&);
84977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL
85077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&);
85177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
85277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    if !defined (_STLP_NO_LONG_DOUBLE)
85377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE basic_istream<wchar_t, char_traits<wchar_t> >& _STLP_CALL
85477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator>>(basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&);
85577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE basic_ostream<wchar_t, char_traits<wchar_t> >& _STLP_CALL
85677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneroperator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&);
85777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#    endif
85877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
85977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
86077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
86177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
86277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Transcendental functions.  These are defined only for float,
86377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//  double, and long double.  (Sqrt isn't transcendental, of course,
86477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//  but it's included in this section anyway.)
86577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
86677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL sqrt(const complex<float>&);
86777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
86877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL exp(const complex<float>&);
86977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL  log(const complex<float>&);
87077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL log10(const complex<float>&);
87177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
87277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, int);
87377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, const float&);
87477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL pow(const float&, const complex<float>&);
87577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL pow(const complex<float>&, const complex<float>&);
87677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
87777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL sin(const complex<float>&);
87877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL cos(const complex<float>&);
87977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL tan(const complex<float>&);
88077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
88177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL sinh(const complex<float>&);
88277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL cosh(const complex<float>&);
88377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<float> _STLP_CALL tanh(const complex<float>&);
88477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
88577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL sqrt(const complex<double>&);
88677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
88777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL exp(const complex<double>&);
88877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL log(const complex<double>&);
88977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL log10(const complex<double>&);
89077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
89177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, int);
89277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, const double&);
89377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL pow(const double&, const complex<double>&);
89477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL pow(const complex<double>&, const complex<double>&);
89577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
89677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL sin(const complex<double>&);
89777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL cos(const complex<double>&);
89877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL tan(const complex<double>&);
89977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
90077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL sinh(const complex<double>&);
90177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL cosh(const complex<double>&);
90277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<double> _STLP_CALL tanh(const complex<double>&);
90377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
90477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_LONG_DOUBLE)
90577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL sqrt(const complex<long double>&);
90677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL exp(const complex<long double>&);
90777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL log(const complex<long double>&);
90877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL log10(const complex<long double>&);
90977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
91077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, int);
91177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&, const long double&);
91277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const long double&, const complex<long double>&);
91377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL pow(const complex<long double>&,
91477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                   const complex<long double>&);
91577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
91677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL sin(const complex<long double>&);
91777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL cos(const complex<long double>&);
91877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL tan(const complex<long double>&);
91977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
92077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL sinh(const complex<long double>&);
92177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL cosh(const complex<long double>&);
92277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLSPEC complex<long double> _STLP_CALL tanh(const complex<long double>&);
92377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
92477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
92577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
92677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
92777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_LINK_TIME_INSTANTIATION
92877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_complex.c>
92977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
93077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
93177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
93277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
93377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
93477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
93577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
936