mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 11:19:02 +08:00
Implement evaluator for CwiseUnaryView
This commit is contained in:
parent
cca7b146a2
commit
11ea81858a
@ -259,7 +259,7 @@ struct evaluator_impl<CwiseUnaryOp<UnaryOp, ArgType> >
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const UnaryOpType& m_unaryOp;
|
const UnaryOpType m_unaryOp;
|
||||||
typename evaluator<ArgType>::type m_argImpl;
|
typename evaluator<ArgType>::type m_argImpl;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -304,6 +304,47 @@ protected:
|
|||||||
typename evaluator<Rhs>::type m_rhsImpl;
|
typename evaluator<Rhs>::type m_rhsImpl;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// -------------------- CwiseUnaryView --------------------
|
||||||
|
|
||||||
|
template<typename UnaryOp, typename ArgType>
|
||||||
|
struct evaluator_impl<CwiseUnaryView<UnaryOp, ArgType> >
|
||||||
|
{
|
||||||
|
typedef CwiseUnaryView<UnaryOp, ArgType> CwiseUnaryViewType;
|
||||||
|
|
||||||
|
evaluator_impl(const CwiseUnaryViewType& op)
|
||||||
|
: m_unaryOp(op.functor()),
|
||||||
|
m_argImpl(op.nestedExpression())
|
||||||
|
{ }
|
||||||
|
|
||||||
|
typedef typename CwiseUnaryViewType::Index Index;
|
||||||
|
typedef typename CwiseUnaryViewType::Scalar Scalar;
|
||||||
|
typedef typename CwiseUnaryViewType::CoeffReturnType CoeffReturnType;
|
||||||
|
|
||||||
|
CoeffReturnType coeff(Index row, Index col) const
|
||||||
|
{
|
||||||
|
return m_unaryOp(m_argImpl.coeff(row, col));
|
||||||
|
}
|
||||||
|
|
||||||
|
CoeffReturnType coeff(Index index) const
|
||||||
|
{
|
||||||
|
return m_unaryOp(m_argImpl.coeff(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
Scalar& coeffRef(Index row, Index col)
|
||||||
|
{
|
||||||
|
return m_unaryOp(m_argImpl.coeffRef(row, col));
|
||||||
|
}
|
||||||
|
|
||||||
|
Scalar& coeffRef(Index index)
|
||||||
|
{
|
||||||
|
return m_unaryOp(m_argImpl.coeffRef(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
const UnaryOp& m_unaryOp;
|
||||||
|
typename evaluator<ArgType>::type m_argImpl;
|
||||||
|
};
|
||||||
|
|
||||||
// -------------------- Product --------------------
|
// -------------------- Product --------------------
|
||||||
|
|
||||||
template<typename Lhs, typename Rhs>
|
template<typename Lhs, typename Rhs>
|
||||||
|
@ -143,7 +143,7 @@ void test_evaluators()
|
|||||||
mXref.block(4, 4, 9, 12) = mXsrc;
|
mXref.block(4, 4, 9, 12) = mXsrc;
|
||||||
VERIFY_IS_APPROX(mX, mXref);
|
VERIFY_IS_APPROX(mX, mXref);
|
||||||
|
|
||||||
// Testing Map
|
// test Map
|
||||||
const float raw[3] = {1,2,3};
|
const float raw[3] = {1,2,3};
|
||||||
float buffer[3] = {0,0,0};
|
float buffer[3] = {0,0,0};
|
||||||
Vector3f v3;
|
Vector3f v3;
|
||||||
@ -154,4 +154,14 @@ void test_evaluators()
|
|||||||
VERIFY(buffer[0] == 2);
|
VERIFY(buffer[0] == 2);
|
||||||
VERIFY(buffer[1] == 4);
|
VERIFY(buffer[1] == 4);
|
||||||
VERIFY(buffer[2] == 6);
|
VERIFY(buffer[2] == 6);
|
||||||
|
|
||||||
|
// test CwiseUnaryView
|
||||||
|
mat1.setRandom();
|
||||||
|
mat2.setIdentity();
|
||||||
|
MatrixXcd matXcd(6,6), matXcd_ref(6,6);
|
||||||
|
copy_using_evaluator(matXcd.real(), mat1);
|
||||||
|
copy_using_evaluator(matXcd.imag(), mat2);
|
||||||
|
matXcd_ref.real() = mat1;
|
||||||
|
matXcd_ref.imag() = mat2;
|
||||||
|
VERIFY_IS_APPROX(matXcd, matXcd_ref);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user