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,
43 InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(LhsTraits::ColsAtCompileTime, RhsTraits::RowsAtCompileTime),
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>
86 EIGEN_GENERIC_PUBLIC_INTERFACE(
Product)
93 EIGEN_DEVICE_FUNC
Product(
const Lhs& lhs,
const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
95 eigen_assert(lhs.cols() == rhs.rows()
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(); }
103 EIGEN_DEVICE_FUNC
const LhsNestedCleaned& lhs()
const {
return m_lhs; }
104 EIGEN_DEVICE_FUNC
const RhsNestedCleaned& rhs()
const {
return m_rhs; }
114 template<typename Lhs, typename Rhs, int Option, int ProductTag = internal::product_type<Lhs,Rhs>::ret>
120 template<
typename Lhs,
typename Rhs,
int Option>
128 typedef typename Base::Scalar Scalar;
130 operator const Scalar()
const 139 template<
typename Lhs,
typename Rhs,
int Option,
typename StorageKind>
146 template<
typename Lhs,
typename Rhs,
int Option>
155 EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
158 IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime ==
Dynamic) &&
159 (ColsAtCompileTime == 1 || ColsAtCompileTime ==
Dynamic),
160 EnableCoeff = IsOneByOne || Option==LazyProduct
165 EIGEN_DEVICE_FUNC Scalar coeff(
Index row,
Index col)
const 167 EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
168 eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
173 EIGEN_DEVICE_FUNC Scalar coeff(
Index i)
const 175 EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
176 eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
186 #endif // EIGEN_PRODUCT_H Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:71
Definition: CoreEvaluators.h:90
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:85
const unsigned int RowMajorBit
for a matrix, this means that the storage order is row-major.
Definition: Constants.h:61
Definition: XprHelper.h:463
The type used to identify a matrix expression.
Definition: Constants.h:506
Definition: GeneralProduct.h:36
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
Definition: Product.h:115
Definition: BandTriangularSolver.h:13
The type used to identify a dense storage.
Definition: Constants.h:491
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition: XprHelper.h:757
Definition: XprHelper.h:481
const int Dynamic
This value means that a positive quantity (e.g., a size) is not known at compile-time, and that instead the value is stored in some runtime variable.
Definition: Constants.h:21
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition: CwiseUnaryOp.h:55
Definition: ForwardDeclarations.h:17
const unsigned int NoPreferredStorageOrderBit
for an expression, this means that the storage order can be either row-major or column-major.
Definition: Constants.h:173