#ifndef EIGEN_ASSIGN_EVALUATOR_H
#define EIGEN_ASSIGN_EVALUATOR_H
#include "./InternalHeaderCheck.h"
namespace Eigen {
namespace internal {
template <typename DstEvaluator, typename SrcEvaluator, typename AssignFunc, int MaxPacketSize = -1>
struct copy_using_evaluator_traits { … };
template <typename Kernel, int Index, int Stop>
struct copy_using_evaluator_DefaultTraversal_CompleteUnrolling { … };
copy_using_evaluator_DefaultTraversal_CompleteUnrolling<Kernel, Stop, Stop>;
template <typename Kernel, int Index_, int Stop>
struct copy_using_evaluator_DefaultTraversal_InnerUnrolling { … };
copy_using_evaluator_DefaultTraversal_InnerUnrolling<Kernel, Stop, Stop>;
template <typename Kernel, int Index, int Stop>
struct copy_using_evaluator_LinearTraversal_CompleteUnrolling { … };
copy_using_evaluator_LinearTraversal_CompleteUnrolling<Kernel, Stop, Stop>;
template <typename Kernel, int Index, int Stop>
struct copy_using_evaluator_innervec_CompleteUnrolling { … };
copy_using_evaluator_innervec_CompleteUnrolling<Kernel, Stop, Stop>;
template <typename Kernel, int Index_, int Stop, int SrcAlignment, int DstAlignment>
struct copy_using_evaluator_innervec_InnerUnrolling { … };
copy_using_evaluator_innervec_InnerUnrolling<Kernel, Stop, Stop, SrcAlignment, DstAlignment>;
template <typename Kernel, int Traversal = Kernel::AssignmentTraits::Traversal,
int Unrolling = Kernel::AssignmentTraits::Unrolling>
struct dense_assignment_loop;
dense_assignment_loop<Kernel, AllAtOnceTraversal, Unrolling>;
dense_assignment_loop<Kernel, DefaultTraversal, NoUnrolling>;
dense_assignment_loop<Kernel, DefaultTraversal, CompleteUnrolling>;
dense_assignment_loop<Kernel, DefaultTraversal, InnerUnrolling>;
template <bool IsAligned = false>
struct unaligned_dense_assignment_loop { … };
template <>
struct unaligned_dense_assignment_loop<false> { … };
template <typename Kernel, int Index, int Stop>
struct copy_using_evaluator_linearvec_CompleteUnrolling { … };
copy_using_evaluator_linearvec_CompleteUnrolling<Kernel, Stop, Stop>;
dense_assignment_loop<Kernel, LinearVectorizedTraversal, NoUnrolling>;
dense_assignment_loop<Kernel, LinearVectorizedTraversal, CompleteUnrolling>;
dense_assignment_loop<Kernel, InnerVectorizedTraversal, NoUnrolling>;
dense_assignment_loop<Kernel, InnerVectorizedTraversal, CompleteUnrolling>;
dense_assignment_loop<Kernel, InnerVectorizedTraversal, InnerUnrolling>;
dense_assignment_loop<Kernel, LinearTraversal, NoUnrolling>;
dense_assignment_loop<Kernel, LinearTraversal, CompleteUnrolling>;
dense_assignment_loop<Kernel, SliceVectorizedTraversal, NoUnrolling>;
#if EIGEN_UNALIGNED_VECTORIZE
dense_assignment_loop<Kernel, SliceVectorizedTraversal, InnerUnrolling>;
#endif
template <typename DstEvaluatorTypeT, typename SrcEvaluatorTypeT, typename Functor, int Version = Specialized>
class generic_dense_assignment_kernel { … };
template <typename DstEvaluatorTypeT, typename SrcEvaluatorTypeT, typename Functor>
class restricted_packet_dense_assignment_kernel
: public generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, BuiltIn> { … };
template <typename DstXprType, typename SrcXprType, typename Functor>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed(DstXprType& dst, const SrcXprType& src,
const Functor& ) { … }
template <typename DstXprType, typename SrcXprType, typename T1, typename T2>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed(DstXprType& dst, const SrcXprType& src,
const internal::assign_op<T1, T2>& ) { … }
template <typename DstXprType, typename SrcXprType, typename Functor>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_dense_assignment_loop(DstXprType& dst,
const SrcXprType& src,
const Functor& func) { … }
#ifndef EIGEN_GPU_COMPILE_PHASE
template <typename DstXprType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_dense_assignment_loop(
DstXprType& dst,
const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<typename DstXprType::Scalar>, DstXprType>& src,
const internal::assign_op<typename DstXprType::Scalar, typename DstXprType::Scalar>& func) { … }
#endif
template <typename DstXprType, typename SrcXprType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_dense_assignment_loop(DstXprType& dst, const SrcXprType& src) { … }
template <typename DstShape, typename SrcShape>
struct AssignmentKind;
struct Dense2Dense { … };
struct EigenBase2EigenBase { … };
template <typename, typename>
struct AssignmentKind { … };
template <>
struct AssignmentKind<DenseShape, DenseShape> { … };
template <typename DstXprType, typename SrcXprType, typename Functor,
typename Kind = typename AssignmentKind<typename evaluator_traits<DstXprType>::Shape,
typename evaluator_traits<SrcXprType>::Shape>::Kind,
typename EnableIf = void>
struct Assignment;
template <typename Dst, typename Src>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment(Dst& dst, const Src& src) { … }
template <typename Dst, typename Src>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment(const Dst& dst, const Src& src) { … }
template <typename Dst, typename Src, typename Func>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment(
Dst& dst, const Src& src, const Func& func, std::enable_if_t<evaluator_assume_aliasing<Src>::value, void*> = 0) { … }
template <typename Dst, typename Src, typename Func>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment(
Dst& dst, const Src& src, const Func& func, std::enable_if_t<!evaluator_assume_aliasing<Src>::value, void*> = 0) { … }
template <typename Dst, template <typename> class StorageBase, typename Src, typename Func>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment(NoAlias<Dst, StorageBase>& dst,
const Src& src, const Func& func) { … }
template <typename Dst, typename Src, typename Func>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias(Dst& dst, const Src& src,
const Func& func) { … }
template <typename Dst, typename Src, typename Func>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_restricted_packet_assignment_no_alias(Dst& dst, const Src& src,
const Func& func) { … }
template <typename Dst, typename Src>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias(Dst& dst, const Src& src) { … }
template <typename Dst, typename Src, typename Func>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias_no_transpose(Dst& dst,
const Src& src,
const Func& func) { … }
template <typename Dst, typename Src>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias_no_transpose(Dst& dst,
const Src& src) { … }
template <typename Dst, typename Src>
EIGEN_DEVICE_FUNC void check_for_aliasing(const Dst& dst, const Src& src);
Assignment<DstXprType, SrcXprType, Functor, Dense2Dense, Weak>;
Assignment<DstXprType, SrcXprType, Functor, EigenBase2EigenBase, Weak>;
}
}
#endif