9 #ifndef _PyImathAutovectorize_h_
10 #define _PyImathAutovectorize_h_
13 #define HBOOST_BIND_GLOBAL_PLACEHOLDERS
14 #include <hboost/python.hpp>
15 #include <hboost/mpl/size.hpp>
16 #include <hboost/mpl/pop_front.hpp>
17 #include <hboost/mpl/push_front.hpp>
18 #include <hboost/mpl/front.hpp>
19 #include <hboost/mpl/eval_if.hpp>
20 #include <hboost/mpl/bool.hpp>
21 #include <hboost/mpl/vector.hpp>
22 #include <hboost/mpl/transform.hpp>
23 #include <hboost/mpl/remove_if.hpp>
24 #include <hboost/mpl/equal.hpp>
25 #include <hboost/mpl/for_each.hpp>
26 #include <hboost/mpl/not.hpp>
28 #include <hboost/mpl/or.hpp>
29 #include <hboost/type_traits/is_base_of.hpp>
30 #include <hboost/type_traits/function_traits.hpp>
31 #include <hboost/static_assert.hpp>
32 #include <hboost/python/args.hpp>
44 using hboost::is_base_of;
45 using hboost::is_same;
46 using hboost::is_const;
47 using hboost::remove_const;
48 using hboost::remove_reference;
49 using hboost::function_traits;
51 using hboost::mpl::at;
52 using hboost::mpl::at_c;
53 using hboost::mpl::push_front;
54 using hboost::mpl::vector;
55 using hboost::mpl::push_back;
57 using hboost::mpl::fold;
59 using hboost::mpl::_1;
60 using hboost::mpl::_2;
61 using hboost::mpl::long_;
62 using hboost::mpl::false_;
63 using hboost::mpl::true_;
64 using hboost::mpl::not_;
65 using hboost::mpl::or_;
66 using hboost::mpl::and_;
68 using hboost::mpl::remove_if;
69 using hboost::mpl::if_;
70 using hboost::mpl::for_each;
82 if_<is_base_of<op_with_precomputation,T>,
91 typedef typename fold<
94 push_back<push_back<_1,push_back<_2,false_> >,push_back<_2,true_> >
101 typedef vector<vector<> >
type;
104 template <
class Vectorizable>
107 template <
class Vectorize>
112 typedef typename transform<DontVectorize,Vectorizable,or_<_,_> >
::type Valid;
113 typedef typename not_<fold<Valid,true_,and_<_,_> > >
::type type;
117 template <
class Vectorizable>
121 typedef typename remove_if<possible,disallow_vectorization<Vectorizable> >
::type type;
136 template <
class T1,
class T2>
142 template <
class T1,
class T2,
class T3>
148 template <
class T1,
class T2,
class T3,
class T4>
164 static inline std::pair<size_t,bool>
apply(T
arg) {
return std::make_pair(1,
false); }
176 static inline std::pair<size_t,bool>
177 match_lengths(
const std::pair<size_t,bool> &len1,
const std::pair<size_t,bool> &len2)
180 if (len1.second ==
false)
return len2;
181 if (len2.second ==
false)
return len1;
184 if (len1.first != len2.first)
185 throw std::invalid_argument(
"Array dimensions passed into function do not match");
196 template <
class arg1_type>
204 template <
class arg1_type,
class arg2_type>
213 template <
class arg1_type,
class arg2_type,
class arg3_type>
223 template <
class arg1_type,
class arg2_type,
class arg3_type,
class arg4_type>
225 measure_arguments(
const arg1_type &arg1,
const arg2_type &arg2,
const arg3_type &arg3,
const arg4_type &arg4)
234 template <
class arg1_type,
class arg2_type,
class arg3_type,
class arg4_type,
class arg5_type>
236 measure_arguments(
const arg1_type &arg1,
const arg2_type &arg2,
const arg3_type &arg3,
const arg4_type &arg4,
const arg5_type &arg5)
266 template <
class T,
class VectorizeArg>
269 typedef typename if_<VectorizeArg,PyImath::FixedArray<T>,
T>
::type type;
272 template <
typename T>
280 : _arg (other._arg) {}
311 typedef typename if_<is_const<prim_type>,
316 typedef typename if_<is_const<prim_type>,
317 typename class_type::ReadOnlyMaskedAccess,
319 typedef typename if_<is_const<prim_type>,
320 typename class_type::ReadOnlyDirectAccess,
324 template <
class T,
class VectorizeArg>
328 typedef typename if_<VectorizeArg,const PyImath::FixedArray<base_type> &,
T>
::type type;
330 typedef typename if_<VectorizeArg,
334 typedef typename _class_type::ReadOnlyMaskedAccess
masked;
335 typedef typename _class_type::ReadOnlyDirectAccess
direct;
338 template <
class T,
class VectorizeArg>
342 typedef typename if_<VectorizeArg,PyImath::FixedArray<base_type>,
T>
::type type;
344 typedef typename if_<VectorizeArg,
type,
347 typedef typename _class_type::WritableMaskedAccess
masked;
348 typedef typename _class_type::WritableDirectAccess
direct;
351 template <
class AccessType,
class T>
353 {
return AccessType (value); }
355 template <
class AccessType,
class T>
357 {
return AccessType (array); }
359 template <
class AccessType,
class T>
361 {
return AccessType (array); }
365 template <
class Op,
class result_access_type,
class access_type>
376 for (
size_t i = start; i <
end; ++i)
383 template <
class Op,
class result_access_type,
class access_type,
class arg1_access_type>
395 for (
size_t i = start; i <
end; ++i)
402 template <
class Op,
class result_access_type,
class access_type,
403 class arg1_access_type,
class arg2_access_type>
412 arg1_access_type a1, arg2_access_type a2)
417 for (
size_t i = start; i <
end; ++i)
424 template <
class Op,
class result_access_type,
class access_type,
425 class arg1_access_type,
class arg2_access_type,
class arg3_access_type>
435 arg1_access_type a1, arg2_access_type a2, arg3_access_type a3)
440 for (
size_t i = start; i <
end; ++i)
447 template <
class Op,
class result_access_type,
class access_type,
448 class arg1_access_type,
class arg2_access_type,
class arg3_access_type,
class arg4_access_type>
459 arg1_access_type a1, arg2_access_type a2, arg3_access_type a3, arg4_access_type a4)
464 for (
size_t i = start; i <
end; ++i)
471 template <
class Op,
class Vectorize,
class Func>
504 getArrayAccess<arg1_masked_access_type> (arg1);
507 vop (resultAccess, argAccess);
513 getArrayAccess<arg1_direct_access_type> (arg1);
516 vop (resultAccess, argAccess);
528 return std::string(
"(")+args.elements[0].name+
") - ";
532 template <
class Op,
class Vectorize,
class Func>
572 getArrayAccess<arg1_masked_access_type> (arg1);
577 getArrayAccess<arg2_masked_access_type> (arg2);
582 vop (resultAccess, arg1Access, arg2Access);
588 getArrayAccess<arg2_direct_access_type> (arg2);
593 vop (resultAccess, arg1Access, arg2Access);
600 getArrayAccess<arg1_direct_access_type> (arg1);
605 getArrayAccess<arg2_masked_access_type> (arg2);
610 vop (resultAccess, arg1Access, arg2Access);
616 getArrayAccess<arg2_direct_access_type> (arg2);
621 vop (resultAccess, arg1Access, arg2Access);
634 return std::string(
"(")+args.elements[0].name+
","+args.elements[1].name+
") - ";
638 template <
class Op,
class Vectorize,
class Func>
685 getArrayAccess<arg1_masked_access_type> (arg1);
690 getArrayAccess<arg2_masked_access_type> (arg2);
695 getArrayAccess<arg3_masked_access_type> (arg3);
701 vop (resultAccess, arg1Access, arg2Access, arg3Access);
707 getArrayAccess<arg3_direct_access_type> (arg3);
713 vop (resultAccess, arg1Access, arg2Access, arg3Access);
720 getArrayAccess<arg2_direct_access_type> (arg2);
725 getArrayAccess<arg3_masked_access_type> (arg3);
731 vop (resultAccess, arg1Access, arg2Access, arg3Access);
737 getArrayAccess<arg3_direct_access_type> (arg3);
743 vop (resultAccess, arg1Access, arg2Access, arg3Access);
751 getArrayAccess<arg1_direct_access_type> (arg1);
756 getArrayAccess<arg2_masked_access_type> (arg2);
761 getArrayAccess<arg3_masked_access_type> (arg3);
767 vop (resultAccess, arg1Access, arg2Access, arg3Access);
773 getArrayAccess<arg3_direct_access_type> (arg3);
779 vop (resultAccess, arg1Access, arg2Access, arg3Access);
786 getArrayAccess<arg2_direct_access_type> (arg2);
791 getArrayAccess<arg3_masked_access_type> (arg3);
797 vop (resultAccess, arg1Access, arg2Access, arg3Access);
803 getArrayAccess<arg3_direct_access_type> (arg3);
809 vop (resultAccess, arg1Access, arg2Access, arg3Access);
823 return std::string(
"(")+args.elements[0].name+
","+args.elements[1].name+
","+args.elements[2].name+
") - ";
827 template <
class Op,
class Vectorize,
class Func>
881 getArrayAccess<arg1_masked_access_type> (arg1);
886 getArrayAccess<arg2_masked_access_type> (arg2);
891 getArrayAccess<arg3_masked_access_type> (arg3);
896 getArrayAccess<arg4_masked_access_type> (arg4);
903 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
909 getArrayAccess<arg4_direct_access_type> (arg4);
916 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
923 getArrayAccess<arg3_direct_access_type> (arg3);
928 getArrayAccess<arg4_masked_access_type> (arg4);
935 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
940 getArrayAccess<arg4_direct_access_type> (arg4);
947 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
955 getArrayAccess<arg2_direct_access_type> (arg2);
960 getArrayAccess<arg3_masked_access_type> (arg3);
965 getArrayAccess<arg4_masked_access_type> (arg4);
972 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
978 getArrayAccess<arg4_direct_access_type> (arg4);
985 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
992 getArrayAccess<arg3_direct_access_type> (arg3);
997 getArrayAccess<arg4_masked_access_type> (arg4);
1004 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1010 getArrayAccess<arg4_direct_access_type> (arg4);
1017 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1026 getArrayAccess<arg1_direct_access_type> (arg1);
1031 getArrayAccess<arg2_masked_access_type> (arg2);
1036 getArrayAccess<arg3_masked_access_type> (arg3);
1041 getArrayAccess<arg4_masked_access_type> (arg4);
1048 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1054 getArrayAccess<arg4_direct_access_type> (arg4);
1061 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1068 getArrayAccess<arg3_direct_access_type> (arg3);
1073 getArrayAccess<arg4_masked_access_type> (arg4);
1080 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1086 getArrayAccess<arg4_direct_access_type> (arg4);
1093 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1101 getArrayAccess<arg2_direct_access_type> (arg2);
1106 getArrayAccess<arg3_masked_access_type> (arg3);
1111 getArrayAccess<arg4_masked_access_type> (arg4);
1118 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1124 getArrayAccess<arg4_direct_access_type> (arg4);
1131 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1138 getArrayAccess<arg3_direct_access_type> (arg3);
1143 getArrayAccess<arg4_masked_access_type> (arg4);
1150 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1156 getArrayAccess<arg4_direct_access_type> (arg4);
1163 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access);
1178 return std::string(
"(")+args.elements[0].name+
","+args.elements[1].name+
","+args.elements[2].name+
","+args.elements[3].name+
") - ";
1182 template <
class Op,
class Vectorize,
class Func>
1243 getArrayAccess<arg1_masked_access_type> (arg1);
1248 getArrayAccess<arg2_masked_access_type> (arg2);
1253 getArrayAccess<arg3_masked_access_type> (arg3);
1258 getArrayAccess<arg4_masked_access_type> (arg4);
1263 getArrayAccess<arg5_masked_access_type> (arg5);
1271 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1277 getArrayAccess<arg5_direct_access_type> (arg5);
1285 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1292 getArrayAccess<arg4_direct_access_type> (arg4);
1297 getArrayAccess<arg5_masked_access_type> (arg5);
1305 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1311 getArrayAccess<arg5_direct_access_type> (arg5);
1319 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1327 getArrayAccess<arg3_direct_access_type> (arg3);
1332 getArrayAccess<arg4_masked_access_type> (arg4);
1337 getArrayAccess<arg5_masked_access_type> (arg5);
1345 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1351 getArrayAccess<arg5_direct_access_type> (arg5);
1359 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1366 getArrayAccess<arg4_direct_access_type> (arg4);
1371 getArrayAccess<arg5_masked_access_type> (arg5);
1379 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1385 getArrayAccess<arg5_direct_access_type> (arg5);
1393 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1402 getArrayAccess<arg2_direct_access_type> (arg2);
1407 getArrayAccess<arg3_masked_access_type> (arg3);
1412 getArrayAccess<arg4_masked_access_type> (arg4);
1417 getArrayAccess<arg5_masked_access_type> (arg5);
1425 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1431 getArrayAccess<arg5_direct_access_type> (arg5);
1439 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1446 getArrayAccess<arg4_direct_access_type> (arg4);
1451 getArrayAccess<arg5_masked_access_type> (arg5);
1459 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1465 getArrayAccess<arg5_direct_access_type> (arg5);
1473 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1481 getArrayAccess<arg3_direct_access_type> (arg3);
1486 getArrayAccess<arg4_masked_access_type> (arg4);
1491 getArrayAccess<arg5_masked_access_type> (arg5);
1499 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1505 getArrayAccess<arg5_direct_access_type> (arg5);
1513 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1520 getArrayAccess<arg4_direct_access_type> (arg4);
1525 getArrayAccess<arg5_masked_access_type> (arg5);
1533 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1539 getArrayAccess<arg5_direct_access_type> (arg5);
1547 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1557 getArrayAccess<arg1_direct_access_type> (arg1);
1562 getArrayAccess<arg2_masked_access_type> (arg2);
1567 getArrayAccess<arg3_masked_access_type> (arg3);
1572 getArrayAccess<arg4_masked_access_type> (arg4);
1577 getArrayAccess<arg5_masked_access_type> (arg5);
1585 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1591 getArrayAccess<arg5_direct_access_type> (arg5);
1599 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1606 getArrayAccess<arg4_direct_access_type> (arg4);
1611 getArrayAccess<arg5_masked_access_type> (arg5);
1619 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1625 getArrayAccess<arg5_direct_access_type> (arg5);
1633 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1641 getArrayAccess<arg3_direct_access_type> (arg3);
1646 getArrayAccess<arg4_masked_access_type> (arg4);
1651 getArrayAccess<arg5_masked_access_type> (arg5);
1659 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1665 getArrayAccess<arg5_direct_access_type> (arg5);
1673 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1680 getArrayAccess<arg4_direct_access_type> (arg4);
1685 getArrayAccess<arg5_masked_access_type> (arg5);
1693 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1699 getArrayAccess<arg5_direct_access_type> (arg5);
1707 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1716 getArrayAccess<arg2_direct_access_type> (arg2);
1721 getArrayAccess<arg3_masked_access_type> (arg3);
1726 getArrayAccess<arg4_masked_access_type> (arg4);
1731 getArrayAccess<arg5_masked_access_type> (arg5);
1739 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1745 getArrayAccess<arg5_direct_access_type> (arg5);
1753 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1760 getArrayAccess<arg4_direct_access_type> (arg4);
1765 getArrayAccess<arg5_masked_access_type> (arg5);
1773 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1779 getArrayAccess<arg5_direct_access_type> (arg5);
1787 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1795 getArrayAccess<arg3_direct_access_type> (arg3);
1800 getArrayAccess<arg4_masked_access_type> (arg4);
1805 getArrayAccess<arg5_masked_access_type> (arg5);
1813 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1819 getArrayAccess<arg5_direct_access_type> (arg5);
1827 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1834 getArrayAccess<arg4_direct_access_type> (arg4);
1839 getArrayAccess<arg5_masked_access_type> (arg5);
1847 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1853 getArrayAccess<arg5_direct_access_type> (arg5);
1861 vop (resultAccess, arg1Access, arg2Access, arg3Access, arg4Access, arg5Access);
1877 return std::string(
"(")+args.elements[0].name+
","+args.elements[1].name+
","+args.elements[2].name+
","+args.elements[3].name+
","+args.elements[4].name+
") - ";
1881 template <
class Op,
class Func,
class Keywords>
1892 template <
class Vectorize>
1895 typedef typename at<vector<
1903 long_<function_traits<Func>::arity> >
::type vectorized_function_type;
1904 std::string doc =
_name + vectorized_function_type::format_arguments(
_args) +
_doc;
1905 hboost::python::def(
_name.c_str(),&vectorized_function_type::apply,doc.c_str(),
_args);
1909 template <
class Op,
class Func,
class Keywords>
1910 function_binding<Op,Func,Keywords>
1916 template <
class Op,
class Vectorizable,
class Keywords>
1920 static void apply(
const std::string &
name,
const std::string &doc,
const Keywords &
args) {
1926 template <
class Op,
class access_type>
1935 for (
size_t i = start; i <
end; ++i)
1942 template <
class Op,
class access_type,
class arg1_access_type>
1952 for (
size_t i = start; i <
end; ++i)
1959 template <
class Op,
class access_type,
class arg1_access_type,
class array_type>
1971 for (
size_t i = start; i <
end; ++i)
1973 const size_t ri =
array.raw_ptr_index(i);
1979 template <
class Op,
class access_type,
class arg1_access_type,
class arg2_access_type>
1991 for (
size_t i = start; i <
end; ++i)
1999 template <
class Op,
class Vectorize,
class Func>
2034 template <
class Op,
class Vectorize,
class Func>
2065 getArrayAccess<arg1_masked_access_type> (arg1);
2068 vop (arrayAccess, argAccess);
2074 getArrayAccess<arg1_direct_access_type> (arg1);
2077 vop (arrayAccess, argAccess);
2088 getArrayAccess<arg1_masked_access_type> (arg1);
2091 vop (arrayAccess, argAccess);
2097 getArrayAccess<arg1_direct_access_type> (arg1);
2100 vop (arrayAccess, argAccess);
2113 return std::string(
"(")+args.elements[0].name+
") - ";
2123 template <
class Op,
class Func>
2144 size_t len = array.match_dimension(arg1,
false);
2147 if (array.isMaskedReference() && (size_t) arg1.len() == array.unmaskedLength())
2156 getArrayAccess<arg1_masked_access_type> (arg1);
2161 vop (arrayAccess, argAccess, array);
2167 getArrayAccess<arg1_direct_access_type> (arg1);
2172 vop (arrayAccess, argAccess, array);
2187 getArrayAccess<arg1_masked_access_type> (arg1);
2190 vop (arrayAccess, argAccess);
2196 getArrayAccess<arg1_direct_access_type> (arg1);
2199 vop (arrayAccess, argAccess);
2210 getArrayAccess<arg1_masked_access_type> (arg1);
2213 vop (arrayAccess, argAccess);
2219 getArrayAccess<arg1_direct_access_type> (arg1);
2222 vop (arrayAccess, argAccess);
2236 return std::string(
"(")+args.elements[0].name+
") - ";
2240 template <
class Op,
class Vectorize,
class Func>
2278 getArrayAccess<arg1_masked_access_type> (arg1);
2283 getArrayAccess<arg2_masked_access_type> (arg2);
2288 vop (arrayAccess, arg1Access, arg2Access);
2294 getArrayAccess<arg2_direct_access_type> (arg2);
2299 vop (arrayAccess, arg1Access, arg2Access);
2306 getArrayAccess<arg1_direct_access_type> (arg1);
2311 getArrayAccess<arg2_masked_access_type> (arg2);
2316 vop (arrayAccess, arg1Access, arg2Access);
2322 getArrayAccess<arg2_direct_access_type> (arg2);
2327 vop (arrayAccess, arg1Access, arg2Access);
2339 getArrayAccess<arg1_masked_access_type> (arg1);
2344 getArrayAccess<arg2_masked_access_type> (arg2);
2349 vop (arrayAccess, arg1Access, arg2Access);
2355 getArrayAccess<arg2_direct_access_type> (arg2);
2360 vop (arrayAccess, arg1Access, arg2Access);
2367 getArrayAccess<arg1_direct_access_type> (arg1);
2372 getArrayAccess<arg2_masked_access_type> (arg2);
2377 vop (arrayAccess, arg1Access, arg2Access);
2383 getArrayAccess<arg2_direct_access_type> (arg2);
2388 vop (arrayAccess, arg1Access, arg2Access);
2402 return std::string(
"(")+args.elements[0].name+
","+args.elements[1].name+
") - ";
2407 template <
class Op,
class Vectorize,
class Func>
2451 template <
class Op,
class Vectorize,
class Func>
2491 getArrayAccess<arg1_masked_access_type> (arg1);
2501 getArrayAccess<arg1_direct_access_type> (arg1);
2516 getArrayAccess<arg1_masked_access_type> (arg1);
2526 getArrayAccess<arg1_direct_access_type> (arg1);
2543 return std::string(
"(")+args.elements[0].name+
") - ";
2547 template <
class Op,
class Vectorize,
class Func>
2594 getArrayAccess<arg1_masked_access_type> (arg1);
2599 getArrayAccess<arg2_masked_access_type> (arg2);
2605 vop (returnAccess, access, arg1Access, arg2Access);
2611 getArrayAccess<arg2_direct_access_type> (arg2);
2617 vop (returnAccess, access, arg1Access, arg2Access);
2624 getArrayAccess<arg1_direct_access_type> (arg1);
2629 getArrayAccess<arg2_masked_access_type> (arg2);
2635 vop (returnAccess, access, arg1Access, arg2Access);
2641 getArrayAccess<arg2_direct_access_type> (arg2);
2647 vop (returnAccess, access, arg1Access, arg2Access);
2659 getArrayAccess<arg1_masked_access_type> (arg1);
2664 getArrayAccess<arg2_masked_access_type> (arg2);
2670 vop (returnAccess, access, arg1Access, arg2Access);
2676 getArrayAccess<arg2_direct_access_type> (arg2);
2682 vop (returnAccess, access, arg1Access, arg2Access);
2689 getArrayAccess<arg1_direct_access_type> (arg1);
2694 getArrayAccess<arg2_masked_access_type> (arg2);
2700 vop (returnAccess, access, arg1Access, arg2Access);
2706 getArrayAccess<arg2_direct_access_type> (arg2);
2712 vop (returnAccess, access, arg1Access, arg2Access);
2726 return std::string(
"(")+args.elements[0].name+
","+args.elements[1].name+
") - ";
2730 template <
class Op,
class Cls,
class Func,
class Keywords>
2741 template <
class Vectorize>
2744 typedef typename if_<is_same<void,typename function_traits<Func>::result_type>,
2745 typename if_<hboost::mpl::equal<Vectorize,hboost::mpl::vector<hboost::mpl::true_> >,
2749 >::type member_func1_type;
2751 typedef typename if_<is_same<void,typename function_traits<Func>::result_type>,
2755 typedef typename if_<is_same<void,typename function_traits<Func>::result_type>,
2756 hboost::python::return_internal_reference<>,
2757 hboost::python::default_call_policies>::type call_policies;
2759 typedef typename at<vector<
2765 long_<function_traits<Func>::arity> >::type vectorized_function_type;
2766 std::string doc =
_name + vectorized_function_type::format_arguments(
_args) +
_doc;
2767 _cls.def(
_name.c_str(),&vectorized_function_type::apply,doc.c_str(),
_args,call_policies());
2771 template <
class Op,
class Cls,
class Func,
class Keywords>
2772 member_function_binding<Op,Cls,Func,Keywords>
2778 template <
class Op,
class Cls,
class Vectorizable,
class Keywords>
2782 static void apply(Cls &cls,
const std::string &
name,
const std::string &doc,
const Keywords &
args) {
2787 template <
class Op,
class Cls,
class Func>
2791 typedef typename if_<is_same<void,typename function_traits<Func>::result_type>,
2795 typedef typename if_<is_same<void,typename function_traits<Func>::result_type>,
2796 hboost::python::return_internal_reference<>,
2797 hboost::python::default_call_policies>
::type call_policies;
2799 cls.def(name.c_str(),&vectorized_function_type::apply,doc.c_str(),call_policies());
2805 template <
class Op,
class Vectorizable0>
2807 using namespace detail;
2808 generate_bindings_struct<Op,vector<Vectorizable0>,hboost::python::detail::keywords<1> >::apply(name,doc,args);
2811 template <
class Op,
class Vectorizable0,
class Vectorizable1>
2813 using namespace detail;
2814 generate_bindings_struct<Op,vector<Vectorizable0,Vectorizable1>,hboost::python::detail::keywords<2> >::apply(name,doc,args);
2817 template <
class Op,
class Vectorizable0,
class Vectorizable1,
class Vectorizable2>
2819 using namespace detail;
2820 generate_bindings_struct<Op,vector<Vectorizable0,Vectorizable1,Vectorizable2>,hboost::python::detail::keywords<3> >::apply(name,doc,args);
2823 template <
class Op,
class Vectorizable0,
class Vectorizable1,
class Vectorizable2,
class Vectorizable3>
2825 using namespace detail;
2826 generate_bindings_struct<Op,vector<Vectorizable0,Vectorizable1,Vectorizable2,Vectorizable3>,hboost::python::detail::keywords<4> >::apply(name,doc,args);
2829 template <
class Op,
class Vectorizable0,
class Vectorizable1,
class Vectorizable2,
class Vectorizable3,
class Vectorizable4>
2831 using namespace detail;
2832 generate_bindings_struct<Op,vector<Vectorizable0,Vectorizable1,Vectorizable2,Vectorizable3,Vectorizable4>,hboost::python::detail::keywords<5> >::apply(name,doc,args);
2835 template <
class Op,
class Cls>
2839 using namespace detail;
2840 generate_single_member_binding<Op>(cls,&Op::apply,name,doc);
2843 template <
class Op,
class Vectorizable0,
class Cls>
2846 const hboost::python::detail::keywords<1> &
args)
2848 using hboost::mpl::vector;
2850 hboost::python::detail::keywords<1> >::apply(cls,name,doc,args);
2853 template <
class Op,
class Vectorizable0,
class Vectorizable1,
class Cls>
2856 const hboost::python::detail::keywords<2> &
args)
2858 using hboost::mpl::vector;
2860 hboost::python::detail::keywords<2> >::apply(cls,name,doc,args);
2865 #endif // _PyImathAutovectorize_h_
fold< Vectorize, false_, or_< _, _ > >::type any_vectorized
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
if_< VectorizeArg, typename remove_reference< type >::type, SimpleNonArrayWrapper< base_type > >::type _class_type
fold< typename possible_vectorizations< N-1 >::type, vector<>, push_back< push_back< _1, push_back< _2, false_ > >, push_back< _2, true_ > > >::type type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
size_t measure_arguments(const arg1_type &arg1)
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
arg1_access_type arg1Access
VectorizedVoidOperation2(access_type a, arg1_access_type a1, arg2_access_type a2)
VectorizedOperation1(result_access_type r, access_type a1)
function_binding< Op, Func, Keywords > build_function_binding(Func *func, const std::string &name, const std::string &doc, const Keywords &args)
_class_type::WritableMaskedAccess masked
bool isMaskedReference() const
static std::string format_arguments(const hboost::python::detail::keywords< 5 > &args)
arg2_access_type arg2Access
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
function_traits< Func > traits
VectorizedVoidOperation1(access_type a, arg1_access_type a1)
access_type< typename traits::arg1_type >::masked masked_access_type
result_access_type retAccess
result_access_type retAccess
if_< is_const< prim_type >, typename class_type::ReadOnlyMaskedAccess, typename class_type::WritableMaskedAccess >::type masked
result_access_type< typename traits::result_type, any_vectorized >::direct result_access_type
void execute(size_t start, size_t end)
access_type< typename traits::arg1_type >::reference_type reference_type
result_access_type< typename traits::result_type, any_vectorized >::direct result_access_type
static result_type apply(reference_type array, arg1_type arg1, arg2_type arg2)
argument_access_type< typename traits::arg5_type, typename at< Vectorize, long_< 4 > >::type >::direct arg5_direct_access_type
static std::string format_arguments(const hboost::python::detail::keywords< 2 > &args)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
GLsizei const GLfloat * value
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::masked arg2_masked_access_type
function_traits< Func > traits
function_traits< Func > traits
static result_type apply(arg1_type arg1, arg2_type arg2)
result_access_type< typename traits::result_type, any_vectorized >::direct result_access_type
transform< Vectorize, not_< _ > >::type DontVectorize
void generate_bindings(const std::string &name, const std::string &doc, const hboost::python::detail::keywords< 1 > &args)
result_access_type< typename traits::result_type, any_vectorized >::type result_type
function_traits< Func > traits
WritableDirectAccess(T &arg)
access_type< typename traits::arg1_type >::direct direct_access_type
HBOOST_STATIC_ASSERT((size< Vectorize >::value==function_traits< Func >::arity))
GLboolean GLboolean GLboolean GLboolean a
result_access_type< typename traits::result_type, any_vectorized >::type result_type
GLuint GLsizei GLsizei * length
static std::string format_arguments(const hboost::python::detail::keywords< 3 > &args)
function_traits< Func > traits
result_type::WritableDirectAccess result_access_type
member_function_binding(Cls &cls, const std::string &name, const std::string &doc, const Keywords &args)
result_access_type< typename traits::result_type, any_vectorized >::type result_type
access_type< typename traits::arg1_type >::reference_type reference_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
HBOOST_STATIC_ASSERT((size< Vectorize >::value+1==function_traits< Func >::arity))
static result_type apply(arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, arg5_type arg5)
access_type< typename traits::arg1_type >::direct direct_access_type
function_traits< Func > traits
bool any_masked(const T &value)
ReadOnlyDirectAccess(const T &arg)
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 1 > >::type >::type arg2_type
result_access_type retAccess
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::masked arg2_masked_access_type
VectorizedOperation3(result_access_type r, access_type a, arg1_access_type a1, arg2_access_type a2)
#define PY_IMATH_RETURN_PYTHON
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
HBOOST_STATIC_ASSERT((size< Vectorize >::value==function_traits< Func >::arity))
access_type< typename traits::arg1_type >::direct direct_access_type
static std::pair< size_t, bool > apply(T arg)
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::masked arg3_masked_access_type
if_< is_const< prim_type >, typename class_type::ReadOnlyDirectAccess, typename class_type::WritableDirectAccess >::type direct
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::direct arg3_direct_access_type
WritableDirectAccess(const WritableDirectAccess &other)
access_type< typename traits::arg1_type >::masked masked_access_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::direct arg3_direct_access_type
if_< VectorizeArg, const PyImath::FixedArray< base_type > &, T >::type type
member_function_binding< Op, Cls, Func, Keywords > build_member_function_binding(Cls &cls, Func *func, const std::string &name, const std::string &doc, const Keywords &args)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
if_< VectorizeArg, PyImath::FixedArray< T >, T >::type type
remove_if< possible, disallow_vectorization< Vectorizable > >::type type
static void apply(Cls &cls, const std::string &name, const std::string &doc, const Keywords &args)
VectorizedVoidOperation0(access_type a)
vectorized_result_type< typename traits::result_type, true_ >::type result_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
result_access_type retAccess
GLint GLint GLsizei GLint GLenum GLenum type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
static T apply(size_t length)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::direct arg2_direct_access_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg2_type, hboost::mpl::true_ >::type arg1_type
HBOOST_STATIC_ASSERT((size< Vectorize >::value==function_traits< Func >::arity))
access_type< typename traits::arg1_type >::masked masked_access_type
static void precompute(size_t len)
arg3_access_type arg3Access
static result_type apply(reference_type array)
void generate_member_bindings(Cls &cls, const std::string &name, const std::string &doc)
possible_vectorizations< size< Vectorizable >::value >::type possible
void execute(size_t start, size_t end)
GLuint GLint GLboolean GLint GLenum access
void generate_single_member_binding(Cls &cls, Func *func, const std::string &name, const std::string &doc)
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 1 > >::type >::masked arg2_masked_access_type
remove_const< typename remove_reference< T >::type >::type base_type
result_access_type< typename traits::result_type, any_vectorized >::direct result_access_type
argument_access_type< typename traits::arg4_type, typename at< Vectorize, long_< 3 > >::type >::direct arg4_direct_access_type
transform< DontVectorize, Vectorizable, or_< _, _ > >::type Valid
function_traits< Func > traits
static reference_type apply(reference_type array)
HBOOST_STATIC_ASSERT((size< Vectorize >::value+1==function_traits< Func >::arity))
fold< Vectorize, false_, or_< _, _ > >::type any_vectorized
void operator()(Vectorize) const
void execute(size_t start, size_t end)
argument_access_type< typename traits::arg5_type, typename at< Vectorize, long_< 4 > >::type >::masked arg5_masked_access_type
void execute(size_t start, size_t end)
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
static reference_type apply(reference_type array, arg1_type arg1)
vectorized_result_type< typename traits::result_type, true_ >::type result_type
VectorizedOperation2(result_access_type r, access_type a1, arg1_access_type a2)
vectorized_result_type< typename traits::result_type, true_ >::type result_type
not_< fold< Valid, true_, and_< _, _ > > >::type type
result_type::WritableDirectAccess result_access_type
access_type< typename traits::arg1_type >::direct direct_access_type
access_type< typename traits::arg1_type >::direct direct_access_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 1 > >::type >::type arg2_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
HBOOST_STATIC_ASSERT((size< Vectorize >::value==function_traits< Func >::arity))
access_type< typename traits::arg1_type >::direct direct_access_type
static void apply(size_t len)
function_traits< Func > traits
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::masked arg3_masked_access_type
VectorizedOperation4(result_access_type r, access_type a, arg1_access_type a1, arg2_access_type a2, arg3_access_type a3)
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 1 > >::type >::direct arg2_direct_access_type
void execute(size_t start, size_t end)
const T & operator[](size_t) const
HBOOST_STATIC_ASSERT((size< Vectorize >::value==function_traits< Func >::arity))
static std::string format_arguments(const hboost::python::detail::keywords< 2 > &args)
GLuint const GLchar * name
if_< VectorizeArg, type, SimpleNonArrayWrapper< base_type > >::type _class_type
PYIMATH_EXPORT void dispatchTask(Task &task, size_t length)
access_type< typename traits::arg1_type >::reference_type reference_type
GLboolean GLboolean GLboolean b
HBOOST_STATIC_ASSERT((size< Vectorize >::value+1==function_traits< Func >::arity))
GA_API const UT_StringHolder transform
result_access_type< typename traits::result_type, any_vectorized >::direct result_access_type
remove_const< prim_type >::type base_type
access_type< typename traits::arg1_type >::reference_type reference_type
access_type< typename traits::arg1_type >::reference_type reference_type
static reference_type apply(reference_type array, arg1_type arg1)
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
argument_access_type< typename traits::arg2_type, hboost::mpl::true_ >::direct arg1_direct_access_type
arg1_access_type argAccess
access_type< typename traits::arg1_type >::reference_type reference_type
fold< Vectorize, false_, or_< _, _ > >::type any_vectorized
void operator()(Vectorize) const
function_traits< Func > traits
AccessType getArrayAccess(T &value)
ReadOnlyDirectAccess(const ReadOnlyDirectAccess &other)
result_access_type retAccess
arg4_access_type arg4Access
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 1 > >::type >::masked arg2_masked_access_type
void execute(size_t start, size_t end)
static std::string format_arguments(const hboost::python::detail::keywords< 1 > &args)
if_< is_const< prim_type >, const PyImath::FixedArray< base_type > &, PyImath::FixedArray< base_type > & >::type reference_type
function_traits< Func > traits
result_access_type< typename traits::result_type, any_vectorized >::type result_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
#define PY_IMATH_LEAVE_PYTHON
static PyImath::FixedArray< T > apply(size_t length)
argument_access_type< typename traits::arg4_type, typename at< Vectorize, long_< 3 > >::type >::masked arg4_masked_access_type
static void apply(const std::string &name, const std::string &doc, const Keywords &args)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::type arg2_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::type arg2_type
argument_access_type< typename traits::arg4_type, typename at< Vectorize, long_< 3 > >::type >::masked arg4_masked_access_type
remove_reference< T >::type prim_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::type arg3_type
argument_access_type< typename traits::arg4_type, typename at< Vectorize, long_< 3 > >::type >::type arg4_type
static std::string format_arguments(const hboost::python::detail::keywords< 1 > &args)
result_type::WritableDirectAccess result_access_type
argument_access_type< typename traits::arg5_type, typename at< Vectorize, long_< 4 > >::type >::type arg5_type
HBOOST_STATIC_ASSERT((size< Vectorize >::value+1==function_traits< Func >::arity))
argument_access_type< typename traits::arg4_type, typename at< Vectorize, long_< 3 > >::type >::direct arg4_direct_access_type
static std::string format_arguments(const hboost::python::detail::keywords< 1 > &args)
GA_API const UT_StringHolder N
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
static reference_type apply(reference_type array, arg1_type arg1, arg2_type arg2)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::direct arg2_direct_access_type
function_traits< Func > traits
**If you just want to fire and args
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::type arg3_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::masked arg2_masked_access_type
_class_type::ReadOnlyMaskedAccess masked
remove_reference< reference_type >::type class_type
static std::pair< size_t, bool > apply(const PyImath::FixedArray< T > &arg)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::type arg2_type
arg1_access_type arg1Access
fold< Vectorize, false_, or_< _, _ > >::type any_vectorized
_class_type::WritableDirectAccess direct
arg3_access_type arg3Access
function_binding(const std::string &name, const std::string &doc, const Keywords &args)
void execute(size_t start, size_t end)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::direct arg2_direct_access_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::masked arg2_masked_access_type
void execute(size_t start, size_t end)
VectorizedOperation5(result_access_type r, access_type a, arg1_access_type a1, arg2_access_type a2, arg3_access_type a3, arg4_access_type a4)
static result_type apply(arg1_type arg1, arg2_type arg2, arg3_type arg3)
access_type< typename traits::arg1_type >::masked masked_access_type
result_access_type< typename traits::result_type, any_vectorized >::type result_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::type arg3_type
VectorizedMaskedVoidOperation1(access_type a, arg1_access_type a1, array_type arr)
HBOOST_STATIC_ASSERT((size< Vectorize >::value+1==function_traits< Func >::arity))
static result_type apply(arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4)
WritableDirectAccess WritableMaskedAccess
_class_type::ReadOnlyDirectAccess direct
access_type< typename traits::arg1_type >::direct direct_access_type
static std::string format_arguments(const hboost::python::detail::keywords< 1 > &args)
argument_access_type< typename traits::arg4_type, typename at< Vectorize, long_< 3 > >::type >::type arg4_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
void execute(size_t start, size_t end)
HBOOST_STATIC_ASSERT((2==function_traits< Func >::arity))
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::type arg2_type
static result_type apply(arg1_type arg1)
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 1 > >::type >::direct arg2_direct_access_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::masked arg1_masked_access_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::masked arg3_masked_access_type
arg1_access_type arg1Access
arg2_access_type arg2Access
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 1 > >::type >::direct arg2_direct_access_type
argument_access_type< typename traits::arg3_type, typename at< Vectorize, long_< 2 > >::type >::direct arg3_direct_access_type
static std::string format_arguments(const hboost::python::detail::keywords< 4 > &args)
access_type< typename traits::arg1_type >::masked masked_access_type
access_type< typename traits::arg1_type >::masked masked_access_type
function_traits< Func > traits
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type
arg2_access_type arg2Access
if_< VectorizeArg, PyImath::FixedArray< base_type >, T >::type type
ReadOnlyDirectAccess ReadOnlyMaskedAccess
argument_access_type< typename traits::arg2_type, hboost::mpl::true_ >::masked arg1_masked_access_type
remove_const< typename remove_reference< T >::type >::type base_type
static result_type apply(reference_type array, arg1_type arg1)
access_type< typename traits::arg1_type >::reference_type reference_type
fold< Vectorize, false_, or_< _, _ > >::type any_vectorized
static std::string format_arguments(const hboost::python::detail::keywords< 2 > &args)
HBOOST_STATIC_ASSERT((size< Vectorize >::value+1==function_traits< Func >::arity))
access_type< typename traits::arg1_type >::masked masked_access_type
argument_access_type< typename traits::arg2_type, typename at< Vectorize, long_< 0 > >::type >::type arg1_type
argument_access_type< typename traits::arg1_type, typename at< Vectorize, long_< 0 > >::type >::direct arg1_direct_access_type