mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-14 12:46:00 +08:00
Re-enable some specializations for Assignment<.,Product<>>
This commit is contained in:
parent
155d8d8603
commit
367ef66af3
@ -816,8 +816,10 @@ void call_assignment_no_alias_no_transpose(Dst& dst, const Src& src)
|
|||||||
template<typename Dst, typename Src> void check_for_aliasing(const Dst &dst, const Src &src);
|
template<typename Dst, typename Src> void check_for_aliasing(const Dst &dst, const Src &src);
|
||||||
|
|
||||||
// Generic Dense to Dense assignment
|
// Generic Dense to Dense assignment
|
||||||
template< typename DstXprType, typename SrcXprType, typename Functor>
|
// Note that the last template argument "Weak" is needed to make it possible to perform
|
||||||
struct Assignment<DstXprType, SrcXprType, Functor, Dense2Dense>
|
// both partial specialization+SFINAE without ambiguous specialization
|
||||||
|
template< typename DstXprType, typename SrcXprType, typename Functor, typename Weak>
|
||||||
|
struct Assignment<DstXprType, SrcXprType, Functor, Dense2Dense, Weak>
|
||||||
{
|
{
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
|
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
|
||||||
@ -834,8 +836,10 @@ struct Assignment<DstXprType, SrcXprType, Functor, Dense2Dense>
|
|||||||
|
|
||||||
// Generic assignment through evalTo.
|
// Generic assignment through evalTo.
|
||||||
// TODO: not sure we have to keep that one, but it helps porting current code to new evaluator mechanism.
|
// TODO: not sure we have to keep that one, but it helps porting current code to new evaluator mechanism.
|
||||||
template< typename DstXprType, typename SrcXprType, typename Functor>
|
// Note that the last template argument "Weak" is needed to make it possible to perform
|
||||||
struct Assignment<DstXprType, SrcXprType, Functor, EigenBase2EigenBase>
|
// both partial specialization+SFINAE without ambiguous specialization
|
||||||
|
template< typename DstXprType, typename SrcXprType, typename Functor, typename Weak>
|
||||||
|
struct Assignment<DstXprType, SrcXprType, Functor, EigenBase2EigenBase, Weak>
|
||||||
{
|
{
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> &/*func*/)
|
static EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> &/*func*/)
|
||||||
|
@ -134,7 +134,7 @@ protected:
|
|||||||
// Dense = Product
|
// Dense = Product
|
||||||
template< typename DstXprType, typename Lhs, typename Rhs, int Options, typename Scalar>
|
template< typename DstXprType, typename Lhs, typename Rhs, int Options, typename Scalar>
|
||||||
struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::assign_op<Scalar,Scalar>, Dense2Dense,
|
struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::assign_op<Scalar,Scalar>, Dense2Dense,
|
||||||
typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct),Scalar>::type>
|
typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct)>::type>
|
||||||
{
|
{
|
||||||
typedef Product<Lhs,Rhs,Options> SrcXprType;
|
typedef Product<Lhs,Rhs,Options> SrcXprType;
|
||||||
static EIGEN_STRONG_INLINE
|
static EIGEN_STRONG_INLINE
|
||||||
@ -148,7 +148,7 @@ struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::assign_op<Scal
|
|||||||
// Dense += Product
|
// Dense += Product
|
||||||
template< typename DstXprType, typename Lhs, typename Rhs, int Options, typename Scalar>
|
template< typename DstXprType, typename Lhs, typename Rhs, int Options, typename Scalar>
|
||||||
struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::add_assign_op<Scalar,Scalar>, Dense2Dense,
|
struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::add_assign_op<Scalar,Scalar>, Dense2Dense,
|
||||||
typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct),Scalar>::type>
|
typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct)>::type>
|
||||||
{
|
{
|
||||||
typedef Product<Lhs,Rhs,Options> SrcXprType;
|
typedef Product<Lhs,Rhs,Options> SrcXprType;
|
||||||
static EIGEN_STRONG_INLINE
|
static EIGEN_STRONG_INLINE
|
||||||
@ -162,7 +162,7 @@ struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::add_assign_op<
|
|||||||
// Dense -= Product
|
// Dense -= Product
|
||||||
template< typename DstXprType, typename Lhs, typename Rhs, int Options, typename Scalar>
|
template< typename DstXprType, typename Lhs, typename Rhs, int Options, typename Scalar>
|
||||||
struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::sub_assign_op<Scalar,Scalar>, Dense2Dense,
|
struct Assignment<DstXprType, Product<Lhs,Rhs,Options>, internal::sub_assign_op<Scalar,Scalar>, Dense2Dense,
|
||||||
typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct),Scalar>::type>
|
typename enable_if<(Options==DefaultProduct || Options==AliasFreeProduct)>::type>
|
||||||
{
|
{
|
||||||
typedef Product<Lhs,Rhs,Options> SrcXprType;
|
typedef Product<Lhs,Rhs,Options> SrcXprType;
|
||||||
static EIGEN_STRONG_INLINE
|
static EIGEN_STRONG_INLINE
|
||||||
|
@ -145,7 +145,7 @@ struct is_convertible
|
|||||||
/** \internal Allows to enable/disable an overload
|
/** \internal Allows to enable/disable an overload
|
||||||
* according to a compile time condition.
|
* according to a compile time condition.
|
||||||
*/
|
*/
|
||||||
template<bool Condition, typename T> struct enable_if;
|
template<bool Condition, typename T=void> struct enable_if;
|
||||||
|
|
||||||
template<typename T> struct enable_if<true,T>
|
template<typename T> struct enable_if<true,T>
|
||||||
{ typedef T type; };
|
{ typedef T type; };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user