⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _complex.h

📁 symbian 上的stl_port进过编译的。
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1999 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1999 * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */#ifndef _STLP_INTERNAL_COMPLEX#define _STLP_INTERNAL_COMPLEX// This header declares the template class complex, as described in// in the draft C++ standard.  Single-precision complex numbers// are complex<float>, double-precision are complex<double>, and// quad precision are complex<long double>.// Note that the template class complex is declared within namespace// std, as called for by the draft C++ standard.#ifndef _STLP_INTERNAL_CMATH#  include <stl/_cmath.h>#endif_STLP_BEGIN_NAMESPACE#if !defined (_STLP_NO_COMPLEX_SPECIALIZATIONS)    //*TY 02/25/2000 - added for MPW compiler workaroundtemplate <class _Tp> struct complex;_STLP_TEMPLATE_NULL struct complex<float>;_STLP_TEMPLATE_NULL struct complex<double>;#  if !defined (_STLP_NO_LONG_DOUBLE)_STLP_TEMPLATE_NULL struct complex<long double>;#  endif#endif /* _STLP_NO_COMPLEX_SPECIALIZATIONS */template <class _Tp>struct complex {  typedef _Tp value_type;  typedef complex<_Tp> _Self;  // Constructors, destructor, assignment operator.  complex() : _M_re(0), _M_im(0) {}  complex(const value_type& __x)    : _M_re(__x), _M_im(0) {}  complex(const value_type& __x, const value_type& __y)    : _M_re(__x), _M_im(__y) {}  complex(const _Self& __z)    : _M_re(__z._M_re), _M_im(__z._M_im) {}  _Self& operator=(const _Self& __z) {    _M_re = __z._M_re;    _M_im = __z._M_im;    return *this;  }#if defined (_STLP_MEMBER_TEMPLATES) && (defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) || defined(_STLP_NO_COMPLEX_SPECIALIZATIONS))  template <class _Tp2>  explicit complex(const complex<_Tp2>& __z)    : _M_re(__z._M_re), _M_im(__z._M_im) {}  template <class _Tp2>  _Self& operator=(const complex<_Tp2>& __z) {    _M_re = __z._M_re;    _M_im = __z._M_im;    return *this;  }#endif /* _STLP_MEMBER_TEMPLATES */  // Element access.  value_type real() const { return _M_re; }  value_type imag() const { return _M_im; }  // Arithmetic op= operations involving one real argument.  _Self& operator= (const value_type& __x) {    _M_re = __x;    _M_im = 0;    return *this;  }  _Self& operator+= (const value_type& __x) {    _M_re += __x;    return *this;  }  _Self& operator-= (const value_type& __x) {    _M_re -= __x;    return *this;  }  _Self& operator*= (const value_type& __x) {    _M_re *= __x;    _M_im *= __x;    return *this;  }  _Self& operator/= (const value_type& __x) {    _M_re /= __x;    _M_im /= __x;    return *this;  }  // Arithmetic op= operations involving two complex arguments.  static void  _STLP_CALL _div(const value_type& __z1_r, const value_type& __z1_i,                               const value_type& __z2_r, const value_type& __z2_i,                               value_type& __res_r, value_type& __res_i);  static void _STLP_CALL _div(const value_type& __z1_r,                              const value_type& __z2_r, const value_type& __z2_i,                              value_type& __res_r, value_type& __res_i);#if defined (_STLP_MEMBER_TEMPLATES) // && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)  template <class _Tp2> _Self& operator+= (const complex<_Tp2>& __z) {    _M_re += __z._M_re;    _M_im += __z._M_im;    return *this;  }  template <class _Tp2> _Self& operator-= (const complex<_Tp2>& __z) {    _M_re -= __z._M_re;    _M_im -= __z._M_im;    return *this;  }  template <class _Tp2> _Self& operator*= (const complex<_Tp2>& __z) {    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;    _M_re = __r;    _M_im = __i;    return *this;  }  template <class _Tp2> _Self& operator/= (const complex<_Tp2>& __z) {    value_type __r;    value_type __i;    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);    _M_re = __r;    _M_im = __i;    return *this;  }#endif /* _STLP_MEMBER_TEMPLATES */  _Self& operator+= (const _Self& __z) {    _M_re += __z._M_re;    _M_im += __z._M_im;    return *this;  }  _Self& operator-= (const _Self& __z) {    _M_re -= __z._M_re;    _M_im -= __z._M_im;    return *this;  }  _Self& operator*= (const _Self& __z) {    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;    _M_re = __r;    _M_im = __i;    return *this;  }  _Self& operator/= (const _Self& __z) {    value_type __r;    value_type __i;    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);    _M_re = __r;    _M_im = __i;    return *this;  }  // Data members.  value_type _M_re;  value_type _M_im;};#if !defined (_STLP_NO_COMPLEX_SPECIALIZATIONS)    //*TY 02/25/2000 - added for MPW compiler workaround// Explicit specializations for float, double, long double.  The only// reason for these specializations is to enable automatic conversions// from complex<float> to complex<double>, and complex<double> to// complex<long double>._STLP_TEMPLATE_NULLstruct _STLP_CLASS_DECLSPEC complex<float> {  typedef float value_type;  typedef complex<float> _Self;  // Constructors, destructor, assignment operator.  complex(value_type __x = 0.0f, value_type __y = 0.0f)    : _M_re(__x), _M_im(__y) {}  complex(const complex<float>& __z)    : _M_re(__z._M_re), _M_im(__z._M_im) {}  inline explicit complex(const complex<double>& __z);#  ifndef _STLP_NO_LONG_DOUBLE  inline explicit complex(const complex<long double>& __z);#  endif  // Element access.  value_type real() const { return _M_re; }  value_type imag() const { return _M_im; }  // Arithmetic op= operations involving one real argument.  _Self& operator= (value_type __x) {    _M_re = __x;    _M_im = 0.0f;    return *this;  }  _Self& operator+= (value_type __x) {    _M_re += __x;    return *this;  }  _Self& operator-= (value_type __x) {    _M_re -= __x;    return *this;  }  _Self& operator*= (value_type __x) {    _M_re *= __x;    _M_im *= __x;    return *this;  }  _Self& operator/= (value_type __x) {    _M_re /= __x;    _M_im /= __x;    return *this;  }  // Arithmetic op= operations involving two complex arguments.  static void _STLP_CALL _div(const float& __z1_r, const float& __z1_i,                              const float& __z2_r, const float& __z2_i,                              float& __res_r, float& __res_i);  static void _STLP_CALL _div(const float& __z1_r,                              const float& __z2_r, const float& __z2_i,                              float& __res_r, float& __res_i);#  if defined (_STLP_MEMBER_TEMPLATES)  template <class _Tp2>  complex<float>& operator=(const complex<_Tp2>& __z) {    _M_re = __z._M_re;    _M_im = __z._M_im;    return *this;  }  template <class _Tp2>  complex<float>& operator+= (const complex<_Tp2>& __z) {    _M_re += __z._M_re;    _M_im += __z._M_im;    return *this;  }  template <class _Tp2>  complex<float>& operator-= (const complex<_Tp2>& __z) {    _M_re -= __z._M_re;    _M_im -= __z._M_im;    return *this;  }  template <class _Tp2>  complex<float>& operator*= (const complex<_Tp2>& __z) {    float __r = _M_re * __z._M_re - _M_im * __z._M_im;    float __i = _M_re * __z._M_im + _M_im * __z._M_re;    _M_re = __r;    _M_im = __i;    return *this;  }  template <class _Tp2>  complex<float>& operator/= (const complex<_Tp2>& __z) {    float __r;    float __i;    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);    _M_re = __r;    _M_im = __i;    return *this;  }#  endif /* _STLP_MEMBER_TEMPLATES */  _Self& operator=(const _Self& __z) {    _M_re = __z._M_re;    _M_im = __z._M_im;    return *this;  }  _Self& operator+= (const _Self& __z) {    _M_re += __z._M_re;    _M_im += __z._M_im;    return *this;  }  _Self& operator-= (const _Self& __z) {    _M_re -= __z._M_re;    _M_im -= __z._M_im;    return *this;  }  _Self& operator*= (const _Self& __z) {    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;    _M_re = __r;    _M_im = __i;    return *this;  }  _Self& operator/= (const _Self& __z) {    value_type __r;    value_type __i;    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);    _M_re = __r;    _M_im = __i;    return *this;  }  // Data members.  value_type _M_re;  value_type _M_im;};_STLP_TEMPLATE_NULLstruct _STLP_CLASS_DECLSPEC complex<double> {  typedef double value_type;  typedef complex<double> _Self;  // Constructors, destructor, assignment operator.  complex(value_type __x = 0.0, value_type __y = 0.0)    : _M_re(__x), _M_im(__y) {}  complex(const complex<double>& __z)    : _M_re(__z._M_re), _M_im(__z._M_im) {}  inline complex(const complex<float>& __z);#  if !defined (_STLP_NO_LONG_DOUBLE)  explicit inline complex(const complex<long double>& __z);#  endif  // Element access.  value_type real() const { return _M_re; }  value_type imag() const { return _M_im; }  // Arithmetic op= operations involving one real argument.  _Self& operator= (value_type __x) {    _M_re = __x;    _M_im = 0.0;    return *this;  }  _Self& operator+= (value_type __x) {    _M_re += __x;    return *this;  }  _Self& operator-= (value_type __x) {    _M_re -= __x;    return *this;  }  _Self& operator*= (value_type __x) {    _M_re *= __x;    _M_im *= __x;    return *this;  }  _Self& operator/= (value_type __x) {    _M_re /= __x;    _M_im /= __x;    return *this;  }  // Arithmetic op= operations involving two complex arguments.  static void _STLP_CALL _div(const double& __z1_r, const double& __z1_i,                              const double& __z2_r, const double& __z2_i,                              double& __res_r, double& __res_i);  static void _STLP_CALL _div(const double& __z1_r,                              const double& __z2_r, const double& __z2_i,                              double& __res_r, double& __res_i);#  if defined (_STLP_MEMBER_TEMPLATES) && defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)  template <class _Tp2>  complex<double>& operator=(const complex<_Tp2>& __z) {    _M_re = __z._M_re;    _M_im = __z._M_im;    return *this;  }  template <class _Tp2>  complex<double>& operator+= (const complex<_Tp2>& __z) {    _M_re += __z._M_re;    _M_im += __z._M_im;    return *this;  }  template <class _Tp2>  complex<double>& operator-= (const complex<_Tp2>& __z) {    _M_re -= __z._M_re;    _M_im -= __z._M_im;    return *this;  }  template <class _Tp2>  complex<double>& operator*= (const complex<_Tp2>& __z) {    double __r = _M_re * __z._M_re - _M_im * __z._M_im;    double __i = _M_re * __z._M_im + _M_im * __z._M_re;    _M_re = __r;    _M_im = __i;    return *this;  }  template <class _Tp2>  complex<double>& operator/= (const complex<_Tp2>& __z) {    double __r;    double __i;    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);    _M_re = __r;    _M_im = __i;    return *this;  }#  endif /* _STLP_MEMBER_TEMPLATES */  _Self& operator=(const _Self& __z) {    _M_re = __z._M_re;    _M_im = __z._M_im;    return *this;  }  _Self& operator+= (const _Self& __z) {    _M_re += __z._M_re;    _M_im += __z._M_im;    return *this;  }  _Self& operator-= (const _Self& __z) {    _M_re -= __z._M_re;    _M_im -= __z._M_im;    return *this;  }  _Self& operator*= (const _Self& __z) {    value_type __r = _M_re * __z._M_re - _M_im * __z._M_im;    value_type __i = _M_re * __z._M_im + _M_im * __z._M_re;    _M_re = __r;    _M_im = __i;    return *this;  }  _Self& operator/= (const _Self& __z) {    value_type __r;    value_type __i;    _div(_M_re, _M_im, __z._M_re, __z._M_im, __r, __i);    _M_re = __r;    _M_im = __i;    return *this;  }  // Data members.  value_type _M_re;  value_type _M_im;};#  if !defined (_STLP_NO_LONG_DOUBLE)_STLP_TEMPLATE_NULLstruct _STLP_CLASS_DECLSPEC complex<long double> {  typedef long double value_type;  typedef complex<long double> _Self;  // Constructors, destructor, assignment operator.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -