1// TR1 complex -*- C++ -*- 2 3// Copyright (C) 2006, 2007, 2008, 2009, 2010 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 54namespace std 55{ 56namespace tr1 57{ 58 using std::arg; 59 60 template<typename _Tp> 61 inline std::complex<_Tp> 62 conj(const std::complex<_Tp>& __z) 63 { return std::conj(__z); } 64 65 template<typename _Tp> 66 inline std::complex<typename __gnu_cxx::__promote<_Tp>::__type> 67 conj(_Tp __x) 68 { return __x; } 69 70 using std::imag; 71 using std::norm; 72 using std::polar; 73 74 template<typename _Tp, typename _Up> 75 inline std::complex<typename __gnu_cxx::__promote_2<_Tp, _Up>::__type> 76 polar(const _Tp& __rho, const _Up& __theta) 77 { 78 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 79 return std::polar(__type(__rho), __type(__theta)); 80 } 81 82 using std::real; 83 84 template<typename _Tp> 85 inline std::complex<_Tp> 86 pow(const std::complex<_Tp>& __x, const _Tp& __y) 87 { return std::pow(__x, __y); } 88 89 template<typename _Tp> 90 inline std::complex<_Tp> 91 pow(const _Tp& __x, const std::complex<_Tp>& __y) 92 { return std::pow(__x, __y); } 93 94 template<typename _Tp> 95 inline std::complex<_Tp> 96 pow(const std::complex<_Tp>& __x, const std::complex<_Tp>& __y) 97 { return std::pow(__x, __y); } 98} 99} 100 101#endif // _GLIBCXX_TR1_COMPLEX 102