11#ifndef EIGEN_STL_FUNCTORS_H
12#define EIGEN_STL_FUNCTORS_H
15#include "../InternalHeaderCheck.h"
23struct functor_traits<std::multiplies<T> > {
24 enum { Cost = NumTraits<T>::MulCost, PacketAccess =
false };
28struct functor_traits<std::divides<T> > {
29 enum { Cost = NumTraits<T>::MulCost, PacketAccess =
false };
33struct functor_traits<std::plus<T> > {
34 enum { Cost = NumTraits<T>::AddCost, PacketAccess =
false };
38struct functor_traits<std::minus<T> > {
39 enum { Cost = NumTraits<T>::AddCost, PacketAccess =
false };
43struct functor_traits<std::negate<T> > {
44 enum { Cost = NumTraits<T>::AddCost, PacketAccess =
false };
48struct functor_traits<std::logical_or<T> > {
49 enum { Cost = 1, PacketAccess =
false };
53struct functor_traits<std::logical_and<T> > {
54 enum { Cost = 1, PacketAccess =
false };
58struct functor_traits<std::logical_not<T> > {
59 enum { Cost = 1, PacketAccess =
false };
63struct functor_traits<std::greater<T> > {
64 enum { Cost = 1, PacketAccess =
false };
68struct functor_traits<std::less<T> > {
69 enum { Cost = 1, PacketAccess =
false };
73struct functor_traits<std::greater_equal<T> > {
74 enum { Cost = 1, PacketAccess =
false };
78struct functor_traits<std::less_equal<T> > {
79 enum { Cost = 1, PacketAccess =
false };
83struct functor_traits<std::equal_to<T> > {
84 enum { Cost = 1, PacketAccess =
false };
88struct functor_traits<std::not_equal_to<T> > {
89 enum { Cost = 1, PacketAccess =
false };
92#if (EIGEN_COMP_CXXVER < 17)
95struct functor_traits<std::unary_negate<T> > {
96 enum { Cost = 1 + functor_traits<T>::Cost, PacketAccess =
false };
101struct functor_traits<std::binary_negate<T> > {
102 enum { Cost = 1 + functor_traits<T>::Cost, PacketAccess =
false };
106#ifdef EIGEN_STDEXT_SUPPORT
108template <
typename T0,
typename T1>
109struct functor_traits<std::project1st<T0, T1> > {
110 enum { Cost = 0, PacketAccess =
false };
113template <
typename T0,
typename T1>
114struct functor_traits<std::project2nd<T0, T1> > {
115 enum { Cost = 0, PacketAccess =
false };
118template <
typename T0,
typename T1>
119struct functor_traits<std::select2nd<std::pair<T0, T1> > > {
120 enum { Cost = 0, PacketAccess =
false };
123template <
typename T0,
typename T1>
124struct functor_traits<std::select1st<std::pair<T0, T1> > > {
125 enum { Cost = 0, PacketAccess =
false };
128template <
typename T0,
typename T1>
129struct functor_traits<std::unary_compose<T0, T1> > {
130 enum { Cost = functor_traits<T0>::Cost + functor_traits<T1>::Cost, PacketAccess =
false };
133template <
typename T0,
typename T1,
typename T2>
134struct functor_traits<std::binary_compose<T0, T1, T2> > {
135 enum { Cost = functor_traits<T0>::Cost + functor_traits<T1>::Cost + functor_traits<T2>::Cost, PacketAccess =
false };
142#ifdef EIGEN_FUNCTORS_PLUGIN
143#include EIGEN_FUNCTORS_PLUGIN