21 #ifndef viskores_Tuple_h
22 #define viskores_Tuple_h
42 template <
typename... Ts>
49 template <
typename TupleType>
50 using TupleSize = std::integral_constant<viskores::IdComponent, TupleType::Size>;
54 template <
typename TupleType>
55 using tuple_size = std::integral_constant<std::size_t, static_cast<std::size_t>(TupleType::Size)>;
60 template <viskores::IdComponent Index,
typename TupleType>
61 struct TupleElementImpl
63 using type = decltype(TupleType::ElementTypeI(viskores::internal::IndexTag<Index>{}));
70 template <viskores::IdComponent Index,
typename TupleType>
71 using TupleElement =
typename detail::TupleElementImpl<Index, TupleType>::type;
75 template <std::
size_t Index,
typename TupleType>
83 template <std::
size_t Index,
typename TupleType>
90 #ifndef VISKORES_DOXYGEN_ONLY
92 -> decltype(tuple.template Get<Index>())
95 return tuple.template Get<Index>();
102 #ifndef VISKORES_DOXYGEN_ONLY
104 -> decltype(tuple.template Get<Index>())
107 return tuple.template Get<Index>();
112 template <std::size_t
Index,
typename... Ts>
116 return viskores::Get<static_cast<viskores::IdComponent>(
Index)>(tuple);
121 template <std::size_t
Index,
typename... Ts>
125 return viskores::Get<static_cast<viskores::IdComponent>(
Index)>(tuple);
131 template <
typename... Ts>
140 template <
typename... Ts>
149 struct TupleTransformFunctor
152 template <
typename Function,
typename... Ts>
160 struct TupleForEachFunctor
163 template <
typename Function,
typename... Ts>
166 (void)std::initializer_list<bool>{ (f(std::forward<Ts>(args)),
false)... };
182 template <
typename... Ts,
typename Function,
typename... Args>
184 -> decltype(tuple.Apply(std::forward<Function>(f), std::forward<Args>(args)...))
186 return tuple.Apply(std::forward<Function>(f), std::forward<Args>(args)...);
190 template <
typename... Ts,
typename Function,
typename... Args>
192 -> decltype(tuple.Apply(std::forward<Function>(f), std::forward<Args>(args)...))
194 return tuple.Apply(std::forward<Function>(f), std::forward<Args>(args)...);
200 template <
typename... Ts,
typename Function>
203 return viskores::Apply(tuple, detail::TupleForEachFunctor{}, std::forward<Function>(f));
207 template <
typename... Ts,
typename Function>
210 return viskores::Apply(tuple, detail::TupleForEachFunctor{}, std::forward<Function>(f));
220 template <
typename TupleType,
typename Function>
222 -> decltype(
Apply(tuple, detail::TupleTransformFunctor(), std::forward<Function>(f)))
224 return Apply(tuple, detail::TupleTransformFunctor(), std::forward<Function>(f));
227 template <
typename TupleType,
typename Function>
229 -> decltype(
Apply(tuple, detail::TupleTransformFunctor(), std::forward<Function>(f)))
231 return Apply(tuple, detail::TupleTransformFunctor(), std::forward<Function>(f));
242 template <
typename Function,
typename... Args>
244 -> decltype(f(std::forward<Args>(args)...))
246 return f(std::forward<Args>(args)...);
249 template <
typename Function,
typename... Args>
251 -> decltype(f(std::forward<Args>(args)...))
253 return f(std::forward<Args>(args)...);
257 template <
typename Function>
263 template <
typename Function>
272 template<
typename T0>
276 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
288 template <viskores::IdComponent Index>
289 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
291 template <viskores::IdComponent,
typename>
292 friend struct detail::TupleElementImpl;
296 template <viskores::IdComponent Index>
307 template <
typename A0>
309 : Value0(std::forward<A0>(a0))
313 template <viskores::IdComponent Index>
316 return this->GetImpl(viskores::internal::IndexTag<Index>{});
319 template <viskores::IdComponent Index>
322 return this->GetImpl(viskores::internal::IndexTag<Index>{});
326 template <
typename Function,
typename... Args>
328 auto Apply(Function&& f, Args&&... args)
329 -> decltype(f(std::forward<Args>(args)..., Value0))
331 return f(std::forward<Args>(args)..., Value0);
334 template <
typename Function,
typename... Args>
336 auto Apply(Function&& f, Args&&... args)
const
337 -> decltype(f(std::forward<Args>(args)..., Value0))
339 return f(std::forward<Args>(args)..., Value0);
343 template <
typename Function>
349 template <
typename Function>
356 template <
typename Function>
363 template <
typename Function>
371 template<
typename T0,
typename T1>
375 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
386 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
398 template <viskores::IdComponent Index>
399 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
401 template <viskores::IdComponent,
typename>
402 friend struct detail::TupleElementImpl;
406 template <viskores::IdComponent Index>
417 template <
typename A0,
typename A1>
419 : Value0(std::forward<A0>(a0))
420 , Value1(std::forward<A1>(a1))
424 template <viskores::IdComponent Index>
427 return this->GetImpl(viskores::internal::IndexTag<Index>{});
430 template <viskores::IdComponent Index>
433 return this->GetImpl(viskores::internal::IndexTag<Index>{});
437 template <
typename Function,
typename... Args>
439 auto Apply(Function&& f, Args&&... args)
440 -> decltype(f(std::forward<Args>(args)..., Value0, Value1))
442 return f(std::forward<Args>(args)..., Value0, Value1);
445 template <
typename Function,
typename... Args>
447 auto Apply(Function&& f, Args&&... args)
const
448 -> decltype(f(std::forward<Args>(args)..., Value0, Value1))
450 return f(std::forward<Args>(args)..., Value0, Value1);
454 template <
typename Function>
460 template <
typename Function>
467 template <
typename Function>
474 template <
typename Function>
482 template<
typename T0,
typename T1,
typename T2>
486 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
497 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
508 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
520 template <viskores::IdComponent Index>
521 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
523 template <viskores::IdComponent,
typename>
524 friend struct detail::TupleElementImpl;
528 template <viskores::IdComponent Index>
539 template <
typename A0,
typename A1,
typename A2>
541 : Value0(std::forward<A0>(a0))
542 , Value1(std::forward<A1>(a1))
543 , Value2(std::forward<A2>(a2))
547 template <viskores::IdComponent Index>
550 return this->GetImpl(viskores::internal::IndexTag<Index>{});
553 template <viskores::IdComponent Index>
556 return this->GetImpl(viskores::internal::IndexTag<Index>{});
560 template <
typename Function,
typename... Args>
562 auto Apply(Function&& f, Args&&... args)
563 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2))
565 return f(std::forward<Args>(args)..., Value0, Value1, Value2);
568 template <
typename Function,
typename... Args>
570 auto Apply(Function&& f, Args&&... args)
const
571 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2))
573 return f(std::forward<Args>(args)..., Value0, Value1, Value2);
577 template <
typename Function>
583 template <
typename Function>
590 template <
typename Function>
597 template <
typename Function>
605 template<
typename T0,
typename T1,
typename T2,
typename T3>
609 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
620 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
631 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
642 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
654 template <viskores::IdComponent Index>
655 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
657 template <viskores::IdComponent,
typename>
658 friend struct detail::TupleElementImpl;
662 template <viskores::IdComponent Index>
673 template <
typename A0,
typename A1,
typename A2,
typename A3>
675 : Value0(std::forward<A0>(a0))
676 , Value1(std::forward<A1>(a1))
677 , Value2(std::forward<A2>(a2))
678 , Value3(std::forward<A3>(a3))
682 template <viskores::IdComponent Index>
685 return this->GetImpl(viskores::internal::IndexTag<Index>{});
688 template <viskores::IdComponent Index>
691 return this->GetImpl(viskores::internal::IndexTag<Index>{});
695 template <
typename Function,
typename... Args>
697 auto Apply(Function&& f, Args&&... args)
698 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3))
700 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3);
703 template <
typename Function,
typename... Args>
705 auto Apply(Function&& f, Args&&... args)
const
706 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3))
708 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3);
712 template <
typename Function>
718 template <
typename Function>
725 template <
typename Function>
732 template <
typename Function>
740 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4>
744 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
755 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
766 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
777 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
788 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
800 template <viskores::IdComponent Index>
801 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
803 template <viskores::IdComponent,
typename>
804 friend struct detail::TupleElementImpl;
808 template <viskores::IdComponent Index>
819 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4>
821 : Value0(std::forward<A0>(a0))
822 , Value1(std::forward<A1>(a1))
823 , Value2(std::forward<A2>(a2))
824 , Value3(std::forward<A3>(a3))
825 , Value4(std::forward<A4>(a4))
829 template <viskores::IdComponent Index>
832 return this->GetImpl(viskores::internal::IndexTag<Index>{});
835 template <viskores::IdComponent Index>
838 return this->GetImpl(viskores::internal::IndexTag<Index>{});
842 template <
typename Function,
typename... Args>
844 auto Apply(Function&& f, Args&&... args)
845 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4))
847 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4);
850 template <
typename Function,
typename... Args>
852 auto Apply(Function&& f, Args&&... args)
const
853 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4))
855 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4);
859 template <
typename Function>
865 template <
typename Function>
872 template <
typename Function>
879 template <
typename Function>
887 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
891 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
902 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
913 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
924 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
935 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
946 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
958 template <viskores::IdComponent Index>
959 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
961 template <viskores::IdComponent,
typename>
962 friend struct detail::TupleElementImpl;
966 template <viskores::IdComponent Index>
977 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
979 : Value0(std::forward<A0>(a0))
980 , Value1(std::forward<A1>(a1))
981 , Value2(std::forward<A2>(a2))
982 , Value3(std::forward<A3>(a3))
983 , Value4(std::forward<A4>(a4))
984 , Value5(std::forward<A5>(a5))
988 template <viskores::IdComponent Index>
991 return this->GetImpl(viskores::internal::IndexTag<Index>{});
994 template <viskores::IdComponent Index>
997 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1001 template <
typename Function,
typename... Args>
1003 auto Apply(Function&& f, Args&&... args)
1004 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5))
1006 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5);
1009 template <
typename Function,
typename... Args>
1011 auto Apply(Function&& f, Args&&... args)
const
1012 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5))
1014 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5);
1018 template <
typename Function>
1024 template <
typename Function>
1031 template <
typename Function>
1038 template <
typename Function>
1046 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
1050 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
1053 return this->Value0;
1057 return this->Value0;
1061 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
1064 return this->Value1;
1068 return this->Value1;
1072 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
1075 return this->Value2;
1079 return this->Value2;
1083 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
1086 return this->Value3;
1090 return this->Value3;
1094 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
1097 return this->Value4;
1101 return this->Value4;
1105 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
1108 return this->Value5;
1112 return this->Value5;
1116 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
1119 return this->Value6;
1123 return this->Value6;
1128 template <viskores::IdComponent Index>
1129 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
1131 template <viskores::IdComponent,
typename>
1132 friend struct detail::TupleElementImpl;
1136 template <viskores::IdComponent Index>
1147 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
1149 : Value0(std::forward<A0>(a0))
1150 , Value1(std::forward<A1>(a1))
1151 , Value2(std::forward<A2>(a2))
1152 , Value3(std::forward<A3>(a3))
1153 , Value4(std::forward<A4>(a4))
1154 , Value5(std::forward<A5>(a5))
1155 , Value6(std::forward<A6>(a6))
1159 template <viskores::IdComponent Index>
1162 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1165 template <viskores::IdComponent Index>
1168 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1172 template <
typename Function,
typename... Args>
1174 auto Apply(Function&& f, Args&&... args)
1175 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6))
1177 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6);
1180 template <
typename Function,
typename... Args>
1182 auto Apply(Function&& f, Args&&... args)
const
1183 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6))
1185 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6);
1189 template <
typename Function>
1195 template <
typename Function>
1202 template <
typename Function>
1209 template <
typename Function>
1217 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
1218 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7>
1221 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
1224 return this->Value0;
1228 return this->Value0;
1232 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
1235 return this->Value1;
1239 return this->Value1;
1243 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
1246 return this->Value2;
1250 return this->Value2;
1254 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
1257 return this->Value3;
1261 return this->Value3;
1265 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
1268 return this->Value4;
1272 return this->Value4;
1276 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
1279 return this->Value5;
1283 return this->Value5;
1287 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
1290 return this->Value6;
1294 return this->Value6;
1298 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
1301 return this->Value7;
1305 return this->Value7;
1310 template <viskores::IdComponent Index>
1311 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
1313 template <viskores::IdComponent,
typename>
1314 friend struct detail::TupleElementImpl;
1318 template <viskores::IdComponent Index>
1329 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
1331 : Value0(std::forward<A0>(a0))
1332 , Value1(std::forward<A1>(a1))
1333 , Value2(std::forward<A2>(a2))
1334 , Value3(std::forward<A3>(a3))
1335 , Value4(std::forward<A4>(a4))
1336 , Value5(std::forward<A5>(a5))
1337 , Value6(std::forward<A6>(a6))
1338 , Value7(std::forward<A7>(a7))
1342 template <viskores::IdComponent Index>
1345 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1348 template <viskores::IdComponent Index>
1351 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1355 template <
typename Function,
typename... Args>
1357 auto Apply(Function&& f, Args&&... args)
1358 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7))
1360 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7);
1363 template <
typename Function,
typename... Args>
1365 auto Apply(Function&& f, Args&&... args)
const
1366 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7))
1368 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7);
1372 template <
typename Function>
1378 template <
typename Function>
1385 template <
typename Function>
1392 template <
typename Function>
1400 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
1401 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8>
1404 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
1407 return this->Value0;
1411 return this->Value0;
1415 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
1418 return this->Value1;
1422 return this->Value1;
1426 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
1429 return this->Value2;
1433 return this->Value2;
1437 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
1440 return this->Value3;
1444 return this->Value3;
1448 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
1451 return this->Value4;
1455 return this->Value4;
1459 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
1462 return this->Value5;
1466 return this->Value5;
1470 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
1473 return this->Value6;
1477 return this->Value6;
1481 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
1484 return this->Value7;
1488 return this->Value7;
1492 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
1495 return this->Value8;
1499 return this->Value8;
1504 template <viskores::IdComponent Index>
1505 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
1507 template <viskores::IdComponent,
typename>
1508 friend struct detail::TupleElementImpl;
1512 template <viskores::IdComponent Index>
1523 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
1525 : Value0(std::forward<A0>(a0))
1526 , Value1(std::forward<A1>(a1))
1527 , Value2(std::forward<A2>(a2))
1528 , Value3(std::forward<A3>(a3))
1529 , Value4(std::forward<A4>(a4))
1530 , Value5(std::forward<A5>(a5))
1531 , Value6(std::forward<A6>(a6))
1532 , Value7(std::forward<A7>(a7))
1533 , Value8(std::forward<A8>(a8))
1537 template <viskores::IdComponent Index>
1540 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1543 template <viskores::IdComponent Index>
1546 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1550 template <
typename Function,
typename... Args>
1552 auto Apply(Function&& f, Args&&... args)
1553 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8))
1555 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8);
1558 template <
typename Function,
typename... Args>
1560 auto Apply(Function&& f, Args&&... args)
const
1561 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8))
1563 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8);
1567 template <
typename Function>
1573 template <
typename Function>
1580 template <
typename Function>
1587 template <
typename Function>
1595 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
1596 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>
1599 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
1602 return this->Value0;
1606 return this->Value0;
1610 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
1613 return this->Value1;
1617 return this->Value1;
1621 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
1624 return this->Value2;
1628 return this->Value2;
1632 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
1635 return this->Value3;
1639 return this->Value3;
1643 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
1646 return this->Value4;
1650 return this->Value4;
1654 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
1657 return this->Value5;
1661 return this->Value5;
1665 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
1668 return this->Value6;
1672 return this->Value6;
1676 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
1679 return this->Value7;
1683 return this->Value7;
1687 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
1690 return this->Value8;
1694 return this->Value8;
1698 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
1701 return this->Value9;
1705 return this->Value9;
1710 template <viskores::IdComponent Index>
1711 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
1713 template <viskores::IdComponent,
typename>
1714 friend struct detail::TupleElementImpl;
1718 template <viskores::IdComponent Index>
1719 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>>;
1729 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
1731 : Value0(std::forward<A0>(a0))
1732 , Value1(std::forward<A1>(a1))
1733 , Value2(std::forward<A2>(a2))
1734 , Value3(std::forward<A3>(a3))
1735 , Value4(std::forward<A4>(a4))
1736 , Value5(std::forward<A5>(a5))
1737 , Value6(std::forward<A6>(a6))
1738 , Value7(std::forward<A7>(a7))
1739 , Value8(std::forward<A8>(a8))
1740 , Value9(std::forward<A9>(a9))
1744 template <viskores::IdComponent Index>
1747 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1750 template <viskores::IdComponent Index>
1753 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1757 template <
typename Function,
typename... Args>
1759 auto Apply(Function&& f, Args&&... args)
1760 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9))
1762 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9);
1765 template <
typename Function,
typename... Args>
1767 auto Apply(Function&& f, Args&&... args)
const
1768 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9))
1770 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9);
1774 template <
typename Function>
1780 template <
typename Function>
1787 template <
typename Function>
1794 template <
typename Function>
1802 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
1803 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
1806 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
1809 return this->Value0;
1813 return this->Value0;
1817 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
1820 return this->Value1;
1824 return this->Value1;
1828 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
1831 return this->Value2;
1835 return this->Value2;
1839 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
1842 return this->Value3;
1846 return this->Value3;
1850 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
1853 return this->Value4;
1857 return this->Value4;
1861 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
1864 return this->Value5;
1868 return this->Value5;
1872 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
1875 return this->Value6;
1879 return this->Value6;
1883 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
1886 return this->Value7;
1890 return this->Value7;
1894 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
1897 return this->Value8;
1901 return this->Value8;
1905 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
1908 return this->Value9;
1912 return this->Value9;
1916 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
1919 return this->Value10;
1923 return this->Value10;
1928 template <viskores::IdComponent Index>
1929 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
1931 template <viskores::IdComponent,
typename>
1932 friend struct detail::TupleElementImpl;
1936 template <viskores::IdComponent Index>
1937 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>>;
1947 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10>
1948 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10)
1949 : Value0(std::forward<A0>(a0))
1950 , Value1(std::forward<A1>(a1))
1951 , Value2(std::forward<A2>(a2))
1952 , Value3(std::forward<A3>(a3))
1953 , Value4(std::forward<A4>(a4))
1954 , Value5(std::forward<A5>(a5))
1955 , Value6(std::forward<A6>(a6))
1956 , Value7(std::forward<A7>(a7))
1957 , Value8(std::forward<A8>(a8))
1958 , Value9(std::forward<A9>(a9))
1959 , Value10(std::forward<A10>(a10))
1963 template <viskores::IdComponent Index>
1966 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1969 template <viskores::IdComponent Index>
1972 return this->GetImpl(viskores::internal::IndexTag<Index>{});
1976 template <
typename Function,
typename... Args>
1978 auto Apply(Function&& f, Args&&... args)
1979 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10))
1981 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10);
1984 template <
typename Function,
typename... Args>
1986 auto Apply(Function&& f, Args&&... args)
const
1987 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10))
1989 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10);
1993 template <
typename Function>
1999 template <
typename Function>
2006 template <
typename Function>
2013 template <
typename Function>
2021 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11>
2022 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
2025 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
2028 return this->Value0;
2032 return this->Value0;
2036 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
2039 return this->Value1;
2043 return this->Value1;
2047 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
2050 return this->Value2;
2054 return this->Value2;
2058 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
2061 return this->Value3;
2065 return this->Value3;
2069 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
2072 return this->Value4;
2076 return this->Value4;
2080 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
2083 return this->Value5;
2087 return this->Value5;
2091 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
2094 return this->Value6;
2098 return this->Value6;
2102 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
2105 return this->Value7;
2109 return this->Value7;
2113 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
2116 return this->Value8;
2120 return this->Value8;
2124 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
2127 return this->Value9;
2131 return this->Value9;
2135 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
2138 return this->Value10;
2142 return this->Value10;
2146 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
2149 return this->Value11;
2153 return this->Value11;
2158 template <viskores::IdComponent Index>
2159 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
2161 template <viskores::IdComponent,
typename>
2162 friend struct detail::TupleElementImpl;
2166 template <viskores::IdComponent Index>
2167 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>>;
2177 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11>
2178 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11)
2179 : Value0(std::forward<A0>(a0))
2180 , Value1(std::forward<A1>(a1))
2181 , Value2(std::forward<A2>(a2))
2182 , Value3(std::forward<A3>(a3))
2183 , Value4(std::forward<A4>(a4))
2184 , Value5(std::forward<A5>(a5))
2185 , Value6(std::forward<A6>(a6))
2186 , Value7(std::forward<A7>(a7))
2187 , Value8(std::forward<A8>(a8))
2188 , Value9(std::forward<A9>(a9))
2189 , Value10(std::forward<A10>(a10))
2190 , Value11(std::forward<A11>(a11))
2194 template <viskores::IdComponent Index>
2197 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2200 template <viskores::IdComponent Index>
2203 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2207 template <
typename Function,
typename... Args>
2209 auto Apply(Function&& f, Args&&... args)
2210 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11))
2212 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11);
2215 template <
typename Function,
typename... Args>
2217 auto Apply(Function&& f, Args&&... args)
const
2218 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11))
2220 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11);
2224 template <
typename Function>
2230 template <
typename Function>
2237 template <
typename Function>
2244 template <
typename Function>
2252 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12>
2253 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
2256 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
2259 return this->Value0;
2263 return this->Value0;
2267 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
2270 return this->Value1;
2274 return this->Value1;
2278 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
2281 return this->Value2;
2285 return this->Value2;
2289 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
2292 return this->Value3;
2296 return this->Value3;
2300 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
2303 return this->Value4;
2307 return this->Value4;
2311 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
2314 return this->Value5;
2318 return this->Value5;
2322 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
2325 return this->Value6;
2329 return this->Value6;
2333 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
2336 return this->Value7;
2340 return this->Value7;
2344 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
2347 return this->Value8;
2351 return this->Value8;
2355 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
2358 return this->Value9;
2362 return this->Value9;
2366 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
2369 return this->Value10;
2373 return this->Value10;
2377 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
2380 return this->Value11;
2384 return this->Value11;
2388 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
2391 return this->Value12;
2395 return this->Value12;
2400 template <viskores::IdComponent Index>
2401 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
2403 template <viskores::IdComponent,
typename>
2404 friend struct detail::TupleElementImpl;
2408 template <viskores::IdComponent Index>
2409 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>>;
2419 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12>
2420 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12)
2421 : Value0(std::forward<A0>(a0))
2422 , Value1(std::forward<A1>(a1))
2423 , Value2(std::forward<A2>(a2))
2424 , Value3(std::forward<A3>(a3))
2425 , Value4(std::forward<A4>(a4))
2426 , Value5(std::forward<A5>(a5))
2427 , Value6(std::forward<A6>(a6))
2428 , Value7(std::forward<A7>(a7))
2429 , Value8(std::forward<A8>(a8))
2430 , Value9(std::forward<A9>(a9))
2431 , Value10(std::forward<A10>(a10))
2432 , Value11(std::forward<A11>(a11))
2433 , Value12(std::forward<A12>(a12))
2437 template <viskores::IdComponent Index>
2440 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2443 template <viskores::IdComponent Index>
2446 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2450 template <
typename Function,
typename... Args>
2452 auto Apply(Function&& f, Args&&... args)
2453 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12))
2455 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12);
2458 template <
typename Function,
typename... Args>
2460 auto Apply(Function&& f, Args&&... args)
const
2461 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12))
2463 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12);
2467 template <
typename Function>
2473 template <
typename Function>
2480 template <
typename Function>
2487 template <
typename Function>
2495 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13>
2496 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
2499 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
2502 return this->Value0;
2506 return this->Value0;
2510 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
2513 return this->Value1;
2517 return this->Value1;
2521 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
2524 return this->Value2;
2528 return this->Value2;
2532 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
2535 return this->Value3;
2539 return this->Value3;
2543 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
2546 return this->Value4;
2550 return this->Value4;
2554 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
2557 return this->Value5;
2561 return this->Value5;
2565 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
2568 return this->Value6;
2572 return this->Value6;
2576 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
2579 return this->Value7;
2583 return this->Value7;
2587 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
2590 return this->Value8;
2594 return this->Value8;
2598 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
2601 return this->Value9;
2605 return this->Value9;
2609 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
2612 return this->Value10;
2616 return this->Value10;
2620 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
2623 return this->Value11;
2627 return this->Value11;
2631 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
2634 return this->Value12;
2638 return this->Value12;
2642 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
2645 return this->Value13;
2649 return this->Value13;
2654 template <viskores::IdComponent Index>
2655 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
2657 template <viskores::IdComponent,
typename>
2658 friend struct detail::TupleElementImpl;
2662 template <viskores::IdComponent Index>
2663 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>>;
2673 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13>
2674 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13)
2675 : Value0(std::forward<A0>(a0))
2676 , Value1(std::forward<A1>(a1))
2677 , Value2(std::forward<A2>(a2))
2678 , Value3(std::forward<A3>(a3))
2679 , Value4(std::forward<A4>(a4))
2680 , Value5(std::forward<A5>(a5))
2681 , Value6(std::forward<A6>(a6))
2682 , Value7(std::forward<A7>(a7))
2683 , Value8(std::forward<A8>(a8))
2684 , Value9(std::forward<A9>(a9))
2685 , Value10(std::forward<A10>(a10))
2686 , Value11(std::forward<A11>(a11))
2687 , Value12(std::forward<A12>(a12))
2688 , Value13(std::forward<A13>(a13))
2692 template <viskores::IdComponent Index>
2695 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2698 template <viskores::IdComponent Index>
2701 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2705 template <
typename Function,
typename... Args>
2707 auto Apply(Function&& f, Args&&... args)
2708 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13))
2710 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13);
2713 template <
typename Function,
typename... Args>
2715 auto Apply(Function&& f, Args&&... args)
const
2716 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13))
2718 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13);
2722 template <
typename Function>
2728 template <
typename Function>
2735 template <
typename Function>
2742 template <
typename Function>
2750 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14>
2751 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
2754 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
2757 return this->Value0;
2761 return this->Value0;
2765 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
2768 return this->Value1;
2772 return this->Value1;
2776 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
2779 return this->Value2;
2783 return this->Value2;
2787 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
2790 return this->Value3;
2794 return this->Value3;
2798 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
2801 return this->Value4;
2805 return this->Value4;
2809 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
2812 return this->Value5;
2816 return this->Value5;
2820 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
2823 return this->Value6;
2827 return this->Value6;
2831 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
2834 return this->Value7;
2838 return this->Value7;
2842 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
2845 return this->Value8;
2849 return this->Value8;
2853 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
2856 return this->Value9;
2860 return this->Value9;
2864 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
2867 return this->Value10;
2871 return this->Value10;
2875 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
2878 return this->Value11;
2882 return this->Value11;
2886 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
2889 return this->Value12;
2893 return this->Value12;
2897 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
2900 return this->Value13;
2904 return this->Value13;
2908 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
2911 return this->Value14;
2915 return this->Value14;
2920 template <viskores::IdComponent Index>
2921 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
2923 template <viskores::IdComponent,
typename>
2924 friend struct detail::TupleElementImpl;
2928 template <viskores::IdComponent Index>
2929 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>>;
2939 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14>
2940 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14)
2941 : Value0(std::forward<A0>(a0))
2942 , Value1(std::forward<A1>(a1))
2943 , Value2(std::forward<A2>(a2))
2944 , Value3(std::forward<A3>(a3))
2945 , Value4(std::forward<A4>(a4))
2946 , Value5(std::forward<A5>(a5))
2947 , Value6(std::forward<A6>(a6))
2948 , Value7(std::forward<A7>(a7))
2949 , Value8(std::forward<A8>(a8))
2950 , Value9(std::forward<A9>(a9))
2951 , Value10(std::forward<A10>(a10))
2952 , Value11(std::forward<A11>(a11))
2953 , Value12(std::forward<A12>(a12))
2954 , Value13(std::forward<A13>(a13))
2955 , Value14(std::forward<A14>(a14))
2959 template <viskores::IdComponent Index>
2962 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2965 template <viskores::IdComponent Index>
2968 return this->GetImpl(viskores::internal::IndexTag<Index>{});
2972 template <
typename Function,
typename... Args>
2974 auto Apply(Function&& f, Args&&... args)
2975 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14))
2977 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14);
2980 template <
typename Function,
typename... Args>
2982 auto Apply(Function&& f, Args&&... args)
const
2983 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14))
2985 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14);
2989 template <
typename Function>
2995 template <
typename Function>
3002 template <
typename Function>
3009 template <
typename Function>
3017 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
3018 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
3021 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
3024 return this->Value0;
3028 return this->Value0;
3032 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
3035 return this->Value1;
3039 return this->Value1;
3043 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
3046 return this->Value2;
3050 return this->Value2;
3054 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
3057 return this->Value3;
3061 return this->Value3;
3065 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
3068 return this->Value4;
3072 return this->Value4;
3076 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
3079 return this->Value5;
3083 return this->Value5;
3087 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
3090 return this->Value6;
3094 return this->Value6;
3098 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
3101 return this->Value7;
3105 return this->Value7;
3109 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
3112 return this->Value8;
3116 return this->Value8;
3120 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
3123 return this->Value9;
3127 return this->Value9;
3131 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
3134 return this->Value10;
3138 return this->Value10;
3142 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
3145 return this->Value11;
3149 return this->Value11;
3153 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
3156 return this->Value12;
3160 return this->Value12;
3164 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
3167 return this->Value13;
3171 return this->Value13;
3175 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
3178 return this->Value14;
3182 return this->Value14;
3186 static T15 ElementTypeI(viskores::internal::IndexTag<15>);
3189 return this->Value15;
3193 return this->Value15;
3198 template <viskores::IdComponent Index>
3199 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
3201 template <viskores::IdComponent,
typename>
3202 friend struct detail::TupleElementImpl;
3206 template <viskores::IdComponent Index>
3207 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>>;
3217 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14,
typename A15>
3218 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15)
3219 : Value0(std::forward<A0>(a0))
3220 , Value1(std::forward<A1>(a1))
3221 , Value2(std::forward<A2>(a2))
3222 , Value3(std::forward<A3>(a3))
3223 , Value4(std::forward<A4>(a4))
3224 , Value5(std::forward<A5>(a5))
3225 , Value6(std::forward<A6>(a6))
3226 , Value7(std::forward<A7>(a7))
3227 , Value8(std::forward<A8>(a8))
3228 , Value9(std::forward<A9>(a9))
3229 , Value10(std::forward<A10>(a10))
3230 , Value11(std::forward<A11>(a11))
3231 , Value12(std::forward<A12>(a12))
3232 , Value13(std::forward<A13>(a13))
3233 , Value14(std::forward<A14>(a14))
3234 , Value15(std::forward<A15>(a15))
3238 template <viskores::IdComponent Index>
3241 return this->GetImpl(viskores::internal::IndexTag<Index>{});
3244 template <viskores::IdComponent Index>
3247 return this->GetImpl(viskores::internal::IndexTag<Index>{});
3251 template <
typename Function,
typename... Args>
3253 auto Apply(Function&& f, Args&&... args)
3254 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15))
3256 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15);
3259 template <
typename Function,
typename... Args>
3261 auto Apply(Function&& f, Args&&... args)
const
3262 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15))
3264 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15);
3268 template <
typename Function>
3274 template <
typename Function>
3281 template <
typename Function>
3288 template <
typename Function>
3296 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
typename T16>
3297 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>
3300 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
3303 return this->Value0;
3307 return this->Value0;
3311 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
3314 return this->Value1;
3318 return this->Value1;
3322 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
3325 return this->Value2;
3329 return this->Value2;
3333 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
3336 return this->Value3;
3340 return this->Value3;
3344 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
3347 return this->Value4;
3351 return this->Value4;
3355 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
3358 return this->Value5;
3362 return this->Value5;
3366 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
3369 return this->Value6;
3373 return this->Value6;
3377 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
3380 return this->Value7;
3384 return this->Value7;
3388 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
3391 return this->Value8;
3395 return this->Value8;
3399 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
3402 return this->Value9;
3406 return this->Value9;
3410 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
3413 return this->Value10;
3417 return this->Value10;
3421 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
3424 return this->Value11;
3428 return this->Value11;
3432 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
3435 return this->Value12;
3439 return this->Value12;
3443 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
3446 return this->Value13;
3450 return this->Value13;
3454 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
3457 return this->Value14;
3461 return this->Value14;
3465 static T15 ElementTypeI(viskores::internal::IndexTag<15>);
3468 return this->Value15;
3472 return this->Value15;
3476 static T16 ElementTypeI(viskores::internal::IndexTag<16>);
3479 return this->Value16;
3483 return this->Value16;
3488 template <viskores::IdComponent Index>
3489 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
3491 template <viskores::IdComponent,
typename>
3492 friend struct detail::TupleElementImpl;
3496 template <viskores::IdComponent Index>
3497 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>>;
3507 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14,
typename A15,
typename A16>
3508 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16)
3509 : Value0(std::forward<A0>(a0))
3510 , Value1(std::forward<A1>(a1))
3511 , Value2(std::forward<A2>(a2))
3512 , Value3(std::forward<A3>(a3))
3513 , Value4(std::forward<A4>(a4))
3514 , Value5(std::forward<A5>(a5))
3515 , Value6(std::forward<A6>(a6))
3516 , Value7(std::forward<A7>(a7))
3517 , Value8(std::forward<A8>(a8))
3518 , Value9(std::forward<A9>(a9))
3519 , Value10(std::forward<A10>(a10))
3520 , Value11(std::forward<A11>(a11))
3521 , Value12(std::forward<A12>(a12))
3522 , Value13(std::forward<A13>(a13))
3523 , Value14(std::forward<A14>(a14))
3524 , Value15(std::forward<A15>(a15))
3525 , Value16(std::forward<A16>(a16))
3529 template <viskores::IdComponent Index>
3532 return this->GetImpl(viskores::internal::IndexTag<Index>{});
3535 template <viskores::IdComponent Index>
3538 return this->GetImpl(viskores::internal::IndexTag<Index>{});
3542 template <
typename Function,
typename... Args>
3544 auto Apply(Function&& f, Args&&... args)
3545 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16))
3547 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16);
3550 template <
typename Function,
typename... Args>
3552 auto Apply(Function&& f, Args&&... args)
const
3553 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16))
3555 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16);
3559 template <
typename Function>
3565 template <
typename Function>
3572 template <
typename Function>
3579 template <
typename Function>
3587 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
typename T16,
typename T17>
3588 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>
3591 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
3594 return this->Value0;
3598 return this->Value0;
3602 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
3605 return this->Value1;
3609 return this->Value1;
3613 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
3616 return this->Value2;
3620 return this->Value2;
3624 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
3627 return this->Value3;
3631 return this->Value3;
3635 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
3638 return this->Value4;
3642 return this->Value4;
3646 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
3649 return this->Value5;
3653 return this->Value5;
3657 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
3660 return this->Value6;
3664 return this->Value6;
3668 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
3671 return this->Value7;
3675 return this->Value7;
3679 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
3682 return this->Value8;
3686 return this->Value8;
3690 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
3693 return this->Value9;
3697 return this->Value9;
3701 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
3704 return this->Value10;
3708 return this->Value10;
3712 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
3715 return this->Value11;
3719 return this->Value11;
3723 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
3726 return this->Value12;
3730 return this->Value12;
3734 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
3737 return this->Value13;
3741 return this->Value13;
3745 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
3748 return this->Value14;
3752 return this->Value14;
3756 static T15 ElementTypeI(viskores::internal::IndexTag<15>);
3759 return this->Value15;
3763 return this->Value15;
3767 static T16 ElementTypeI(viskores::internal::IndexTag<16>);
3770 return this->Value16;
3774 return this->Value16;
3778 static T17 ElementTypeI(viskores::internal::IndexTag<17>);
3781 return this->Value17;
3785 return this->Value17;
3790 template <viskores::IdComponent Index>
3791 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
3793 template <viskores::IdComponent,
typename>
3794 friend struct detail::TupleElementImpl;
3798 template <viskores::IdComponent Index>
3799 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>>;
3809 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14,
typename A15,
typename A16,
typename A17>
3810 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17)
3811 : Value0(std::forward<A0>(a0))
3812 , Value1(std::forward<A1>(a1))
3813 , Value2(std::forward<A2>(a2))
3814 , Value3(std::forward<A3>(a3))
3815 , Value4(std::forward<A4>(a4))
3816 , Value5(std::forward<A5>(a5))
3817 , Value6(std::forward<A6>(a6))
3818 , Value7(std::forward<A7>(a7))
3819 , Value8(std::forward<A8>(a8))
3820 , Value9(std::forward<A9>(a9))
3821 , Value10(std::forward<A10>(a10))
3822 , Value11(std::forward<A11>(a11))
3823 , Value12(std::forward<A12>(a12))
3824 , Value13(std::forward<A13>(a13))
3825 , Value14(std::forward<A14>(a14))
3826 , Value15(std::forward<A15>(a15))
3827 , Value16(std::forward<A16>(a16))
3828 , Value17(std::forward<A17>(a17))
3832 template <viskores::IdComponent Index>
3835 return this->GetImpl(viskores::internal::IndexTag<Index>{});
3838 template <viskores::IdComponent Index>
3841 return this->GetImpl(viskores::internal::IndexTag<Index>{});
3845 template <
typename Function,
typename... Args>
3847 auto Apply(Function&& f, Args&&... args)
3848 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17))
3850 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17);
3853 template <
typename Function,
typename... Args>
3855 auto Apply(Function&& f, Args&&... args)
const
3856 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17))
3858 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17);
3862 template <
typename Function>
3868 template <
typename Function>
3875 template <
typename Function>
3882 template <
typename Function>
3890 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
typename T16,
typename T17,
typename T18>
3891 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>
3894 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
3897 return this->Value0;
3901 return this->Value0;
3905 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
3908 return this->Value1;
3912 return this->Value1;
3916 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
3919 return this->Value2;
3923 return this->Value2;
3927 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
3930 return this->Value3;
3934 return this->Value3;
3938 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
3941 return this->Value4;
3945 return this->Value4;
3949 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
3952 return this->Value5;
3956 return this->Value5;
3960 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
3963 return this->Value6;
3967 return this->Value6;
3971 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
3974 return this->Value7;
3978 return this->Value7;
3982 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
3985 return this->Value8;
3989 return this->Value8;
3993 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
3996 return this->Value9;
4000 return this->Value9;
4004 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
4007 return this->Value10;
4011 return this->Value10;
4015 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
4018 return this->Value11;
4022 return this->Value11;
4026 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
4029 return this->Value12;
4033 return this->Value12;
4037 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
4040 return this->Value13;
4044 return this->Value13;
4048 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
4051 return this->Value14;
4055 return this->Value14;
4059 static T15 ElementTypeI(viskores::internal::IndexTag<15>);
4062 return this->Value15;
4066 return this->Value15;
4070 static T16 ElementTypeI(viskores::internal::IndexTag<16>);
4073 return this->Value16;
4077 return this->Value16;
4081 static T17 ElementTypeI(viskores::internal::IndexTag<17>);
4084 return this->Value17;
4088 return this->Value17;
4092 static T18 ElementTypeI(viskores::internal::IndexTag<18>);
4095 return this->Value18;
4099 return this->Value18;
4104 template <viskores::IdComponent Index>
4105 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
4107 template <viskores::IdComponent,
typename>
4108 friend struct detail::TupleElementImpl;
4112 template <viskores::IdComponent Index>
4113 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>>;
4123 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14,
typename A15,
typename A16,
typename A17,
typename A18>
4124 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17, A18&& a18)
4125 : Value0(std::forward<A0>(a0))
4126 , Value1(std::forward<A1>(a1))
4127 , Value2(std::forward<A2>(a2))
4128 , Value3(std::forward<A3>(a3))
4129 , Value4(std::forward<A4>(a4))
4130 , Value5(std::forward<A5>(a5))
4131 , Value6(std::forward<A6>(a6))
4132 , Value7(std::forward<A7>(a7))
4133 , Value8(std::forward<A8>(a8))
4134 , Value9(std::forward<A9>(a9))
4135 , Value10(std::forward<A10>(a10))
4136 , Value11(std::forward<A11>(a11))
4137 , Value12(std::forward<A12>(a12))
4138 , Value13(std::forward<A13>(a13))
4139 , Value14(std::forward<A14>(a14))
4140 , Value15(std::forward<A15>(a15))
4141 , Value16(std::forward<A16>(a16))
4142 , Value17(std::forward<A17>(a17))
4143 , Value18(std::forward<A18>(a18))
4147 template <viskores::IdComponent Index>
4150 return this->GetImpl(viskores::internal::IndexTag<Index>{});
4153 template <viskores::IdComponent Index>
4156 return this->GetImpl(viskores::internal::IndexTag<Index>{});
4160 template <
typename Function,
typename... Args>
4162 auto Apply(Function&& f, Args&&... args)
4163 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18))
4165 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18);
4168 template <
typename Function,
typename... Args>
4170 auto Apply(Function&& f, Args&&... args)
const
4171 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18))
4173 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18);
4177 template <
typename Function>
4183 template <
typename Function>
4190 template <
typename Function>
4197 template <
typename Function>
4205 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
typename T16,
typename T17,
typename T18,
typename T19>
4206 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>
4209 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
4212 return this->Value0;
4216 return this->Value0;
4220 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
4223 return this->Value1;
4227 return this->Value1;
4231 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
4234 return this->Value2;
4238 return this->Value2;
4242 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
4245 return this->Value3;
4249 return this->Value3;
4253 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
4256 return this->Value4;
4260 return this->Value4;
4264 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
4267 return this->Value5;
4271 return this->Value5;
4275 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
4278 return this->Value6;
4282 return this->Value6;
4286 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
4289 return this->Value7;
4293 return this->Value7;
4297 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
4300 return this->Value8;
4304 return this->Value8;
4308 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
4311 return this->Value9;
4315 return this->Value9;
4319 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
4322 return this->Value10;
4326 return this->Value10;
4330 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
4333 return this->Value11;
4337 return this->Value11;
4341 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
4344 return this->Value12;
4348 return this->Value12;
4352 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
4355 return this->Value13;
4359 return this->Value13;
4363 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
4366 return this->Value14;
4370 return this->Value14;
4374 static T15 ElementTypeI(viskores::internal::IndexTag<15>);
4377 return this->Value15;
4381 return this->Value15;
4385 static T16 ElementTypeI(viskores::internal::IndexTag<16>);
4388 return this->Value16;
4392 return this->Value16;
4396 static T17 ElementTypeI(viskores::internal::IndexTag<17>);
4399 return this->Value17;
4403 return this->Value17;
4407 static T18 ElementTypeI(viskores::internal::IndexTag<18>);
4410 return this->Value18;
4414 return this->Value18;
4418 static T19 ElementTypeI(viskores::internal::IndexTag<19>);
4421 return this->Value19;
4425 return this->Value19;
4430 template <viskores::IdComponent Index>
4431 static viskores::internal::NullType ElementTypeI(viskores::internal::IndexTag<Index>);
4433 template <viskores::IdComponent,
typename>
4434 friend struct detail::TupleElementImpl;
4438 template <viskores::IdComponent Index>
4439 using ElementType =
viskores::TupleElement<Index, Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>>;
4449 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14,
typename A15,
typename A16,
typename A17,
typename A18,
typename A19>
4450 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17, A18&& a18, A19&& a19)
4451 : Value0(std::forward<A0>(a0))
4452 , Value1(std::forward<A1>(a1))
4453 , Value2(std::forward<A2>(a2))
4454 , Value3(std::forward<A3>(a3))
4455 , Value4(std::forward<A4>(a4))
4456 , Value5(std::forward<A5>(a5))
4457 , Value6(std::forward<A6>(a6))
4458 , Value7(std::forward<A7>(a7))
4459 , Value8(std::forward<A8>(a8))
4460 , Value9(std::forward<A9>(a9))
4461 , Value10(std::forward<A10>(a10))
4462 , Value11(std::forward<A11>(a11))
4463 , Value12(std::forward<A12>(a12))
4464 , Value13(std::forward<A13>(a13))
4465 , Value14(std::forward<A14>(a14))
4466 , Value15(std::forward<A15>(a15))
4467 , Value16(std::forward<A16>(a16))
4468 , Value17(std::forward<A17>(a17))
4469 , Value18(std::forward<A18>(a18))
4470 , Value19(std::forward<A19>(a19))
4474 template <viskores::IdComponent Index>
4477 return this->GetImpl(viskores::internal::IndexTag<Index>{});
4480 template <viskores::IdComponent Index>
4483 return this->GetImpl(viskores::internal::IndexTag<Index>{});
4487 template <
typename Function,
typename... Args>
4489 auto Apply(Function&& f, Args&&... args)
4490 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19))
4492 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19);
4495 template <
typename Function,
typename... Args>
4497 auto Apply(Function&& f, Args&&... args)
const
4498 -> decltype(f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19))
4500 return f(std::forward<Args>(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19);
4504 template <
typename Function>
4510 template <
typename Function>
4517 template <
typename Function>
4524 template <
typename Function>
4534 template<
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename T11,
typename T12,
typename T13,
typename T14,
typename T15,
typename T16,
typename T17,
typename T18,
typename T19,
typename T20,
typename... Ts>
4535 class Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, Ts...>
4538 static T0 ElementTypeI(viskores::internal::IndexTag<0>);
4541 return this->Value0;
4545 return this->Value0;
4549 static T1 ElementTypeI(viskores::internal::IndexTag<1>);
4552 return this->Value1;
4556 return this->Value1;
4560 static T2 ElementTypeI(viskores::internal::IndexTag<2>);
4563 return this->Value2;
4567 return this->Value2;
4571 static T3 ElementTypeI(viskores::internal::IndexTag<3>);
4574 return this->Value3;
4578 return this->Value3;
4582 static T4 ElementTypeI(viskores::internal::IndexTag<4>);
4585 return this->Value4;
4589 return this->Value4;
4593 static T5 ElementTypeI(viskores::internal::IndexTag<5>);
4596 return this->Value5;
4600 return this->Value5;
4604 static T6 ElementTypeI(viskores::internal::IndexTag<6>);
4607 return this->Value6;
4611 return this->Value6;
4615 static T7 ElementTypeI(viskores::internal::IndexTag<7>);
4618 return this->Value7;
4622 return this->Value7;
4626 static T8 ElementTypeI(viskores::internal::IndexTag<8>);
4629 return this->Value8;
4633 return this->Value8;
4637 static T9 ElementTypeI(viskores::internal::IndexTag<9>);
4640 return this->Value9;
4644 return this->Value9;
4648 static T10 ElementTypeI(viskores::internal::IndexTag<10>);
4651 return this->Value10;
4655 return this->Value10;
4659 static T11 ElementTypeI(viskores::internal::IndexTag<11>);
4662 return this->Value11;
4666 return this->Value11;
4670 static T12 ElementTypeI(viskores::internal::IndexTag<12>);
4673 return this->Value12;
4677 return this->Value12;
4681 static T13 ElementTypeI(viskores::internal::IndexTag<13>);
4684 return this->Value13;
4688 return this->Value13;
4692 static T14 ElementTypeI(viskores::internal::IndexTag<14>);
4695 return this->Value14;
4699 return this->Value14;
4703 static T15 ElementTypeI(viskores::internal::IndexTag<15>);
4706 return this->Value15;
4710 return this->Value15;
4714 static T16 ElementTypeI(viskores::internal::IndexTag<16>);
4717 return this->Value16;
4721 return this->Value16;
4725 static T17 ElementTypeI(viskores::internal::IndexTag<17>);
4728 return this->Value17;
4732 return this->Value17;
4736 static T18 ElementTypeI(viskores::internal::IndexTag<18>);
4739 return this->Value18;
4743 return this->Value18;
4747 static T19 ElementTypeI(viskores::internal::IndexTag<19>);
4750 return this->Value19;
4754 return this->Value19;
4762 template <viskores::IdComponent Index>
4764 ElementTypeI(viskores::internal::IndexTag<Index>);
4766 template <
typename viskores::IdComponent Index>
4769 template <
typename viskores::IdComponent Index>
4773 template <viskores::IdComponent,
typename>
4774 friend struct detail::TupleElementImpl;
4779 template <viskores::IdComponent Index>
4780 using ElementType =
viskores::TupleElement<
Index,
Tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, Ts...>>;
4790 template <
typename A0,
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9,
typename A10,
typename A11,
typename A12,
typename A13,
typename A14,
typename A15,
typename A16,
typename A17,
typename A18,
typename A19,
typename... As>
4791 VISKORES_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17, A18&& a18, A19&& a19, As&&... remainingArgs)
4792 : Value0(std::forward<A0>(a0))
4793 , Value1(std::forward<A1>(a1))
4794 , Value2(std::forward<A2>(a2))
4795 , Value3(std::forward<A3>(a3))
4796 , Value4(std::forward<A4>(a4))
4797 , Value5(std::forward<A5>(a5))
4798 , Value6(std::forward<A6>(a6))
4799 , Value7(std::forward<A7>(a7))
4800 , Value8(std::forward<A8>(a8))
4801 , Value9(std::forward<A9>(a9))
4802 , Value10(std::forward<A10>(a10))
4803 , Value11(std::forward<A11>(a11))
4804 , Value12(std::forward<A12>(a12))
4805 , Value13(std::forward<A13>(a13))
4806 , Value14(std::forward<A14>(a14))
4807 , Value15(std::forward<A15>(a15))
4808 , Value16(std::forward<A16>(a16))
4809 , Value17(std::forward<A17>(a17))
4810 , Value18(std::forward<A18>(a18))
4811 , Value19(std::forward<A19>(a19))
4812 , RemainingValues(std::forward<As>(remainingArgs)...)
4816 template <viskores::IdComponent Index>
4819 return this->GetImpl(viskores::internal::IndexTag<Index>{});
4822 template <viskores::IdComponent Index>
4825 return this->GetImpl(viskores::internal::IndexTag<Index>{});
4829 template <
typename Function,
typename... Args>
4831 auto Apply(Function&& f, Args&&... args)
4832 -> decltype(this->RemainingValues.Apply(std::forward<Function>(f),
4833 std::forward<Args>(args)...,
4855 return this->RemainingValues.Apply(std::forward<Function>(f),
4856 std::forward<Args>(args)...,
4879 template <
typename Function,
typename... Args>
4881 auto Apply(Function&& f, Args&&... args)
const
4882 -> decltype(this->RemainingValues.Apply(std::forward<Function>(f),
4883 std::forward<Args>(args)...,
4905 return this->RemainingValues.Apply(std::forward<Function>(f),
4906 std::forward<Args>(args)...,
4930 template <
typename Function>
4936 template <
typename Function>
4943 template <
typename Function>
4950 template <
typename Function>
4964 #endif //viskores_Tuple_h