mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Product::coeff method are also OK for lazy products (including diagonal products)
This commit is contained in:
parent
99e27916cf
commit
0543cb51b5
@ -117,27 +117,38 @@ template<typename Lhs, typename Rhs, int Option>
|
|||||||
class ProductImpl<Lhs,Rhs,Option,Dense>
|
class ProductImpl<Lhs,Rhs,Option,Dense>
|
||||||
: public internal::dense_product_base<Lhs,Rhs,Option>
|
: public internal::dense_product_base<Lhs,Rhs,Option>
|
||||||
{
|
{
|
||||||
typedef Product<Lhs, Rhs> Derived;
|
typedef Product<Lhs, Rhs, Option> Derived;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef typename internal::dense_product_base<Lhs, Rhs, Option> Base;
|
typedef typename internal::dense_product_base<Lhs, Rhs, Option> Base;
|
||||||
EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
|
EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
|
||||||
|
protected:
|
||||||
|
enum {
|
||||||
|
IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime == Dynamic) &&
|
||||||
|
(ColsAtCompileTime == 1 || ColsAtCompileTime == Dynamic),
|
||||||
|
EnableCoeff = IsOneByOne || Option==LazyProduct
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
Scalar coeff(Index row, Index col) const
|
Scalar coeff(Index row, Index col) const
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT_SIZE_1x1(Derived)
|
EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
|
||||||
eigen_assert(this->rows() == 1 && this->cols() == 1);
|
eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
|
||||||
|
|
||||||
return typename internal::evaluator<Derived>::type(derived()).coeff(row,col);
|
return typename internal::evaluator<Derived>::type(derived()).coeff(row,col);
|
||||||
}
|
}
|
||||||
|
|
||||||
Scalar coeff(Index i) const
|
Scalar coeff(Index i) const
|
||||||
{
|
{
|
||||||
EIGEN_STATIC_ASSERT_SIZE_1x1(Derived)
|
EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
|
||||||
eigen_assert(this->rows() == 1 && this->cols() == 1);
|
eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
|
||||||
|
|
||||||
return typename internal::evaluator<Derived>::type(derived()).coeff(i);
|
return typename internal::evaluator<Derived>::type(derived()).coeff(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -84,6 +84,7 @@
|
|||||||
THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY,
|
THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY,
|
||||||
YOU_ARE_TRYING_TO_USE_AN_INDEX_BASED_ACCESSOR_ON_AN_EXPRESSION_THAT_DOES_NOT_SUPPORT_THAT,
|
YOU_ARE_TRYING_TO_USE_AN_INDEX_BASED_ACCESSOR_ON_AN_EXPRESSION_THAT_DOES_NOT_SUPPORT_THAT,
|
||||||
THIS_METHOD_IS_ONLY_FOR_1x1_EXPRESSIONS,
|
THIS_METHOD_IS_ONLY_FOR_1x1_EXPRESSIONS,
|
||||||
|
THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS,
|
||||||
THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL,
|
THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL,
|
||||||
THIS_METHOD_IS_ONLY_FOR_ARRAYS_NOT_MATRICES,
|
THIS_METHOD_IS_ONLY_FOR_ARRAYS_NOT_MATRICES,
|
||||||
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED,
|
YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user