Eigne Matrix Class Library
Dependents: Eigen_test Odometry_test AttitudeEstimation_usingTicker MPU9250_Quaternion_Binary_Serial ... more
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 Tue Jul 12 2022 17:46:54 by 1.7.2