1 // TR1 complex -*- C++ -*- 2 3 // Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 /** @file tr1/complex 26 * This is a TR1 C++ Library header. 27 */ 28 29 #ifndef _GLIBCXX_TR1_COMPLEX 30 #define _GLIBCXX_TR1_COMPLEX 1 31 32 #pragma GCC system_header 33 34 #if defined(_GLIBCXX_INCLUDE_AS_CXX0X) 35 # error TR1 header cannot be included from C++0x header 36 #endif 37 38 #include <complex> 39 40 #if defined(_GLIBCXX_INCLUDE_AS_TR1) 41 # include <tr1_impl/complex> 42 #else 43 # define _GLIBCXX_INCLUDE_AS_TR1 44 # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 { 45 # define _GLIBCXX_END_NAMESPACE_TR1 } 46 # define _GLIBCXX_TR1 tr1:: 47 # include <tr1_impl/complex> 48 # undef _GLIBCXX_TR1 49 # undef _GLIBCXX_END_NAMESPACE_TR1 50 # undef _GLIBCXX_BEGIN_NAMESPACE_TR1 51 # undef _GLIBCXX_INCLUDE_AS_TR1 52 #endif 53 54 namespace std 55 { 56 namespace tr1 57 { 58 using std::arg; 59 using std::conj; 60 using std::imag; 61 using std::norm; 62 using std::polar; 63 64 template<typename _Tp, typename _Up> 65 inline std::complex<typename __gnu_cxx::__promote_2<_Tp, _Up>::__type> 66 polar(const _Tp& __rho, const _Up& __theta) 67 { 68 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 69 return std::polar(__type(__rho), __type(__theta)); 70 } 71 72 using std::real; 73 74 template<typename _Tp> 75 inline std::complex<_Tp> 76 pow(const std::complex<_Tp>& __x, const _Tp& __y) 77 { return std::pow(__x, __y); } 78 79 template<typename _Tp> 80 inline std::complex<_Tp> 81 pow(const _Tp& __x, const std::complex<_Tp>& __y) 82 { return std::pow(__x, __y); } 83 84 template<typename _Tp> 85 inline std::complex<_Tp> 86 pow(const std::complex<_Tp>& __x, const std::complex<_Tp>& __y) 87 { return std::pow(__x, __y); } 88 } 89 } 90 91 #endif // _GLIBCXX_TR1_COMPLEX 92