10 #ifndef EIGEN_STL_FUNCTORS_H
11 #define EIGEN_STL_FUNCTORS_H
18 template<
typename T =
void>
20 typedef bool result_type;
21 EIGEN_DEVICE_FUNC
bool operator()(
const T& lhs,
const T& rhs)
const {
26 template<
typename T =
void>
28 typedef bool result_type;
29 EIGEN_DEVICE_FUNC
bool operator()(
const T& lhs,
const T& rhs)
const {
42 struct functor_traits<std::multiplies<T> >
43 {
enum { Cost = NumTraits<T>::MulCost, PacketAccess =
false }; };
46 struct functor_traits<std::divides<T> >
47 {
enum { Cost = NumTraits<T>::MulCost, PacketAccess =
false }; };
50 struct functor_traits<std::plus<T> >
51 {
enum { Cost = NumTraits<T>::AddCost, PacketAccess =
false }; };
54 struct functor_traits<std::minus<T> >
55 {
enum { Cost = NumTraits<T>::AddCost, PacketAccess =
false }; };
58 struct functor_traits<std::negate<T> >
59 {
enum { Cost = NumTraits<T>::AddCost, PacketAccess =
false }; };
62 struct functor_traits<std::logical_or<T> >
63 {
enum { Cost = 1, PacketAccess =
false }; };
66 struct functor_traits<std::logical_and<T> >
67 {
enum { Cost = 1, PacketAccess =
false }; };
70 struct functor_traits<std::logical_not<T> >
71 {
enum { Cost = 1, PacketAccess =
false }; };
74 struct functor_traits<std::greater<T> >
75 {
enum { Cost = 1, PacketAccess =
false }; };
78 struct functor_traits<std::less<T> >
79 {
enum { Cost = 1, PacketAccess =
false }; };
82 struct functor_traits<std::greater_equal<T> >
83 {
enum { Cost = 1, PacketAccess =
false }; };
86 struct functor_traits<std::less_equal<T> >
87 {
enum { Cost = 1, PacketAccess =
false }; };
90 struct functor_traits<std::equal_to<T> >
91 {
enum { Cost = 1, PacketAccess =
false }; };
94 struct functor_traits<numext::equal_to<T> >
95 : functor_traits<std::equal_to<T> > {};
98 struct functor_traits<std::not_equal_to<T> >
99 {
enum { Cost = 1, PacketAccess =
false }; };
102 struct functor_traits<numext::not_equal_to<T> >
103 : functor_traits<std::not_equal_to<T> > {};
105 #if (EIGEN_COMP_CXXVER < 11)
108 struct functor_traits<std::binder2nd<T> >
109 {
enum { Cost = functor_traits<T>::Cost, PacketAccess =
false }; };
112 struct functor_traits<std::binder1st<T> >
113 {
enum { Cost = functor_traits<T>::Cost, PacketAccess =
false }; };
116 #if (EIGEN_COMP_CXXVER < 17)
119 struct functor_traits<std::unary_negate<T> >
120 {
enum { Cost = 1 + functor_traits<T>::Cost, PacketAccess =
false }; };
124 struct functor_traits<std::binary_negate<T> >
125 {
enum { Cost = 1 + functor_traits<T>::Cost, PacketAccess =
false }; };
128 #ifdef EIGEN_STDEXT_SUPPORT
130 template<
typename T0,
typename T1>
131 struct functor_traits<std::project1st<T0,T1> >
132 {
enum { Cost = 0, PacketAccess =
false }; };
134 template<
typename T0,
typename T1>
135 struct functor_traits<std::project2nd<T0,T1> >
136 {
enum { Cost = 0, PacketAccess =
false }; };
138 template<
typename T0,
typename T1>
139 struct functor_traits<std::select2nd<std::pair<T0,T1> > >
140 {
enum { Cost = 0, PacketAccess =
false }; };
142 template<
typename T0,
typename T1>
143 struct functor_traits<std::select1st<std::pair<T0,T1> > >
144 {
enum { Cost = 0, PacketAccess =
false }; };
146 template<
typename T0,
typename T1>
147 struct functor_traits<std::unary_compose<T0,T1> >
148 {
enum { Cost = functor_traits<T0>::Cost + functor_traits<T1>::Cost, PacketAccess =
false }; };
150 template<
typename T0,
typename T1,
typename T2>
151 struct functor_traits<std::binary_compose<T0,T1,T2> >
152 {
enum { Cost = functor_traits<T0>::Cost + functor_traits<T1>::Cost + functor_traits<T2>::Cost, PacketAccess =
false }; };
154 #endif // EIGEN_STDEXT_SUPPORT
158 #ifdef EIGEN_FUNCTORS_PLUGIN
159 #include EIGEN_FUNCTORS_PLUGIN
166 #endif // EIGEN_STL_FUNCTORS_H