mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 03:39:01 +08:00
add the possibility to specialize assign_impl and still call the default implementations.
(yes I know this change will be deprecated as soon as the evaluators will be in shape but I need this now)
This commit is contained in:
parent
ca7d3dca79
commit
5734ee6df4
@ -251,21 +251,22 @@ struct assign_innervec_InnerUnrolling<Derived1, Derived2, Stop, Stop>
|
|||||||
|
|
||||||
template<typename Derived1, typename Derived2,
|
template<typename Derived1, typename Derived2,
|
||||||
int Traversal = assign_traits<Derived1, Derived2>::Traversal,
|
int Traversal = assign_traits<Derived1, Derived2>::Traversal,
|
||||||
int Unrolling = assign_traits<Derived1, Derived2>::Unrolling>
|
int Unrolling = assign_traits<Derived1, Derived2>::Unrolling,
|
||||||
|
int Version = Specialized>
|
||||||
struct assign_impl;
|
struct assign_impl;
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
*** Default traversal ***
|
*** Default traversal ***
|
||||||
************************/
|
************************/
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2, int Unrolling>
|
template<typename Derived1, typename Derived2, int Unrolling, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, InvalidTraversal, Unrolling>
|
struct assign_impl<Derived1, Derived2, InvalidTraversal, Unrolling, Version>
|
||||||
{
|
{
|
||||||
inline static void run(Derived1 &, const Derived2 &) { }
|
inline static void run(Derived1 &, const Derived2 &) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling>
|
struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
inline static void run(Derived1 &dst, const Derived2 &src)
|
inline static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -278,8 +279,8 @@ struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling>
|
struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling, Version>
|
||||||
{
|
{
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
{
|
{
|
||||||
@ -288,8 +289,8 @@ struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling>
|
struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -305,8 +306,8 @@ struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling>
|
|||||||
*** Linear traversal ***
|
*** Linear traversal ***
|
||||||
***********************/
|
***********************/
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling>
|
struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
inline static void run(Derived1 &dst, const Derived2 &src)
|
inline static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -317,8 +318,8 @@ struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling>
|
struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling, Version>
|
||||||
{
|
{
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
{
|
{
|
||||||
@ -331,8 +332,8 @@ struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling>
|
|||||||
*** Inner vectorization ***
|
*** Inner vectorization ***
|
||||||
**************************/
|
**************************/
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, NoUnrolling>
|
struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, NoUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
inline static void run(Derived1 &dst, const Derived2 &src)
|
inline static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -346,8 +347,8 @@ struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, NoUnrolling>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, CompleteUnrolling>
|
struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, CompleteUnrolling, Version>
|
||||||
{
|
{
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
{
|
{
|
||||||
@ -356,8 +357,8 @@ struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, CompleteUnrolli
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, InnerUnrolling>
|
struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, InnerUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -398,8 +399,8 @@ struct unaligned_assign_impl<false>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, NoUnrolling>
|
struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, NoUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -426,8 +427,8 @@ struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, NoUnrolling>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnrolling>
|
struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src)
|
||||||
@ -445,8 +446,8 @@ struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnroll
|
|||||||
*** Slice vectorization ***
|
*** Slice vectorization ***
|
||||||
***************************/
|
***************************/
|
||||||
|
|
||||||
template<typename Derived1, typename Derived2>
|
template<typename Derived1, typename Derived2, int Version>
|
||||||
struct assign_impl<Derived1, Derived2, SliceVectorizedTraversal, NoUnrolling>
|
struct assign_impl<Derived1, Derived2, SliceVectorizedTraversal, NoUnrolling, Version>
|
||||||
{
|
{
|
||||||
typedef typename Derived1::Index Index;
|
typedef typename Derived1::Index Index;
|
||||||
inline static void run(Derived1 &dst, const Derived2 &src)
|
inline static void run(Derived1 &dst, const Derived2 &src)
|
||||||
|
@ -253,6 +253,13 @@ enum {
|
|||||||
CompleteUnrolling
|
CompleteUnrolling
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** \internal \ingroup enums
|
||||||
|
* Enum to specify whether to use the default (built-in) implementation or the specialization. */
|
||||||
|
enum {
|
||||||
|
Specialized,
|
||||||
|
BuiltIn
|
||||||
|
};
|
||||||
|
|
||||||
/** \ingroup enums
|
/** \ingroup enums
|
||||||
* Enum containing possible values for the \p _Options template parameter of
|
* Enum containing possible values for the \p _Options template parameter of
|
||||||
* Matrix, Array and BandMatrix. */
|
* Matrix, Array and BandMatrix. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user