MOAB  4.9.3pre
Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder > Struct Template Reference

#include <ProductEvaluators.h>

Inheritance diagram for Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >:
Collaboration diagram for Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >:

List of all members.

Public Types

enum  {
  CoeffReadCost = NumTraits<Scalar>::MulCost + evaluator<MatrixType>::CoeffReadCost + evaluator<DiagonalType>::CoeffReadCost, MatrixFlags = evaluator<MatrixType>::Flags, DiagFlags = evaluator<DiagonalType>::Flags, _StorageOrder = MatrixFlags & RowMajorBit ? RowMajor : ColMajor,
  _ScalarAccessOnDiag, _SameTypes = is_same<typename MatrixType::Scalar, typename DiagonalType::Scalar>::value, _Vectorizable = bool(int(MatrixFlags)&PacketAccessBit) && _SameTypes && (_ScalarAccessOnDiag || (bool(int(DiagFlags)&PacketAccessBit))), _LinearAccessMask = (MatrixType::RowsAtCompileTime==1 || MatrixType::ColsAtCompileTime==1) ? LinearAccessBit : 0,
  Flags = ((HereditaryBits|_LinearAccessMask) & (unsigned int)(MatrixFlags)) | (_Vectorizable ? PacketAccessBit : 0), Alignment = evaluator<MatrixType>::Alignment
}
typedef scalar_product_traits
< typename MatrixType::Scalar,
typename DiagonalType::Scalar >
::ReturnType 
Scalar

Public Member Functions

 diagonal_product_evaluator_base (const MatrixType &mat, const DiagonalType &diag)
EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE const
Scalar 
coeff (Index idx) const

Protected Member Functions

template<int LoadMode, typename PacketType >
EIGEN_STRONG_INLINE PacketType packet_impl (Index row, Index col, Index id, internal::true_type) const
template<int LoadMode, typename PacketType >
EIGEN_STRONG_INLINE PacketType packet_impl (Index row, Index col, Index id, internal::false_type) const

Protected Attributes

evaluator< DiagonalType > m_diagImpl
evaluator< MatrixType > m_matImpl

Detailed Description

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
struct Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >

Definition at line 724 of file ProductEvaluators.h.


Member Typedef Documentation

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
typedef scalar_product_traits<typename MatrixType::Scalar, typename DiagonalType::Scalar>::ReturnType Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::Scalar

Member Enumeration Documentation

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
anonymous enum
Enumerator:
CoeffReadCost 
MatrixFlags 
DiagFlags 
_StorageOrder 
_ScalarAccessOnDiag 
_SameTypes 
_Vectorizable 
_LinearAccessMask 
Flags 
Alignment 

Definition at line 729 of file ProductEvaluators.h.

       {
    CoeffReadCost = NumTraits<Scalar>::MulCost + evaluator<MatrixType>::CoeffReadCost + evaluator<DiagonalType>::CoeffReadCost,
    
    MatrixFlags = evaluator<MatrixType>::Flags,
    DiagFlags = evaluator<DiagonalType>::Flags,
    _StorageOrder = MatrixFlags & RowMajorBit ? RowMajor : ColMajor,
    _ScalarAccessOnDiag =  !((int(_StorageOrder) == ColMajor && int(ProductOrder) == OnTheLeft)
                           ||(int(_StorageOrder) == RowMajor && int(ProductOrder) == OnTheRight)),
    _SameTypes = is_same<typename MatrixType::Scalar, typename DiagonalType::Scalar>::value,
    // FIXME currently we need same types, but in the future the next rule should be the one
    //_Vectorizable = bool(int(MatrixFlags)&PacketAccessBit) && ((!_PacketOnDiag) || (_SameTypes && bool(int(DiagFlags)&PacketAccessBit))),
    _Vectorizable = bool(int(MatrixFlags)&PacketAccessBit) && _SameTypes && (_ScalarAccessOnDiag || (bool(int(DiagFlags)&PacketAccessBit))),
    _LinearAccessMask = (MatrixType::RowsAtCompileTime==1 || MatrixType::ColsAtCompileTime==1) ? LinearAccessBit : 0,
    Flags = ((HereditaryBits|_LinearAccessMask) & (unsigned int)(MatrixFlags)) | (_Vectorizable ? PacketAccessBit : 0),
    Alignment = evaluator<MatrixType>::Alignment
  };

Constructor & Destructor Documentation

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::diagonal_product_evaluator_base ( const MatrixType &  mat,
const DiagonalType &  diag 
) [inline]

Member Function Documentation

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::coeff ( Index  idx) const [inline]

Definition at line 753 of file ProductEvaluators.h.

  {
    return m_diagImpl.coeff(idx) * m_matImpl.coeff(idx);
  }
template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
template<int LoadMode, typename PacketType >
EIGEN_STRONG_INLINE PacketType Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::packet_impl ( Index  row,
Index  col,
Index  id,
internal::true_type   
) const [inline, protected]

Definition at line 760 of file ProductEvaluators.h.

  {
    return internal::pmul(m_matImpl.template packet<LoadMode,PacketType>(row, col),
                          internal::pset1<PacketType>(m_diagImpl.coeff(id)));
  }
template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
template<int LoadMode, typename PacketType >
EIGEN_STRONG_INLINE PacketType Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::packet_impl ( Index  row,
Index  col,
Index  id,
internal::false_type   
) const [inline, protected]

Definition at line 767 of file ProductEvaluators.h.

  {
    enum {
      InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
      DiagonalPacketLoadMode = EIGEN_PLAIN_ENUM_MIN(LoadMode,((InnerSize%16) == 0) ? int(Aligned16) : int(evaluator<DiagonalType>::Alignment)) // FIXME hardcoded 16!!
    };
    return internal::pmul(m_matImpl.template packet<LoadMode,PacketType>(row, col),
                          m_diagImpl.template packet<DiagonalPacketLoadMode,PacketType>(id));
  }

Member Data Documentation

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
evaluator<DiagonalType> Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::m_diagImpl [protected]

Definition at line 777 of file ProductEvaluators.h.

template<typename MatrixType, typename DiagonalType, typename Derived, int ProductOrder>
evaluator<MatrixType> Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::m_matImpl [protected]

Definition at line 778 of file ProductEvaluators.h.


The documentation for this struct was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines