Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
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
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
00091
00092 #endif // EIGEN_GLOBAL_FUNCTIONS_H