Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
GlobalFunctions.h
00001 // This file is part of Eigen, a lightweight C++ template library 00002 // for linear algebra. 00003 // 00004 // Copyright (C) 2010-2012 Gael Guennebaud <gael.guennebaud@inria.fr> 00005 // Copyright (C) 2010 Benoit Jacob <jacob.benoit.1@gmail.com> 00006 // 00007 // This Source Code Form is subject to the terms of the Mozilla 00008 // Public License v. 2.0. If a copy of the MPL was not distributed 00009 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 00010 00011 #ifndef EIGEN_GLOBAL_FUNCTIONS_H 00012 #define EIGEN_GLOBAL_FUNCTIONS_H 00013 00014 #define EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(NAME,FUNCTOR) \ 00015 template<typename Derived> \ 00016 inline const Eigen::CwiseUnaryOp<Eigen::internal::FUNCTOR<typename Derived::Scalar>, const Derived> \ 00017 NAME(const Eigen::ArrayBase<Derived>& x) { \ 00018 return x.derived(); \ 00019 } 00020 00021 #define EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(NAME,FUNCTOR) \ 00022 \ 00023 template<typename Derived> \ 00024 struct NAME##_retval<ArrayBase<Derived> > \ 00025 { \ 00026 typedef const Eigen::CwiseUnaryOp<Eigen::internal::FUNCTOR<typename Derived::Scalar>, const Derived> type; \ 00027 }; \ 00028 template<typename Derived> \ 00029 struct NAME##_impl<ArrayBase<Derived> > \ 00030 { \ 00031 static inline typename NAME##_retval<ArrayBase<Derived> >::type run(const Eigen::ArrayBase<Derived>& x) \ 00032 { \ 00033 return x.derived(); \ 00034 } \ 00035 }; 00036 00037 00038 namespace Eigen 00039 { 00040 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(real,scalar_real_op) 00041 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(imag,scalar_imag_op) 00042 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(conj,scalar_conjugate_op) 00043 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sin,scalar_sin_op) 00044 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(cos,scalar_cos_op) 00045 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(asin,scalar_asin_op) 00046 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(acos,scalar_acos_op) 00047 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(tan,scalar_tan_op) 00048 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(exp,scalar_exp_op) 00049 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(log,scalar_log_op) 00050 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(abs,scalar_abs_op) 00051 EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sqrt,scalar_sqrt_op) 00052 00053 template<typename Derived> 00054 inline const Eigen::CwiseUnaryOp<Eigen::internal::scalar_pow_op<typename Derived::Scalar>, const Derived> 00055 pow(const Eigen::ArrayBase<Derived>& x, const typename Derived::Scalar& exponent) { 00056 return x.derived().pow(exponent); 00057 } 00058 00059 template<typename Derived> 00060 inline const Eigen::CwiseBinaryOp<Eigen::internal::scalar_binary_pow_op<typename Derived::Scalar, typename Derived::Scalar>, const Derived, const Derived> 00061 pow(const Eigen::ArrayBase<Derived>& x, const Eigen::ArrayBase<Derived>& exponents) 00062 { 00063 return Eigen::CwiseBinaryOp<Eigen::internal::scalar_binary_pow_op<typename Derived::Scalar, typename Derived::Scalar>, const Derived, const Derived>( 00064 x.derived(), 00065 exponents.derived() 00066 ); 00067 } 00068 00069 /** 00070 * \brief Component-wise division of a scalar by array elements. 00071 **/ 00072 template <typename Derived> 00073 inline const Eigen::CwiseUnaryOp<Eigen::internal::scalar_inverse_mult_op<typename Derived::Scalar>, const Derived> 00074 operator/(const typename Derived::Scalar& s, const Eigen::ArrayBase<Derived>& a) 00075 { 00076 return Eigen::CwiseUnaryOp<Eigen::internal::scalar_inverse_mult_op<typename Derived::Scalar>, const Derived>( 00077 a.derived(), 00078 Eigen::internal::scalar_inverse_mult_op<typename Derived::Scalar>(s) 00079 ); 00080 } 00081 00082 namespace internal 00083 { 00084 EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(real,scalar_real_op) 00085 EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(imag,scalar_imag_op) 00086 EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(abs2,scalar_abs2_op) 00087 } 00088 } 00089 00090 // TODO: cleanly disable those functions that are not supported on Array (numext::real_ref, internal::random, internal::isApprox...) 00091 00092 #endif // EIGEN_GLOBAL_FUNCTIONS_H
Generated on Thu Nov 17 2022 22:01:28 by
1.7.2