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>
94 Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
97 &&
"invalid matrix product" 98 &&
"if you wanted a coeff-wise or a dot product use the respective explicit functions");
125 template<
typename Lhs,
typename Rhs,
int Option>
144 template<
typename Lhs,
typename Rhs,
int Option,
typename StorageKind>
151 template<
typename Lhs,
typename Rhs,
int Option>
163 IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime ==
Dynamic) &&
164 (ColsAtCompileTime == 1 || ColsAtCompileTime ==
Dynamic),
191 #endif // EIGEN_PRODUCT_H
#define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived)
#define EIGEN_STRONG_INLINE
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
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
remove_all< Rhs >::type RhsCleaned
Namespace containing all symbols from the Eigen library.
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
const unsigned int RowMajorBit
#define EIGEN_SIZE_MIN_PREFER_FIXED(a, b)
remove_all< Lhs >::type LhsCleaned
traits< RhsCleaned > RhsTraits
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(Index i) const
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
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
#define EIGEN_DEVICE_FUNC
Product< Lhs, Rhs, Option > ProductXpr
#define EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const LhsNestedCleaned & lhs() const
Generic expression where a coefficient-wise unary operator is applied to an expression.
internal::dense_product_base< Lhs, Rhs, Option > Base
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const RhsNestedCleaned & rhs() const
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(Index row, Index col) const
const unsigned int NoPreferredStorageOrderBit
product_promote_storage_type< typename LhsTraits::StorageKind, typename RhsTraits::StorageKind, internal::product_type< Lhs, Rhs >::ret >::ret StorageKind