26 #ifndef EIGEN_DIAGONALPRODUCT_H
27 #define EIGEN_DIAGONALPRODUCT_H
32 template<
typename MatrixType,
typename DiagonalType,
int ProductOrder>
33 struct traits<DiagonalProduct<MatrixType, DiagonalType, ProductOrder> >
36 typedef typename scalar_product_traits<typename MatrixType::Scalar, typename DiagonalType::Scalar>::ReturnType Scalar;
38 RowsAtCompileTime = MatrixType::RowsAtCompileTime,
39 ColsAtCompileTime = MatrixType::ColsAtCompileTime,
40 MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
41 MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
46 _SameTypes = is_same<typename MatrixType::Scalar, typename DiagonalType::Scalar>::value,
57 template<
typename MatrixType,
typename DiagonalType,
int ProductOrder>
59 public MatrixBase<DiagonalProduct<MatrixType, DiagonalType, ProductOrder> >
69 eigen_assert(diagonal.diagonal().size() == (ProductOrder ==
OnTheLeft ? matrix.rows() : matrix.cols()));
80 template<
int LoadMode>
88 return packet_impl<LoadMode>(
row,
col,indexInDiagonalVector,
typename internal::conditional<
90 ||(
int(StorageOrder) ==
ColMajor &&
int(ProductOrder) ==
OnTheRight)), internal::true_type, internal::false_type>::type());
94 template<
int LoadMode>
98 internal::pset1<PacketScalar>(
m_diagonal.diagonal().coeff(
id)));
101 template<
int LoadMode>
105 InnerSize = (MatrixType::Flags &
RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
109 m_diagonal.diagonal().template packet<DiagonalVectorPacketLoadMode>(id));
118 template<
typename Derived>
119 template<
typename DiagonalDerived>
128 template<
typename DiagonalDerived>
129 template<
typename MatrixDerived>
138 #endif // EIGEN_DIAGONALPRODUCT_H