cart-elc

Source code for CART-ELC
git clone git://git.laack.co/cart-elc.git
Log | Files | Refs | README | LICENSE

CommonCwiseUnaryOps.h (6089B)


      1 // This file is part of Eigen, a lightweight C++ template library
      2 // for linear algebra.
      3 //
      4 // Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr>
      5 // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
      6 //
      7 // This Source Code Form is subject to the terms of the Mozilla
      8 // Public License v. 2.0. If a copy of the MPL was not distributed
      9 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
     10 
     11 // This file is a base class plugin containing common coefficient wise functions.
     12 
     13 #ifndef EIGEN_PARSED_BY_DOXYGEN
     14 
     15 /** \internal the return type of conjugate() */
     16 typedef typename internal::conditional<NumTraits<Scalar>::IsComplex,
     17                     const CwiseUnaryOp<internal::scalar_conjugate_op<Scalar>, const Derived>,
     18                     const Derived&
     19                   >::type ConjugateReturnType;
     20 /** \internal the return type of real() const */
     21 typedef typename internal::conditional<NumTraits<Scalar>::IsComplex,
     22                     const CwiseUnaryOp<internal::scalar_real_op<Scalar>, const Derived>,
     23                     const Derived&
     24                   >::type RealReturnType;
     25 /** \internal the return type of real() */
     26 typedef typename internal::conditional<NumTraits<Scalar>::IsComplex,
     27                     CwiseUnaryView<internal::scalar_real_ref_op<Scalar>, Derived>,
     28                     Derived&
     29                   >::type NonConstRealReturnType;
     30 /** \internal the return type of imag() const */
     31 typedef CwiseUnaryOp<internal::scalar_imag_op<Scalar>, const Derived> ImagReturnType;
     32 /** \internal the return type of imag() */
     33 typedef CwiseUnaryView<internal::scalar_imag_ref_op<Scalar>, Derived> NonConstImagReturnType;
     34 
     35 typedef CwiseUnaryOp<internal::scalar_opposite_op<Scalar>, const Derived> NegativeReturnType;
     36 
     37 #endif // not EIGEN_PARSED_BY_DOXYGEN
     38 
     39 /// \returns an expression of the opposite of \c *this
     40 ///
     41 EIGEN_DOC_UNARY_ADDONS(operator-,opposite)
     42 ///
     43 EIGEN_DEVICE_FUNC
     44 inline const NegativeReturnType
     45 operator-() const { return NegativeReturnType(derived()); }
     46 
     47 
     48 template<class NewType> struct CastXpr { typedef typename internal::cast_return_type<Derived,const CwiseUnaryOp<internal::scalar_cast_op<Scalar, NewType>, const Derived> >::type Type; };
     49 
     50 /// \returns an expression of \c *this with the \a Scalar type casted to
     51 /// \a NewScalar.
     52 ///
     53 /// The template parameter \a NewScalar is the type we are casting the scalars to.
     54 ///
     55 EIGEN_DOC_UNARY_ADDONS(cast,conversion function)
     56 ///
     57 /// \sa class CwiseUnaryOp
     58 ///
     59 template<typename NewType>
     60 EIGEN_DEVICE_FUNC
     61 typename CastXpr<NewType>::Type
     62 cast() const
     63 {
     64   return typename CastXpr<NewType>::Type(derived());
     65 }
     66 
     67 /// \returns an expression of the complex conjugate of \c *this.
     68 ///
     69 EIGEN_DOC_UNARY_ADDONS(conjugate,complex conjugate)
     70 ///
     71 /// \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_conj">Math functions</a>, MatrixBase::adjoint()
     72 EIGEN_DEVICE_FUNC
     73 inline ConjugateReturnType
     74 conjugate() const
     75 {
     76   return ConjugateReturnType(derived());
     77 }
     78 
     79 /// \returns an expression of the complex conjugate of \c *this if Cond==true, returns derived() otherwise.
     80 ///
     81 EIGEN_DOC_UNARY_ADDONS(conjugate,complex conjugate)
     82 ///
     83 /// \sa conjugate()
     84 template<bool Cond>
     85 EIGEN_DEVICE_FUNC
     86 inline typename internal::conditional<Cond,ConjugateReturnType,const Derived&>::type
     87 conjugateIf() const
     88 {
     89   typedef typename internal::conditional<Cond,ConjugateReturnType,const Derived&>::type ReturnType;
     90   return ReturnType(derived());
     91 }
     92 
     93 /// \returns a read-only expression of the real part of \c *this.
     94 ///
     95 EIGEN_DOC_UNARY_ADDONS(real,real part function)
     96 ///
     97 /// \sa imag()
     98 EIGEN_DEVICE_FUNC
     99 inline RealReturnType
    100 real() const { return RealReturnType(derived()); }
    101 
    102 /// \returns an read-only expression of the imaginary part of \c *this.
    103 ///
    104 EIGEN_DOC_UNARY_ADDONS(imag,imaginary part function)
    105 ///
    106 /// \sa real()
    107 EIGEN_DEVICE_FUNC
    108 inline const ImagReturnType
    109 imag() const { return ImagReturnType(derived()); }
    110 
    111 /// \brief Apply a unary operator coefficient-wise
    112 /// \param[in]  func  Functor implementing the unary operator
    113 /// \tparam  CustomUnaryOp Type of \a func
    114 /// \returns An expression of a custom coefficient-wise unary operator \a func of *this
    115 ///
    116 /// The function \c ptr_fun() from the C++ standard library can be used to make functors out of normal functions.
    117 ///
    118 /// Example:
    119 /// \include class_CwiseUnaryOp_ptrfun.cpp
    120 /// Output: \verbinclude class_CwiseUnaryOp_ptrfun.out
    121 ///
    122 /// Genuine functors allow for more possibilities, for instance it may contain a state.
    123 ///
    124 /// Example:
    125 /// \include class_CwiseUnaryOp.cpp
    126 /// Output: \verbinclude class_CwiseUnaryOp.out
    127 ///
    128 EIGEN_DOC_UNARY_ADDONS(unaryExpr,unary function)
    129 ///
    130 /// \sa unaryViewExpr, binaryExpr, class CwiseUnaryOp
    131 ///
    132 template<typename CustomUnaryOp>
    133 EIGEN_DEVICE_FUNC
    134 inline const CwiseUnaryOp<CustomUnaryOp, const Derived>
    135 unaryExpr(const CustomUnaryOp& func = CustomUnaryOp()) const
    136 {
    137   return CwiseUnaryOp<CustomUnaryOp, const Derived>(derived(), func);
    138 }
    139 
    140 /// \returns an expression of a custom coefficient-wise unary operator \a func of *this
    141 ///
    142 /// The template parameter \a CustomUnaryOp is the type of the functor
    143 /// of the custom unary operator.
    144 ///
    145 /// Example:
    146 /// \include class_CwiseUnaryOp.cpp
    147 /// Output: \verbinclude class_CwiseUnaryOp.out
    148 ///
    149 EIGEN_DOC_UNARY_ADDONS(unaryViewExpr,unary function)
    150 ///
    151 /// \sa unaryExpr, binaryExpr class CwiseUnaryOp
    152 ///
    153 template<typename CustomViewOp>
    154 EIGEN_DEVICE_FUNC
    155 inline const CwiseUnaryView<CustomViewOp, const Derived>
    156 unaryViewExpr(const CustomViewOp& func = CustomViewOp()) const
    157 {
    158   return CwiseUnaryView<CustomViewOp, const Derived>(derived(), func);
    159 }
    160 
    161 /// \returns a non const expression of the real part of \c *this.
    162 ///
    163 EIGEN_DOC_UNARY_ADDONS(real,real part function)
    164 ///
    165 /// \sa imag()
    166 EIGEN_DEVICE_FUNC
    167 inline NonConstRealReturnType
    168 real() { return NonConstRealReturnType(derived()); }
    169 
    170 /// \returns a non const expression of the imaginary part of \c *this.
    171 ///
    172 EIGEN_DOC_UNARY_ADDONS(imag,imaginary part function)
    173 ///
    174 /// \sa real()
    175 EIGEN_DEVICE_FUNC
    176 inline NonConstImagReturnType
    177 imag() { return NonConstImagReturnType(derived()); }