Thrust
functional.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008-2018 NVIDIA Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 
22 #pragma once
23 
24 #include <thrust/detail/config.h>
25 #include <functional>
26 #include <thrust/detail/functional/placeholder.h>
27 
28 THRUST_NAMESPACE_BEGIN
29 
33 template<typename Operation> struct unary_traits;
34 
35 template<typename Operation> struct binary_traits;
36 
67 template<typename Argument,
68  typename Result>
70 {
74  typedef Argument argument_type;
75 
79  typedef Result result_type;
80 }; // end unary_function
81 
107 template<typename Argument1,
108  typename Argument2,
109  typename Result>
111 {
115  typedef Argument1 first_argument_type;
116 
120  typedef Argument2 second_argument_type;
121 
125  typedef Result result_type;
126 }; // end binary_function
127 
141 #define THRUST_UNARY_FUNCTOR_VOID_SPECIALIZATION(func, impl) \
142  template <> \
143  struct func<void> \
144  { \
145  using is_transparent = void; \
146  __thrust_exec_check_disable__ \
147  template <typename T> \
148  __host__ __device__ \
149  constexpr auto operator()(T&& x) const \
150  noexcept(noexcept(impl)) THRUST_TRAILING_RETURN(decltype(impl)) \
151  { \
152  return impl; \
153  } \
154  }
155 
156 #define THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION(func, impl) \
157  template <> \
158  struct func<void> \
159  { \
160  using is_transparent = void; \
161  __thrust_exec_check_disable__ \
162  template <typename T1, typename T2> \
163  __host__ __device__ \
164  constexpr auto operator()(T1&& t1, T2&& t2) const \
165  noexcept(noexcept(impl)) THRUST_TRAILING_RETURN(decltype(impl)) \
166  { \
167  return impl; \
168  } \
169  }
170 
171 #define THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(func, op) \
172  THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION( \
173  func, THRUST_FWD(t1) op THRUST_FWD(t2))
174 
175 
209 template<typename T = void>
210 struct plus
211 {
215  typedef T first_argument_type;
216 
220  typedef T second_argument_type;
221 
225  typedef T result_type;
226 
229  __thrust_exec_check_disable__
230  __host__ __device__
231  constexpr T operator()(const T &lhs, const T &rhs) const
232  {
233  return lhs + rhs;
234  }
235 }; // end plus
236 
237 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(plus, +);
238 
272 template<typename T = void>
273 struct minus
274 {
278  typedef T first_argument_type;
279 
283  typedef T second_argument_type;
284 
288  typedef T result_type;
289 
292  __thrust_exec_check_disable__
293  __host__ __device__
294  constexpr T operator()(const T &lhs, const T &rhs) const
295  {
296  return lhs - rhs;
297  }
298 }; // end minus
299 
300 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(minus, -);
301 
335 template<typename T = void>
336 struct multiplies
337 {
341  typedef T first_argument_type;
342 
346  typedef T second_argument_type;
347 
351  typedef T result_type;
352 
355  __thrust_exec_check_disable__
356  __host__ __device__
357  constexpr T operator()(const T &lhs, const T &rhs) const
358  {
359  return lhs * rhs;
360  }
361 }; // end multiplies
362 
363 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(multiplies, *);
364 
398 template<typename T = void>
399 struct divides
400 {
404  typedef T first_argument_type;
405 
409  typedef T second_argument_type;
410 
414  typedef T result_type;
415 
418  __thrust_exec_check_disable__
419  __host__ __device__
420  constexpr T operator()(const T &lhs, const T &rhs) const
421  {
422  return lhs / rhs;
423  }
424 }; // end divides
425 
426 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(divides, /);
427 
461 template<typename T = void>
462 struct modulus
463 {
467  typedef T first_argument_type;
468 
472  typedef T second_argument_type;
473 
477  typedef T result_type;
478 
481  __thrust_exec_check_disable__
482  __host__ __device__
483  constexpr T operator()(const T &lhs, const T &rhs) const
484  {
485  return lhs % rhs;
486  }
487 }; // end modulus
488 
489 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(modulus, %);
490 
521 template<typename T = void>
522 struct negate
523 {
527  typedef T argument_type;
528 
532  typedef T result_type;
533 
536  __thrust_exec_check_disable__
537  __host__ __device__
538  constexpr T operator()(const T &x) const
539  {
540  return -x;
541  }
542 }; // end negate
543 
544 THRUST_UNARY_FUNCTOR_VOID_SPECIALIZATION(negate, -THRUST_FWD(x));
545 
575 template<typename T = void>
576 struct square
577 {
581  typedef T argument_type;
582 
586  typedef T result_type;
587 
590  __thrust_exec_check_disable__
591  __host__ __device__
592  constexpr T operator()(const T &x) const
593  {
594  return x*x;
595  }
596 }; // end square
597 
598 THRUST_UNARY_FUNCTOR_VOID_SPECIALIZATION(square, x*x);
599 
619 template<typename T = void>
620 struct equal_to
621 {
625  typedef T first_argument_type;
626 
630  typedef T second_argument_type;
631 
635  typedef bool result_type;
636 
639  __thrust_exec_check_disable__
640  __host__ __device__
641  constexpr bool operator()(const T &lhs, const T &rhs) const
642  {
643  return lhs == rhs;
644  }
645 }; // end equal_to
646 
647 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(equal_to, ==);
648 
660 template<typename T = void>
661 struct not_equal_to
662 {
666  typedef T first_argument_type;
667 
671  typedef T second_argument_type;
672 
676  typedef bool result_type;
677 
680  __thrust_exec_check_disable__
681  __host__ __device__
682  constexpr bool operator()(const T &lhs, const T &rhs) const
683  {
684  return lhs != rhs;
685  }
686 }; // end not_equal_to
687 
688 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(not_equal_to, !=);
689 
701 template<typename T = void>
702 struct greater
703 {
707  typedef T first_argument_type;
708 
712  typedef T second_argument_type;
713 
717  typedef bool result_type;
718 
721  __thrust_exec_check_disable__
722  __host__ __device__
723  constexpr bool operator()(const T &lhs, const T &rhs) const
724  {
725  return lhs > rhs;
726  }
727 }; // end greater
728 
729 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(greater, >);
730 
742 template<typename T = void>
743 struct less
744 {
748  typedef T first_argument_type;
749 
753  typedef T second_argument_type;
754 
758  typedef bool result_type;
759 
762  __thrust_exec_check_disable__
763  __host__ __device__
764  constexpr bool operator()(const T &lhs, const T &rhs) const
765  {
766  return lhs < rhs;
767  }
768 }; // end less
769 
770 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(less, <);
771 
783 template<typename T = void>
784 struct greater_equal
785 {
789  typedef T first_argument_type;
790 
794  typedef T second_argument_type;
795 
799  typedef bool result_type;
800 
803  __thrust_exec_check_disable__
804  __host__ __device__
805  constexpr bool operator()(const T &lhs, const T &rhs) const
806  {
807  return lhs >= rhs;
808  }
809 }; // end greater_equal
810 
811 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(greater_equal, >=);
812 
824 template<typename T = void>
825 struct less_equal
826 {
830  typedef T first_argument_type;
831 
835  typedef T second_argument_type;
836 
840  typedef bool result_type;
841 
844  __thrust_exec_check_disable__
845  __host__ __device__
846  constexpr bool operator()(const T &lhs, const T &rhs) const
847  {
848  return lhs <= rhs;
849  }
850 }; // end less_equal
851 
852 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(less_equal, <=);
853 
874 template<typename T = void>
875 struct logical_and
876 {
880  typedef T first_argument_type;
881 
885  typedef T second_argument_type;
886 
890  typedef bool result_type;
891 
894  __thrust_exec_check_disable__
895  __host__ __device__
896  constexpr bool operator()(const T &lhs, const T &rhs) const
897  {
898  return lhs && rhs;
899  }
900 }; // end logical_and
901 
902 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(logical_and, &&);
903 
915 template<typename T = void>
916 struct logical_or
917 {
921  typedef T first_argument_type;
922 
926  typedef T second_argument_type;
927 
931  typedef bool result_type;
932 
935  __thrust_exec_check_disable__
936  __host__ __device__
937  constexpr bool operator()(const T &lhs, const T &rhs) const
938  {
939  return lhs || rhs;
940  }
941 }; // end logical_or
942 
943 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(logical_or, ||);
944 
970 template<typename T = void>
971 struct logical_not
972 {
976  typedef T first_argument_type;
977 
981  typedef T second_argument_type;
982 
986  typedef bool result_type;
987 
990  __thrust_exec_check_disable__
991  __host__ __device__
992  constexpr bool operator()(const T &x) const
993  {
994  return !x;
995  }
996 }; // end logical_not
997 
998 THRUST_UNARY_FUNCTOR_VOID_SPECIALIZATION(logical_not, !THRUST_FWD(x));
999 
1040 template<typename T = void>
1041 struct bit_and
1046  typedef T first_argument_type;
1051  typedef T second_argument_type;
1056  typedef T result_type;
1057 
1060  __thrust_exec_check_disable__
1061  __host__ __device__
1062  constexpr T operator()(const T &lhs, const T &rhs) const
1063  {
1064  return lhs & rhs;
1065  }
1066 }; // end bit_and
1067 
1068 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(bit_and, &);
1069 
1102 template<typename T = void>
1103 struct bit_or
1108  typedef T first_argument_type;
1113  typedef T second_argument_type;
1118  typedef T result_type;
1119 
1122  __thrust_exec_check_disable__
1123  __host__ __device__
1124  constexpr T operator()(const T &lhs, const T &rhs) const
1125  {
1126  return lhs | rhs;
1127  }
1128 }; // end bit_or
1129 
1130 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(bit_or, |);
1131 
1164 template<typename T = void>
1165 struct bit_xor
1170  typedef T first_argument_type;
1175  typedef T second_argument_type;
1180  typedef T result_type;
1181 
1184  __thrust_exec_check_disable__
1185  __host__ __device__
1186  constexpr T operator()(const T &lhs, const T &rhs) const
1187  {
1188  return lhs ^ rhs;
1189  }
1190 }; // end bit_xor
1191 
1192 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP(bit_xor, ^);
1193 
1222 template<typename T = void>
1223 struct identity
1224 {
1228  typedef T argument_type;
1229 
1233  typedef T result_type;
1237  __thrust_exec_check_disable__
1238  __host__ __device__
1239  constexpr const T &operator()(const T &x) const
1240  {
1241  return x;
1242  }
1243 }; // end identity
1244 
1245 THRUST_UNARY_FUNCTOR_VOID_SPECIALIZATION(identity, THRUST_FWD(x));
1246 
1271 template<typename T = void>
1272 struct maximum
1273 {
1278 
1283 
1287  typedef T result_type;
1291  __thrust_exec_check_disable__
1292  __host__ __device__
1293  constexpr T operator()(const T &lhs, const T &rhs) const
1294  {
1295  return lhs < rhs ? rhs : lhs;
1296  }
1297 }; // end maximum
1298 
1299 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION(maximum,
1300  t1 < t2 ? THRUST_FWD(t2)
1301  : THRUST_FWD(t1));
1302 
1327 template<typename T = void>
1328 struct minimum
1329 {
1334 
1339 
1343  typedef T result_type;
1347  __thrust_exec_check_disable__
1348  __host__ __device__
1349  constexpr T operator()(const T &lhs, const T &rhs) const
1350  {
1351  return lhs < rhs ? lhs : rhs;
1352  }
1353 }; // end minimum
1354 
1355 THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION(minimum,
1356  t1 < t2 ? THRUST_FWD(t1)
1357  : THRUST_FWD(t2));
1358 
1377 template<typename T1 = void, typename T2 = void>
1379 {
1384 
1389 
1393  typedef T1 result_type;
1394 
1397  __host__ __device__
1398  constexpr const T1 &operator()(const T1 &lhs, const T2 & /*rhs*/) const
1399  {
1400  return lhs;
1401  }
1402 }; // end project1st
1403 
1404 template <>
1405 struct project1st<void, void>
1406 {
1407  using is_transparent = void;
1408  __thrust_exec_check_disable__
1409  template <typename T1, typename T2>
1410  __host__ __device__
1411  constexpr auto operator()(T1&& t1, T2&&) const
1412  noexcept(noexcept(THRUST_FWD(t1)))
1413  THRUST_TRAILING_RETURN(decltype(THRUST_FWD(t1)))
1414  {
1415  return THRUST_FWD(t1);
1416  }
1417 };
1418 
1437 template<typename T1 = void, typename T2 = void>
1439 {
1444 
1449 
1453  typedef T2 result_type;
1454 
1457  __host__ __device__
1458  constexpr const T2 &operator()(const T1 &/*lhs*/, const T2 &rhs) const
1459  {
1460  return rhs;
1461  }
1462 }; // end project2nd
1463 
1464 template <>
1465 struct project2nd<void, void>
1466 {
1467  using is_transparent = void;
1468  __thrust_exec_check_disable__
1469  template <typename T1, typename T2>
1470  __host__ __device__
1471  constexpr auto operator()(T1&&, T2&& t2) const
1472  noexcept(noexcept(THRUST_FWD(t2)))
1473  THRUST_TRAILING_RETURN(decltype(THRUST_FWD(t2)))
1474  {
1475  return THRUST_FWD(t2);
1476  }
1477 };
1478 
1482 // odds and ends
1483 
1499 template<typename Predicate>
1500 struct unary_negate
1501  : public thrust::unary_function<typename Predicate::argument_type, bool>
1502 {
1506  __host__ __device__
1507  explicit unary_negate(Predicate p) : pred(p){}
1508 
1511  __thrust_exec_check_disable__
1512  __host__ __device__
1513  bool operator()(const typename Predicate::argument_type& x) { return !pred(x); }
1514 
1517  Predicate pred;
1520 }; // end unary_negate
1521 
1538 template<typename Predicate>
1539  __host__ __device__
1540  unary_negate<Predicate> not1(const Predicate &pred);
1541 
1552 template<typename Predicate>
1553 struct binary_negate
1554  : public thrust::binary_function<typename Predicate::first_argument_type,
1555  typename Predicate::second_argument_type,
1556  bool>
1557 {
1561  __host__ __device__
1562  explicit binary_negate(Predicate p) : pred(p){}
1563 
1566  __thrust_exec_check_disable__
1567  __host__ __device__
1568  bool operator()(const typename Predicate::first_argument_type& x, const typename Predicate::second_argument_type& y)
1569  {
1570  return !pred(x,y);
1571  }
1572 
1575  Predicate pred;
1578 }; // end binary_negate
1579 
1596 template<typename BinaryPredicate>
1597  __host__ __device__
1598  binary_negate<BinaryPredicate> not2(const BinaryPredicate &pred);
1599 
1652 namespace placeholders
1653 {
1654 
1655 
1658 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<0>::type _1;
1659 
1660 
1663 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<1>::type _2;
1664 
1665 
1668 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<2>::type _3;
1669 
1670 
1673 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<3>::type _4;
1674 
1675 
1678 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<4>::type _5;
1679 
1680 
1683 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<5>::type _6;
1684 
1685 
1688 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<6>::type _7;
1689 
1690 
1693 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<7>::type _8;
1694 
1695 
1698 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<8>::type _9;
1699 
1700 
1703 THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder<9>::type _10;
1704 
1705 
1706 } // end placeholders
1707 
1708 
1712 #undef THRUST_UNARY_FUNCTOR_VOID_SPECIALIZATION
1713 #undef THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION
1714 #undef THRUST_BINARY_FUNCTOR_VOID_SPECIALIZATION_OP
1715 
1716 THRUST_NAMESPACE_END
1717 
1718 #include <thrust/detail/functional.inl>
1719 #include <thrust/detail/functional/operators.h>
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1109
Definition: functional.h:1099
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1166
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:669
Definition: functional.h:1267
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:282
bool result_type
The type of the function object&#39;s result;.
Definition: functional.h:715
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 0 >::type _1
Definition: functional.h:1651
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1047
Definition: functional.h:968
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:345
Definition: functional.h:1547
Definition: functional.h:461
Definition: functional.h:1433
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1272
Definition: functional.h:872
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:277
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 9 >::type _10
Definition: functional.h:1696
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:287
Definition: functional.h:69
bool result_type
The type of the function object&#39;s result;.
Definition: functional.h:756
Definition: functional.h:823
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 4 >::type _5
Definition: functional.h:1671
Definition: functional.h:209
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:531
T1 result_type
The type of the function object&#39;s result;.
Definition: functional.h:1388
Definition: functional.h:659
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:476
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:623
Definition: functional.h:521
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:628
bool result_type
The type of the function object&#39;s result;.
Definition: functional.h:633
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:1282
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:350
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:585
T1 first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1378
Argument1 first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:115
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:214
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:833
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1328
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:1338
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:413
T2 result_type
The type of the function object&#39;s result;.
Definition: functional.h:1448
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 8 >::type _9
Definition: functional.h:1691
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:746
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 6 >::type _7
Definition: functional.h:1681
Definition: functional.h:110
Definition: functional.h:335
T argument_type
The type of the function object&#39;s argument.
Definition: functional.h:580
T1 first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1438
Definition: functional.h:1218
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:340
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:792
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:787
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1042
Definition: functional.h:741
__host__ __device__ unary_negate< Predicate > not1(const Predicate &pred)
bool result_type
The type of the function object&#39;s result;.
Definition: functional.h:674
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 5 >::type _6
Definition: functional.h:1676
Definition: functional.h:618
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:408
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1171
Argument argument_type
The type of the function object&#39;s argument.
Definition: functional.h:74
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1333
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:705
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:1114
Definition: functional.h:1373
Result result_type
The type of the function object&#39;s result;.
Definition: functional.h:125
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:1052
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:751
Definition: functional.h:1323
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:1228
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 7 >::type _8
Definition: functional.h:1686
Result result_type
The type of the function object&#39;s result.
Definition: functional.h:79
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:403
bool result_type
The type of the function object&#39;s result;.
Definition: functional.h:838
Definition: functional.h:913
T argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1223
bool result_type
The type of the function object&#39;s result;.
Definition: functional.h:797
__host__ __device__ binary_negate< BinaryPredicate > not2(const BinaryPredicate &pred)
Definition: functional.h:782
Definition: functional.h:1494
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:224
Definition: functional.h:1037
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:664
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:828
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:219
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:710
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:1104
T2 second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1443
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 2 >::type _3
Definition: functional.h:1661
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 1 >::type _2
Definition: functional.h:1656
THRUST_INLINE_CONSTANT thrust::detail::functional::placeholder< 3 >::type _4
Definition: functional.h:1666
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1277
Definition: functional.h:575
T2 second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:1383
T argument_type
The type of the function object&#39;s argument.
Definition: functional.h:526
T second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:471
Definition: functional.h:398
Definition: functional.h:700
Argument2 second_argument_type
The type of the function object&#39;s second argument.
Definition: functional.h:120
Definition: functional.h:272
T first_argument_type
The type of the function object&#39;s first argument.
Definition: functional.h:466
T result_type
The type of the function object&#39;s result;.
Definition: functional.h:1176
Definition: functional.h:1161