10 #ifndef EIGEN_PRODUCT_H 11 #define EIGEN_PRODUCT_H 15 template<
typename Lhs,
typename Rhs,
int Option,
typename StorageKind>
class ProductImpl;
19 template<
typename Lhs,
typename Rhs,
int Option>
31 typename RhsTraits::StorageKind,
37 RowsAtCompileTime = LhsTraits::RowsAtCompileTime,
38 ColsAtCompileTime = RhsTraits::ColsAtCompileTime,
39 MaxRowsAtCompileTime = LhsTraits::MaxRowsAtCompileTime,
40 MaxColsAtCompileTime = RhsTraits::MaxColsAtCompileTime,
46 Flags = (MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1) ?
RowMajorBit 47 : (MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1) ? 0
50 : NoPreferredStorageOrderBit
70 template<
typename _Lhs,
typename _Rhs,
int Option>
72 typename internal::product_promote_storage_type<typename internal::traits<_Lhs>::StorageKind,
73 typename internal::traits<_Rhs>::StorageKind,
74 internal::product_type<_Lhs,_Rhs>::ret>::ret>
93 EIGEN_DEVICE_FUNC
Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
96 &&
"invalid matrix product" 97 &&
"if you wanted a coeff-wise or a dot product use the respective explicit functions");
100 EIGEN_DEVICE_FUNC
inline Index rows()
const {
return m_lhs.rows(); }
101 EIGEN_DEVICE_FUNC
inline Index cols()
const {
return m_rhs.cols(); }
114 template<typename Lhs, typename Rhs, int Option, int ProductTag = internal::product_type<Lhs,Rhs>::ret>
120 template<
typename Lhs,
typename Rhs,
int Option>
130 operator const Scalar()
const 139 template<
typename Lhs,
typename Rhs,
int Option,
typename StorageKind>
146 template<
typename Lhs,
typename Rhs,
int Option>
158 IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime ==
Dynamic) &&
159 (ColsAtCompileTime == 1 || ColsAtCompileTime ==
Dynamic),
186 #endif // EIGEN_PRODUCT_H #define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived)
EIGEN_DEVICE_FUNC Index rows() const
Expression of the product of two arbitrary matrices or vectors.
promote_index_type< typename LhsTraits::StorageIndex, typename RhsTraits::StorageIndex >::type StorageIndex
Product< Lhs, Rhs, Option > Derived
remove_all< Rhs >::type RhsCleaned
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
EIGEN_DEVICE_FUNC Scalar coeff(Index i) const
const unsigned int RowMajorBit
#define EIGEN_SIZE_MIN_PREFER_FIXED(a, b)
remove_all< Lhs >::type LhsCleaned
EIGEN_DEVICE_FUNC const LhsNestedCleaned & lhs() const
EIGEN_DEVICE_FUNC ColXpr col(Index i)
This is the const version of col().
traits< RhsCleaned > RhsTraits
ScalarBinaryOpTraits< typename traits< LhsCleaned >::Scalar, typename traits< RhsCleaned >::Scalar >::ReturnType Scalar
internal::generic_xpr_base< Product< Lhs, Rhs, Option >, MatrixXpr, StorageKind >::type Base
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
traits< LhsCleaned > LhsTraits
EIGEN_DEVICE_FUNC RowXpr row(Index i)
This is the const version of row(). */.
internal::dense_xpr_base< ProductXpr >::type Base
ProductImpl< Lhs, Rhs, Option, typename internal::product_promote_storage_type< typename internal::traits< Lhs >::StorageKind, typename internal::traits< Rhs >::StorageKind, internal::product_type< Lhs, Rhs >::ret >::ret >::Base Base
Product< Lhs, Rhs, Option > ProductXpr
#define EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
EIGEN_DEVICE_FUNC Scalar coeff(Index row, Index col) const
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
internal::dense_product_base< Lhs, Rhs, Option > Base
EIGEN_DEVICE_FUNC const RhsNestedCleaned & rhs() const
EIGEN_DEVICE_FUNC Index cols() const
const unsigned int NoPreferredStorageOrderBit
product_promote_storage_type< typename LhsTraits::StorageKind, typename RhsTraits::StorageKind, internal::product_type< Lhs, Rhs >::ret >::ret StorageKind