aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/complex
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/std/complex')
-rw-r--r--libstdc++-v3/include/std/complex376
1 files changed, 8 insertions, 368 deletions
diff --git a/libstdc++-v3/include/std/complex b/libstdc++-v3/include/std/complex
index d2aa172fc95..11c714e59ce 100644
--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -45,9 +45,10 @@
# include <cmath>
#undef _GLIBCXX_NO_SPECFUN
#include <sstream>
+
#if _GLIBCXX_HAVE_FLOAT128_MATH
-#include <bits/float128_io.h>
-#endif
+# include <bits/complex128_math.h>
+#endif // _GLIBCXX_HAVE_FLOAT128_MATH
// Get rid of a macro possibly defined in <complex.h>
#undef complex
@@ -571,42 +572,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __z.imag(); }
#endif
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- typedef _Complex float __attribute__((mode(TC))) __complex128;
-#ifdef __cplusplus
-extern "C" {
-#endif
- __float128 strtoflt128 (const char*, char**) _GLIBCXX_NOEXCEPT;
-
- __float128 cabsq (__complex128) _GLIBCXX_NOEXCEPT;
- __float128 cargq (__complex128) _GLIBCXX_NOEXCEPT;
- __float128 cimagq (__complex128) _GLIBCXX_NOEXCEPT;
- __float128 crealq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cacosq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cacoshq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 casinq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 casinhq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 catanq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 catanhq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ccosq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ccoshq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cexpq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cexpiq (__float128) _GLIBCXX_NOEXCEPT;
- __complex128 clogq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 clog10q (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 conjq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cpowq (__complex128, __complex128) _GLIBCXX_NOEXCEPT;
- __complex128 cprojq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 csinq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 csinhq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 csqrtq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ctanq (__complex128) _GLIBCXX_NOEXCEPT;
- __complex128 ctanhq (__complex128) _GLIBCXX_NOEXCEPT;
-#ifdef __cplusplus
-}
-#endif
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
// 26.2.7/3 abs(__z): Returns the magnitude of __z.
template<typename _Tp>
inline _Tp
@@ -633,12 +598,6 @@ extern "C" {
__complex_abs(const __complex__ long double& __z)
{ return __builtin_cabsl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __float128
- __complex_abs(const __complex128& __z)
- { return cabsq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline _Tp
abs(const complex<_Tp>& __z) { return __complex_abs(__z.__rep()); }
@@ -666,12 +625,6 @@ extern "C" {
__complex_arg(const __complex__ long double& __z)
{ return __builtin_cargl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __float128
- __complex_arg(const __complex128& __z)
- { return cargq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline _Tp
arg(const complex<_Tp>& __z) { return __complex_arg(__z.__rep()); }
@@ -753,12 +706,6 @@ extern "C" {
__complex_cos(const __complex__ long double& __z)
{ return __builtin_ccosl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_cos(const __complex128& __z)
- { return ccosq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
cos(const complex<_Tp>& __z) { return __complex_cos(__z.__rep()); }
@@ -789,12 +736,6 @@ extern "C" {
__complex_cosh(const __complex__ long double& __z)
{ return __builtin_ccoshl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_cosh(const __complex128& __z)
- { return ccoshq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
cosh(const complex<_Tp>& __z) { return __complex_cosh(__z.__rep()); }
@@ -821,12 +762,6 @@ extern "C" {
__complex_exp(const __complex__ long double& __z)
{ return __builtin_cexpl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_exp(const __complex128& __z)
- { return cexpq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
exp(const complex<_Tp>& __z) { return __complex_exp(__z.__rep()); }
@@ -854,12 +789,6 @@ extern "C" {
__complex_log(const __complex__ long double& __z)
{ return __builtin_clogl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_log(const __complex128& __z)
- { return clogq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
log(const complex<_Tp>& __z) { return __complex_log(__z.__rep()); }
@@ -895,12 +824,6 @@ extern "C" {
__complex_sin(const __complex__ long double& __z)
{ return __builtin_csinl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_sin(const __complex128& __z)
- { return csinq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
sin(const complex<_Tp>& __z) { return __complex_sin(__z.__rep()); }
@@ -931,12 +854,6 @@ extern "C" {
__complex_sinh(const __complex__ long double& __z)
{ return __builtin_csinhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_sinh(const __complex128& __z)
- { return csinhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
sinh(const complex<_Tp>& __z) { return __complex_sinh(__z.__rep()); }
@@ -981,12 +898,6 @@ extern "C" {
__complex_sqrt(const __complex__ long double& __z)
{ return __builtin_csqrtl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_sqrt(const __complex128& __z)
- { return csqrtq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
sqrt(const complex<_Tp>& __z) { return __complex_sqrt(__z.__rep()); }
@@ -1014,12 +925,6 @@ extern "C" {
__complex_tan(const __complex__ long double& __z)
{ return __builtin_ctanl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_tan(const __complex128& __z)
- { return ctanq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
tan(const complex<_Tp>& __z) { return __complex_tan(__z.__rep()); }
@@ -1048,12 +953,6 @@ extern "C" {
__complex_tanh(const __complex__ long double& __z)
{ return __builtin_ctanhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_tanh(const __complex128& __z)
- { return ctanhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
tanh(const complex<_Tp>& __z) { return __complex_tanh(__z.__rep()); }
@@ -1132,12 +1031,6 @@ extern "C" {
const __complex__ long double& __y)
{ return __builtin_cpowl(__x, __y); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_pow(const __complex128& __x, const __complex128& __y)
- { return cpowq(__x, __y); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline complex<_Tp>
pow(const complex<_Tp>& __x, const complex<_Tp>& __y)
@@ -1619,189 +1512,6 @@ extern "C" {
_ComplexT _M_value;
};
-#if _GLIBCXX_HAVE_FLOAT128_MATH
-
- /// complex<__float128> specialization
- template<>
- struct complex<__float128>
- {
- typedef __float128 value_type;
-
- // From quadmath.h
- //typedef _Complex float __attribute__((mode(TC))) __complex128;
- typedef __complex128 _ComplexT;
-
- _GLIBCXX_CONSTEXPR
- complex(_ComplexT __z)
- : _M_value(__z)
- { }
-
- _GLIBCXX_CONSTEXPR
- complex(__float128 __r = 0.0Q,
- __float128 __i = 0.0Q)
-#if __cplusplus >= 201103L
- : _M_value{ __r, __i }
- { }
-#else
- {
- __real__ _M_value = __r;
- __imag__ _M_value = __i;
- }
-#endif
-
- _GLIBCXX_CONSTEXPR
- complex(const complex<float>& __z)
- : _M_value(__z.__rep())
- { }
-
- _GLIBCXX_CONSTEXPR
- complex(const complex<double>& __z)
- : _M_value(__z.__rep())
- { }
-
- _GLIBCXX_CONSTEXPR
- complex(const complex<long double>& __z)
- : _M_value(__z.__rep())
- { }
-
-#if __cplusplus >= 201103L
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // DR 387. std::complex over-encapsulated.
- __attribute ((__abi_tag__ ("cxx11")))
- constexpr __float128
- real() const
- { return __real__ _M_value; }
-
- __attribute ((__abi_tag__ ("cxx11")))
- constexpr __float128
- imag() const
- { return __imag__ _M_value; }
-#else
- __float128&
- real()
- { return __real__ _M_value; }
-
- const __float128&
- real() const
- { return __real__ _M_value; }
-
- __float128&
- imag()
- { return __imag__ _M_value; }
-
- const __float128&
- imag()
- const { return __imag__ _M_value; }
-#endif
-
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // DR 387. std::complex over-encapsulated.
- void
- real(__float128 __val)
- { __real__ _M_value = __val; }
-
- void
- imag(__float128 __val)
- { __imag__ _M_value = __val; }
-
- complex&
- operator=(__float128 __r)
- {
- _M_value = __r;
- return *this;
- }
-
- complex&
- operator+=(__float128 __r)
- {
- _M_value += __r;
- return *this;
- }
-
- complex&
- operator-=(__float128 __r)
- {
- _M_value -= __r;
- return *this;
- }
-
- complex&
- operator*=(__float128 __r)
- {
- _M_value *= __r;
- return *this;
- }
-
- complex&
- operator/=(__float128 __r)
- {
- _M_value /= __r;
- return *this;
- }
-
- // The compiler knows how to do this efficiently
- // complex& operator=(const complex&);
-
- template<typename _Tp>
- complex&
- operator=(const complex<_Tp>& __z)
- {
- __real__ _M_value = __z.real();
- __imag__ _M_value = __z.imag();
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator+=(const complex<_Tp>& __z)
- {
- __real__ _M_value += __z.real();
- __imag__ _M_value += __z.imag();
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator-=(const complex<_Tp>& __z)
- {
- __real__ _M_value -= __z.real();
- __imag__ _M_value -= __z.imag();
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator*=(const complex<_Tp>& __z)
- {
- _ComplexT __t;
- __real__ __t = __z.real();
- __imag__ __t = __z.imag();
- _M_value *= __t;
- return *this;
- }
-
- template<typename _Tp>
- complex&
- operator/=(const complex<_Tp>& __z)
- {
- _ComplexT __t;
- __real__ __t = __z.real();
- __imag__ __t = __z.imag();
- _M_value /= __t;
- return *this;
- }
-
- _GLIBCXX_CONSTEXPR _ComplexT
- __rep() const
- { return _M_value; }
-
- private:
-
- _ComplexT _M_value;
- };
-
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
// These bits have to be at the end of this file, so that the
// specializations have all been defined.
inline _GLIBCXX_CONSTEXPR
@@ -1816,20 +1526,6 @@ extern "C" {
complex<double>::complex(const complex<long double>& __z)
: _M_value(__z.__rep()) { }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline _GLIBCXX_CONSTEXPR
- complex<float>::complex(const complex<__float128>& __z)
- : _M_value(__z.__rep()) { }
-
- inline _GLIBCXX_CONSTEXPR
- complex<double>::complex(const complex<__float128>& __z)
- : _M_value(__z.__rep()) { }
-
- inline _GLIBCXX_CONSTEXPR
- complex<long double>::complex(const complex<__float128>& __z)
- : _M_value(__z.__rep()) { }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
@@ -1840,10 +1536,6 @@ extern "C" {
extern template ostream& operator<<(ostream&, const complex<double>&);
extern template istream& operator>>(istream&, complex<long double>&);
extern template ostream& operator<<(ostream&, const complex<long double>&);
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- template istream& operator>>(istream&, complex<__float128>&);
- template ostream& operator<<(ostream&, const complex<__float128>&);
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
#ifdef _GLIBCXX_USE_WCHAR_T
extern template wistream& operator>>(wistream&, complex<float>&);
@@ -1928,12 +1620,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_acos(const __complex__ long double& __z)
{ return __builtin_cacosl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_acos(const __complex128& __z)
- { return cacosq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
acos(const std::complex<_Tp>& __z)
@@ -1970,12 +1656,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_asin(const __complex__ long double& __z)
{ return __builtin_casinl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_asin(const __complex128& __z)
- { return casinq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
asin(const std::complex<_Tp>& __z)
@@ -2020,12 +1700,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_atan(const __complex__ long double& __z)
{ return __builtin_catanl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_atan(const __complex128& __z)
- { return catanq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
atan(const std::complex<_Tp>& __z)
@@ -2062,12 +1736,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_acosh(const __complex__ long double& __z)
{ return __builtin_cacoshl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_acosh(const __complex128& __z)
- { return cacoshq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
acosh(const std::complex<_Tp>& __z)
@@ -2107,12 +1775,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_asinh(const __complex__ long double& __z)
{ return __builtin_casinhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_asinh(const __complex128& __z)
- { return casinhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
asinh(const std::complex<_Tp>& __z)
@@ -2157,12 +1819,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_atanh(const __complex__ long double& __z)
{ return __builtin_catanhl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_atanh(const __complex128& __z)
- { return catanhq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
atanh(const std::complex<_Tp>& __z)
@@ -2270,12 +1926,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__complex_proj(const __complex__ long double& __z)
{ return __builtin_cprojl(__z); }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline __complex128
- __complex_proj(const __complex128& __z)
- { return cprojq(__z); }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
template<typename _Tp>
inline std::complex<_Tp>
proj(const std::complex<_Tp>& __z)
@@ -2303,14 +1953,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return std::complex<__type>(__x, -__type());
}
-_GLIBCXX_END_NAMESPACE_VERSION
-
#if __cplusplus > 201103L
inline namespace literals {
inline namespace complex_literals {
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
#define __cpp_lib_complex_udls 201309
constexpr std::complex<float>
@@ -2337,24 +1983,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
operator""il(unsigned long long __num)
{ return std::complex<long double>{0.0L, static_cast<long double>(__num)}; }
-#if _GLIBCXX_HAVE_FLOAT128_MATH
- inline std::complex<__float128>
- operator""iq(const char* __str)
- { return complex<__float128>(0.0Q, strtoflt128(__str, 0)); }
-
- constexpr std::complex<__float128>
- operator""iq(unsigned long long __num)
- { return std::complex<__float128>{0.0L, static_cast<__float128>(__num)}; }
-#endif // _GLIBCXX_HAVE_FLOAT128_MATH
-
-_GLIBCXX_END_NAMESPACE_VERSION
} // inline namespace complex_literals
} // inline namespace literals
#endif // C++14
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#endif // C++11
+#if _GLIBCXX_HAVE_FLOAT128_MATH
+# include <bits/complex128.h>
+#endif // _GLIBCXX_HAVE_FLOAT128_MATH
+
#endif /* _GLIBCXX_COMPLEX */