diff options
author | Gael Guennebaud <g.gael@free.fr> | 2011-08-18 10:19:25 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2011-08-18 10:19:25 +0200 |
commit | 5734ee6df42991e59609ffd26aaeb3c7aacd61e2 (patch) | |
tree | 50f7989d6cfbb58e95906c19c838c38a06d0def2 /Eigen/src/Core/Assign.h | |
parent | ca7d3dca79a8fa3db82ff7e15125d0a837ce73b2 (diff) |
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)
Diffstat (limited to 'Eigen/src/Core/Assign.h')
-rw-r--r-- | Eigen/src/Core/Assign.h | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h index 3a17152f0..7b553a7ce 100644 --- a/Eigen/src/Core/Assign.h +++ b/Eigen/src/Core/Assign.h @@ -251,21 +251,22 @@ struct assign_innervec_InnerUnrolling<Derived1, Derived2, Stop, Stop> template<typename Derived1, typename Derived2, 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; /************************ *** Default traversal *** ************************/ -template<typename Derived1, typename Derived2, int Unrolling> -struct assign_impl<Derived1, Derived2, InvalidTraversal, Unrolling> +template<typename Derived1, typename Derived2, int Unrolling, int Version> +struct assign_impl<Derived1, Derived2, InvalidTraversal, Unrolling, Version> { inline static void run(Derived1 &, const Derived2 &) { } }; -template<typename Derived1, typename Derived2> -struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; 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> -struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling, Version> { 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> -struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling, Version> { typedef typename Derived1::Index Index; EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) @@ -305,8 +306,8 @@ struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling> *** Linear traversal *** ***********************/ -template<typename Derived1, typename Derived2> -struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; 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> -struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling, Version> { EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) { @@ -331,8 +332,8 @@ struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling> *** Inner vectorization *** **************************/ -template<typename Derived1, typename Derived2> -struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, NoUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; 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> -struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, CompleteUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, CompleteUnrolling, Version> { 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> -struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, InnerUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, InnerVectorizedTraversal, InnerUnrolling, Version> { typedef typename Derived1::Index Index; 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> -struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, NoUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; 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> -struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnrolling, Version> { typedef typename Derived1::Index Index; EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) @@ -445,8 +446,8 @@ struct assign_impl<Derived1, Derived2, LinearVectorizedTraversal, CompleteUnroll *** Slice vectorization *** ***************************/ -template<typename Derived1, typename Derived2> -struct assign_impl<Derived1, Derived2, SliceVectorizedTraversal, NoUnrolling> +template<typename Derived1, typename Derived2, int Version> +struct assign_impl<Derived1, Derived2, SliceVectorizedTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; inline static void run(Derived1 &dst, const Derived2 &src) |