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 >:

Public Types

enum  {
  CoeffReadCost , MatrixFlags = evaluator<MatrixType>::Flags , DiagFlags = evaluator<DiagonalType>::Flags , StorageOrder_ ,
  SameStorageOrder_ = int(StorageOrder_) == ((MatrixFlags & RowMajorBit) ? RowMajor : ColMajor) , ScalarAccessOnDiag_ , SameTypes_ = is_same<typename MatrixType::Scalar, typename DiagonalType::Scalar>::value , Vectorizable_ ,
  LinearAccessMask_ , Flags , Alignment = evaluator<MatrixType>::Alignment , AsScalarProduct
}
 
typedef ScalarBinaryOpTraits< typename MatrixType::Scalar, typename DiagonalType::Scalar >::ReturnType Scalar
 
- Public Types inherited from Eigen::internal::evaluator_base< Derived >
enum  
 
typedef traits< Derived > ExpressionTraits
 

Public Member Functions

EIGEN_DEVICE_FUNC diagonal_product_evaluator_base (const MatrixType &mat, const DiagonalType &diag)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar coeff (Index idx) const
 
- Public Member Functions inherited from Eigen::internal::evaluator_base< Derived >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE evaluator_base ()=default
 

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< MatrixTypem_matImpl
 

Member Typedef Documentation

◆ Scalar

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

Member Enumeration Documentation

◆ anonymous enum

template<typename MatrixType , typename DiagonalType , typename Derived , int ProductOrder>
anonymous enum
Enumerator
CoeffReadCost 
MatrixFlags 
DiagFlags 
StorageOrder_ 
SameStorageOrder_ 
ScalarAccessOnDiag_ 
SameTypes_ 
Vectorizable_ 
LinearAccessMask_ 
Flags 
Alignment 
AsScalarProduct 
803  {
804  CoeffReadCost = int(NumTraits<Scalar>::MulCost) + int(evaluator<MatrixType>::CoeffReadCost) +
805  int(evaluator<DiagonalType>::CoeffReadCost),
806 
807  MatrixFlags = evaluator<MatrixType>::Flags,
808  DiagFlags = evaluator<DiagonalType>::Flags,
809 
810  StorageOrder_ = (Derived::MaxRowsAtCompileTime == 1 && Derived::MaxColsAtCompileTime != 1) ? RowMajor
811  : (Derived::MaxColsAtCompileTime == 1 && Derived::MaxRowsAtCompileTime != 1) ? ColMajor
813  : ColMajor,
815 
816  ScalarAccessOnDiag_ = !((int(StorageOrder_) == ColMajor && int(ProductOrder) == OnTheLeft) ||
817  (int(StorageOrder_) == RowMajor && int(ProductOrder) == OnTheRight)),
819  // FIXME currently we need same types, but in the future the next rule should be the one
820  // Vectorizable_ = bool(int(MatrixFlags)&PacketAccessBit) && ((!_PacketOnDiag) || (SameTypes_ &&
821  // bool(int(DiagFlags)&PacketAccessBit))),
826  (MatrixType::RowsAtCompileTime == 1 || MatrixType::ColsAtCompileTime == 1) ? LinearAccessBit : 0,
827  Flags =
829  Alignment = evaluator<MatrixType>::Alignment,
830 
832  (DiagonalType::SizeAtCompileTime == 1) ||
833  (DiagonalType::SizeAtCompileTime == Dynamic && MatrixType::RowsAtCompileTime == 1 &&
834  ProductOrder == OnTheLeft) ||
835  (DiagonalType::SizeAtCompileTime == Dynamic && MatrixType::ColsAtCompileTime == 1 && ProductOrder == OnTheRight)
836  };
@ ColMajor
Definition: Constants.h:318
@ RowMajor
Definition: Constants.h:320
@ OnTheLeft
Definition: Constants.h:331
@ OnTheRight
Definition: Constants.h:333
const unsigned int PacketAccessBit
Definition: Constants.h:97
const unsigned int LinearAccessBit
Definition: Constants.h:133
const unsigned int RowMajorBit
Definition: Constants.h:70
return int(ret)+1
const unsigned int HereditaryBits
Definition: Constants.h:198
const int Dynamic
Definition: Constants.h:25
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
@ MulCost
Definition: NumTraits.h:180
@ DiagFlags
Definition: ProductEvaluators.h:808
@ CoeffReadCost
Definition: ProductEvaluators.h:804
@ SameTypes_
Definition: ProductEvaluators.h:818
@ StorageOrder_
Definition: ProductEvaluators.h:810
@ SameStorageOrder_
Definition: ProductEvaluators.h:814
@ AsScalarProduct
Definition: ProductEvaluators.h:831
@ ScalarAccessOnDiag_
Definition: ProductEvaluators.h:816
@ LinearAccessMask_
Definition: ProductEvaluators.h:825
@ Vectorizable_
Definition: ProductEvaluators.h:822
@ Alignment
Definition: ProductEvaluators.h:829
@ MatrixFlags
Definition: ProductEvaluators.h:807
@ value
Definition: Meta.h:206

Constructor & Destructor Documentation

◆ diagonal_product_evaluator_base()

template<typename MatrixType , typename DiagonalType , typename Derived , int ProductOrder>
EIGEN_DEVICE_FUNC Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::diagonal_product_evaluator_base ( const MatrixType mat,
const DiagonalType &  diag 
)
inline
842  }
#define EIGEN_INTERNAL_CHECK_COST_VALUE(C)
Definition: StaticAssert.h:101
const char const char const char * diag
Definition: level2_impl.h:86
evaluator< DiagonalType > m_diagImpl
Definition: ProductEvaluators.h:870
evaluator< MatrixType > m_matImpl
Definition: ProductEvaluators.h:871

References Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::CoeffReadCost, and EIGEN_INTERNAL_CHECK_COST_VALUE.

Member Function Documentation

◆ coeff()

◆ packet_impl() [1/2]

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
inlineprotected
859  {
860  enum {
861  InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
862  DiagonalPacketLoadMode = plain_enum_min(
863  LoadMode,
864  ((InnerSize % 16) == 0) ? int(Aligned16) : int(evaluator<DiagonalType>::Alignment)) // FIXME hardcoded 16!!
865  };
866  return internal::pmul(m_matImpl.template packet<LoadMode, PacketType>(row, col),
867  m_diagImpl.template packet<DiagonalPacketLoadMode, PacketType>(id));
868  }
m col(1)
m row(1)
@ Aligned16
Definition: Constants.h:237
constexpr int plain_enum_min(A a, B b)
Definition: Meta.h:649
EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf &a, const Packet4cf &b)
Definition: AVX/Complex.h:88

References Eigen::Aligned16, col(), int(), Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::m_diagImpl, Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::m_matImpl, Eigen::internal::plain_enum_min(), Eigen::internal::pmul(), row(), and Eigen::RowMajorBit.

◆ packet_impl() [2/2]

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
inlineprotected

Member Data Documentation

◆ m_diagImpl

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

◆ m_matImpl


The documentation for this struct was generated from the following file: