From c987141022dacc33ac01298c7a4cdd265e985f7d Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Thu, 2 Nov 2000 00:21:07 +0000 Subject: [PATCH] std_complex.h (complex<>): Remove (cos<>, cosh<>, exp<>, log<>, log<>, sin, sinh<>) friend declarations. * include/bits/std_complex.h (complex<>): Remove (cos<>, cosh<>, exp<>, log<>, log<>, sin, sinh<>) friend declarations. (cos, cosh, sin, sinh): Define primary templates. * src/complex.cc (cos<>, cosh<>, sin<>, sinh<>): Comment out definitions. From-SVN: r37197 --- libstdc++-v3/ChangeLog | 9 ++++ libstdc++-v3/include/bits/std_complex.h | 73 ++++++++++++++++++--------------- libstdc++-v3/src/complex.cc | 32 +++++++-------- 3 files changed, 65 insertions(+), 49 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c68a9eb..2967ba0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2000-11-02 Gabriel Dos Reis + + * include/bits/std_complex.h (complex<>): Remove (cos<>, cosh<>, + exp<>, log<>, log<>, sin, sinh<>) friend declarations. + (cos, cosh, sin, sinh): Define primary templates. + + * src/complex.cc (cos<>, cosh<>, sin<>, sinh<>): Comment out + definitions. + 2000-11-01 Benjamin Kosnik * bits/basic_file.h (_M_open_mode): Change signature, move diff --git a/libstdc++-v3/include/bits/std_complex.h b/libstdc++-v3/include/bits/std_complex.h index f82deb7..b2aaa4e 100644 --- a/libstdc++-v3/include/bits/std_complex.h +++ b/libstdc++-v3/include/bits/std_complex.h @@ -177,21 +177,11 @@ namespace std friend class complex; friend class complex; - // friend float abs<>(const complex&); - //friend complex conj<>(const complex&); - - friend complex cos<>(const complex&); - friend complex cosh<>(const complex&); - friend complex exp<>(const complex&); - friend complex log<>(const complex&); - friend complex log10<>(const complex&); friend complex pow<>(const complex&, int); friend complex pow<>(const complex&, const float&); friend complex pow<>(const complex&, const complex&); friend complex pow<>(const float&, const complex&); - friend complex sin<>(const complex&); - friend complex sinh<>(const complex&); friend complex sqrt<>(const complex&); friend complex tan<>(const complex&); friend complex tanh<>(const complex&); @@ -252,20 +242,11 @@ namespace std friend class complex; friend class complex; - // friend double abs<>(const complex&); - // friend complex conj<>(const complex&); - friend complex cos<>(const complex&); - friend complex cosh<>(const complex&); - friend complex exp<>(const complex&); - friend complex log<>(const complex&); - friend complex log10<>(const complex&); friend complex pow<>(const complex&, int); friend complex pow<>(const complex&, const double&); friend complex pow<>(const complex&, const complex&); friend complex pow<>(const double&, const complex&); - friend complex sin<>(const complex&); - friend complex sinh<>(const complex&); friend complex sqrt<>(const complex&); friend complex tan<>(const complex&); friend complex tanh<>(const complex&); @@ -327,13 +308,6 @@ namespace std friend class complex; friend class complex; - // friend long double abs<>(const complex&); - //friend complex conj<>(const complex&); - friend complex cos<>(const complex&); - friend complex cosh<>(const complex&); - friend complex exp<>(const complex&); - friend complex log<>(const complex&); - friend complex log10<>(const complex&); friend complex pow<>(const complex&, int); friend complex pow<>(const complex&, const long double&); @@ -341,8 +315,6 @@ namespace std const complex&); friend complex pow<>(const long double&, const complex&); - friend complex sin<>(const complex&); - friend complex sinh<>(const complex&); friend complex sqrt<>(const complex&); friend complex tan<>(const complex&); friend complex tanh<>(const complex&); @@ -776,7 +748,7 @@ namespace std complex<_Tp>& complex<_Tp>::operator*=(const complex<_Up>& __z) { - _Tp __r = _M_real * __z.real() - _M_imag * __z.imag(); + const _Tp __r = _M_real * __z.real() - _M_imag * __z.imag(); _M_imag = _M_real * __z.imag() + _M_imag * __z.real(); _M_real = __r; return *this; @@ -789,8 +761,8 @@ namespace std complex<_Tp>& complex<_Tp>::operator/=(const complex<_Up>& __z) { - _Tp __r = _M_real * __z.real() + _M_imag * __z.imag(); - _Tp __n = norm(__z); + const _Tp __r = _M_real * __z.real() + _M_imag * __z.imag(); + const _Tp __n = norm(__z); _M_imag = (_M_real * __z.imag() - _M_imag * __z.real()) / __n; _M_real = __r / __n; return *this; @@ -923,7 +895,7 @@ namespace std { _Tp __x = __z.real(); _Tp __y = __z.imag(); - _Tp __s = abs(__x) + abs(__y); + const _Tp __s = abs(__x) + abs(__y); if (__s == _Tp()) // well ... return __s; __x /= __s; __y /= __s; @@ -962,6 +934,24 @@ namespace std // Transcendentals: template inline complex<_Tp> + cos(const complex<_Tp>& __z) + { + const _Tp __x = __z.real(); + const _Tp __y = __z.imag(); + return complex<_Tp>(cos(__x) * cosh(__y), -sin(__x) * sinh(__y)); + } + + template + inline complex<_Tp> + cosh(const complex<_Tp>& __z) + { + const _Tp __x = __z.real(); + const _Tp __y = __z.imag(); + return complex<_Tp>(cosh(__x) * cos(__y), sinh(__x) * sin(__y)); + } + + template + inline complex<_Tp> exp(const complex<_Tp>& __z) { return polar(exp(__z.real()), __z.imag()); } @@ -974,7 +964,24 @@ namespace std inline complex<_Tp> log10(const complex<_Tp>& __z) { return log(__z) / log(_Tp(10.0)); } - + + template + inline complex<_Tp> + sin(const complex<_Tp>& __z) + { + const _Tp __x = __z.real(); + const _Tp __y = __z.imag(); + return complex<_Tp>(sin(__x) * cosh(__y), cos(__x) * sinh(__y)); + } + + template + inline complex<_Tp> + sinh(const complex<_Tp>& __z) + { + const _Tp __x = __z.real(); + const _Tp __y = __z.imag(); + return complex<_Tp>(sinh(__x) * cos(__y), cosh(__x) * sin(__y)); + } } // namespace std #endif /* _CPP_COMPLEX */ diff --git a/libstdc++-v3/src/complex.cc b/libstdc++-v3/src/complex.cc index 381f73c..f57aa75 100644 --- a/libstdc++-v3/src/complex.cc +++ b/libstdc++-v3/src/complex.cc @@ -76,15 +76,15 @@ namespace std // #endif // } - template<> - complex - cos(const complex& __x) - { return complex(ccos(__x._M_value)); } +// template<> +// complex +// cos(const complex& __x) +// { return complex(ccos(__x._M_value)); } - template<> - complex - cosh(const complex& __x) - { return complex(ccosh(__x._M_value)); } +// template<> +// complex +// cosh(const complex& __x) +// { return complex(ccosh(__x._M_value)); } // template<> // complex @@ -121,15 +121,15 @@ namespace std pow(const FLT& __x, const complex& __y) { return complex(cexp(__y._M_value * log(__x))); } - template<> - complex - sin(const complex& __x) - { return complex(csin(__x._M_value)); } +// template<> +// complex +// sin(const complex& __x) +// { return complex(csin(__x._M_value)); } - template<> - complex - sinh(const complex& __x) - { return complex(csinh(__x._M_value)); } +// template<> +// complex +// sinh(const complex& __x) +// { return complex(csinh(__x._M_value)); } template<> complex -- 2.7.4