#ifndef EIGEN_COREEVALUATORS_H
#define EIGEN_COREEVALUATORS_H
#include "./InternalHeaderCheck.h"
namespace Eigen {
namespace internal {
template <typename StorageKind>
struct storage_kind_to_evaluator_kind { … };
template <typename StorageKind>
struct storage_kind_to_shape;
template <>
struct storage_kind_to_shape<Dense> { … };
template <>
struct storage_kind_to_shape<SolverStorage> { … };
template <>
struct storage_kind_to_shape<PermutationStorage> { … };
template <>
struct storage_kind_to_shape<TranspositionsStorage> { … };
template <typename T, typename Arg1Kind = typename evaluator_traits<typename T::Arg1>::Kind,
typename Arg2Kind = typename evaluator_traits<typename T::Arg2>::Kind,
typename Arg3Kind = typename evaluator_traits<typename T::Arg3>::Kind,
typename Arg1Scalar = typename traits<typename T::Arg1>::Scalar,
typename Arg2Scalar = typename traits<typename T::Arg2>::Scalar,
typename Arg3Scalar = typename traits<typename T::Arg3>::Scalar>
struct ternary_evaluator;
template <typename T, typename LhsKind = typename evaluator_traits<typename T::Lhs>::Kind,
typename RhsKind = typename evaluator_traits<typename T::Rhs>::Kind,
typename LhsScalar = typename traits<typename T::Lhs>::Scalar,
typename RhsScalar = typename traits<typename T::Rhs>::Scalar>
struct binary_evaluator;
template <typename T, typename Kind = typename evaluator_traits<typename T::NestedExpression>::Kind,
typename Scalar = typename T::Scalar>
struct unary_evaluator;
template <typename T>
struct evaluator_traits_base { … };
template <typename T>
struct evaluator_traits : public evaluator_traits_base<T> { … };
template <typename T, typename Shape = typename evaluator_traits<T>::Shape>
struct evaluator_assume_aliasing { … };
template <typename T>
struct evaluator : public unary_evaluator<T> { … };
evaluator<const T>;
template <typename ExpressionType>
struct evaluator_base { … };
template <typename Scalar, int OuterStride>
class plainobjectbase_evaluator_data { … };
plainobjectbase_evaluator_data<Scalar, Dynamic>;
evaluator<PlainObjectBase<Derived>>;
evaluator<Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols>>;
evaluator<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols>>;
unary_evaluator<Transpose<ArgType>, IndexBased>;
template <typename Scalar, typename NullaryOp, bool has_nullary = has_nullary_operator<NullaryOp>::value,
bool has_unary = has_unary_operator<NullaryOp>::value,
bool has_binary = has_binary_operator<NullaryOp>::value>
struct nullary_wrapper { … };
nullary_wrapper<Scalar, NullaryOp, true, false, false>;
nullary_wrapper<Scalar, NullaryOp, false, false, true>;
nullary_wrapper<Scalar, NullaryOp, false, true, false>;
nullary_wrapper<Scalar, NullaryOp, false, false, false>;
#if 0 && EIGEN_COMP_MSVC > 0
template<typename T> struct nullary_wrapper_workaround_msvc {
nullary_wrapper_workaround_msvc(const T&);
operator T()const;
};
template<typename Scalar,typename NullaryOp>
struct nullary_wrapper<Scalar,NullaryOp,true,true,true>
{
template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const NullaryOp& op, IndexType i, IndexType j) const {
return nullary_wrapper<Scalar,NullaryOp,
has_nullary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_unary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_binary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value>().operator()(op,i,j);
}
template <typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const NullaryOp& op, IndexType i) const {
return nullary_wrapper<Scalar,NullaryOp,
has_nullary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_unary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_binary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value>().operator()(op,i);
}
template <typename T, typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T packetOp(const NullaryOp& op, IndexType i, IndexType j) const {
return nullary_wrapper<Scalar,NullaryOp,
has_nullary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_unary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_binary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value>().template packetOp<T>(op,i,j);
}
template <typename T, typename IndexType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T packetOp(const NullaryOp& op, IndexType i) const {
return nullary_wrapper<Scalar,NullaryOp,
has_nullary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_unary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value,
has_binary_operator<NullaryOp,nullary_wrapper_workaround_msvc<IndexType> >::value>().template packetOp<T>(op,i);
}
};
#endif
evaluator<CwiseNullaryOp<NullaryOp, PlainObjectType>>;
unary_evaluator<CwiseUnaryOp<UnaryOp, ArgType>, IndexBased>;
unary_evaluator<CwiseUnaryOp<core_cast_op<SrcType, DstType>, ArgType>, IndexBased>;
evaluator<CwiseTernaryOp<TernaryOp, Arg1, Arg2, Arg3>>;
ternary_evaluator<CwiseTernaryOp<TernaryOp, Arg1, Arg2, Arg3>, IndexBased, IndexBased>;
evaluator<CwiseTernaryOp<scalar_boolean_select_op<Scalar, Scalar, bool>, Arg1, Arg2, CwiseBinaryOp<scalar_cmp_op<Scalar, Scalar, cmp, false>, CmpLhsType, CmpRhsType>>>;
evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>>;
binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IndexBased, IndexBased>;
unary_evaluator<CwiseUnaryView<UnaryOp, ArgType, StrideType>, IndexBased>;
template <typename Derived, typename PlainObjectType>
struct mapbase_evaluator;
template <typename Derived, typename PlainObjectType>
struct mapbase_evaluator : evaluator_base<Derived> { … };
evaluator<Map<PlainObjectType, MapOptions, StrideType>>;
evaluator<Ref<PlainObjectType, RefOptions, StrideType>>;
template <typename ArgType, int BlockRows, int BlockCols, bool InnerPanel,
bool HasDirectAccess = internal::has_direct_access<ArgType>::ret>
struct block_evaluator;
evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>>;
block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel, false>;
unary_evaluator<Block<ArgType, BlockRows, BlockCols, InnerPanel>, IndexBased>;
block_evaluator<ArgType, BlockRows, BlockCols, InnerPanel, true>;
evaluator<Select<ConditionMatrixType, ThenMatrixType, ElseMatrixType>>;
unary_evaluator<Replicate<ArgType, RowFactor, ColFactor>>;
template <typename XprType>
struct evaluator_wrapper_base : evaluator_base<XprType> { … };
unary_evaluator<MatrixWrapper<TArgType>>;
unary_evaluator<ArrayWrapper<TArgType>>;
template <typename PacketType, bool ReversePacket>
struct reverse_packet_cond;
unary_evaluator<Reverse<ArgType, Direction>>;
evaluator<Diagonal<ArgType, DiagIndex>>;
template <typename ArgType>
class EvalToTemp;
traits<EvalToTemp<ArgType>>;
template <typename ArgType>
class EvalToTemp : public dense_xpr_base<EvalToTemp<ArgType>>::type { … };
evaluator<EvalToTemp<ArgType>>;
}
}
#endif