21 #ifndef viskores_internal_FunctionInterfaceDetailPre_h
22 #define viskores_internal_FunctionInterfaceDetailPre_h
24 #if !defined(viskores_internal_FunctionInterface_h) && !defined(VISKORES_TEST_HEADER_BUILD)
25 #error FunctionInterfaceDetailPre.h must be included from FunctionInterface.h
32 #include <type_traits>
34 #define VISKORES_MAX_FUNCTION_PARAMETERS 20
47 struct FunctionInterfaceReturnContainer
50 static constexpr
bool VALID =
true;
54 struct FunctionInterfaceReturnContainer<void>
57 static constexpr
bool VALID =
false;
68 template <
typename FunctionSignature>
69 struct ParameterContainer;
74 struct ParameterContainer<R()>
80 struct ParameterContainer<R(P1)>
88 struct ParameterContainer<R(P1, P2)>
98 struct ParameterContainer<R(P1, P2, P3)>
105 template <
typename R,
110 struct ParameterContainer<R(P1, P2, P3, P4)>
118 template <
typename R,
124 struct ParameterContainer<R(P1, P2, P3, P4, P5)>
133 template <
typename R,
140 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6)>
150 template <
typename R,
158 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7)>
169 template <
typename R,
178 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8)>
190 template <
typename R,
200 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9)>
213 template <
typename R,
224 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10)>
238 template <
typename R,
250 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11)>
265 template <
typename R,
278 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)>
294 template <
typename R,
308 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13)>
325 template <
typename R,
340 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)>
358 template <
typename R,
374 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15)>
393 template <
typename R,
410 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)>
430 template <
typename R,
448 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17)>
469 template <
typename R,
488 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)>
510 template <
typename R,
530 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19)>
553 template <
typename R,
574 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)>
602 struct FunctionSigInfo;
603 template <
typename R,
typename... ArgTypes>
604 struct FunctionSigInfo<R(ArgTypes...)>
606 static constexpr std::size_t Arity =
sizeof...(ArgTypes);
607 using ArityType = std::integral_constant<int, static_cast<int>(Arity)>;
609 using ResultType = R;
614 template <
int,
typename>
616 template <
int Index,
typename R,
typename... ArgTypes>
617 struct AtType<
Index, R(ArgTypes...)>
627 template <
typename FunctionSignature>
628 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
629 viskores::internal::IndexTag<1>)
630 -> decltype(parameters.Parameter1)
const&
632 return parameters.Parameter1;
635 template <
typename FunctionSignature>
636 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
637 viskores::internal::IndexTag<2>)
638 -> decltype(parameters.Parameter2)
const&
640 return parameters.Parameter2;
643 template <
typename FunctionSignature>
644 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
645 viskores::internal::IndexTag<3>)
646 -> decltype(parameters.Parameter3)
const&
648 return parameters.Parameter3;
651 template <
typename FunctionSignature>
652 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
653 viskores::internal::IndexTag<4>)
654 -> decltype(parameters.Parameter4)
const&
656 return parameters.Parameter4;
659 template <
typename FunctionSignature>
660 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
661 viskores::internal::IndexTag<5>)
662 -> decltype(parameters.Parameter5)
const&
664 return parameters.Parameter5;
667 template <
typename FunctionSignature>
668 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
669 viskores::internal::IndexTag<6>)
670 -> decltype(parameters.Parameter6)
const&
672 return parameters.Parameter6;
675 template <
typename FunctionSignature>
676 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
677 viskores::internal::IndexTag<7>)
678 -> decltype(parameters.Parameter7)
const&
680 return parameters.Parameter7;
683 template <
typename FunctionSignature>
684 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
685 viskores::internal::IndexTag<8>)
686 -> decltype(parameters.Parameter8)
const&
688 return parameters.Parameter8;
691 template <
typename FunctionSignature>
692 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
693 viskores::internal::IndexTag<9>)
694 -> decltype(parameters.Parameter9)
const&
696 return parameters.Parameter9;
699 template <
typename FunctionSignature>
700 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
701 viskores::internal::IndexTag<10>)
702 -> decltype(parameters.Parameter10)
const&
704 return parameters.Parameter10;
707 template <
typename FunctionSignature>
708 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
709 viskores::internal::IndexTag<11>)
710 -> decltype(parameters.Parameter11)
const&
712 return parameters.Parameter11;
715 template <
typename FunctionSignature>
716 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
717 viskores::internal::IndexTag<12>)
718 -> decltype(parameters.Parameter12)
const&
720 return parameters.Parameter12;
723 template <
typename FunctionSignature>
724 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
725 viskores::internal::IndexTag<13>)
726 -> decltype(parameters.Parameter13)
const&
728 return parameters.Parameter13;
731 template <
typename FunctionSignature>
732 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
733 viskores::internal::IndexTag<14>)
734 -> decltype(parameters.Parameter14)
const&
736 return parameters.Parameter14;
739 template <
typename FunctionSignature>
740 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
741 viskores::internal::IndexTag<15>)
742 -> decltype(parameters.Parameter15)
const&
744 return parameters.Parameter15;
747 template <
typename FunctionSignature>
748 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
749 viskores::internal::IndexTag<16>)
750 -> decltype(parameters.Parameter16)
const&
752 return parameters.Parameter16;
755 template <
typename FunctionSignature>
756 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
757 viskores::internal::IndexTag<17>)
758 -> decltype(parameters.Parameter17)
const&
760 return parameters.Parameter17;
763 template <
typename FunctionSignature>
764 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
765 viskores::internal::IndexTag<18>)
766 -> decltype(parameters.Parameter18)
const&
768 return parameters.Parameter18;
771 template <
typename FunctionSignature>
772 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
773 viskores::internal::IndexTag<19>)
774 -> decltype(parameters.Parameter19)
const&
776 return parameters.Parameter19;
779 template <
typename FunctionSignature>
780 VISKORES_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
781 viskores::internal::IndexTag<20>)
782 -> decltype(parameters.Parameter20)
const&
784 return parameters.Parameter20;
791 template <
typename OriginalSignature,
typename Transform>
792 struct FunctionInterfaceStaticTransformType;
797 template <
typename Result,
802 ParameterContainer<OriginalR()>& originalParameters)
805 (void)originalParameters;
809 template <
typename Result,
815 ParameterContainer<OriginalR(OriginalP1)>& originalParameters)
818 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>())
823 template <
typename Result,
830 ParameterContainer<OriginalR(OriginalP1, OriginalP2)>& originalParameters)
833 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
834 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>())
839 template <
typename Result,
847 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3)>& originalParameters)
850 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
851 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
852 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>())
857 template <
typename Result,
866 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4)>& originalParameters)
869 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
870 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
871 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
872 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>())
877 template <
typename Result,
887 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5)>& originalParameters)
890 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
891 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
892 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
893 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
894 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>())
899 template <
typename Result,
910 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6)>& originalParameters)
913 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
914 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
915 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
916 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
917 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
918 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>())
923 template <
typename Result,
935 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7)>& originalParameters)
938 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
939 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
940 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
941 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
942 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
943 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
944 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>())
949 template <
typename Result,
962 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8)>& originalParameters)
965 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
966 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
967 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
968 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
969 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
970 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
971 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
972 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>())
977 template <
typename Result,
991 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9)>& originalParameters)
994 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
995 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
996 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
997 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
998 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
999 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1000 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1001 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1002 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>())
1007 template <
typename Result,
1010 typename OriginalP1,
1011 typename OriginalP2,
1012 typename OriginalP3,
1013 typename OriginalP4,
1014 typename OriginalP5,
1015 typename OriginalP6,
1016 typename OriginalP7,
1017 typename OriginalP8,
1018 typename OriginalP9,
1019 typename OriginalP10>
1022 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10)>& originalParameters)
1025 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1026 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1027 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1028 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1029 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1030 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1031 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1032 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1033 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1034 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>())
1039 template <
typename Result,
1042 typename OriginalP1,
1043 typename OriginalP2,
1044 typename OriginalP3,
1045 typename OriginalP4,
1046 typename OriginalP5,
1047 typename OriginalP6,
1048 typename OriginalP7,
1049 typename OriginalP8,
1050 typename OriginalP9,
1051 typename OriginalP10,
1052 typename OriginalP11>
1055 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11)>& originalParameters)
1058 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1059 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1060 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1061 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1062 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1063 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1064 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1065 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1066 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1067 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1068 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>())
1073 template <
typename Result,
1076 typename OriginalP1,
1077 typename OriginalP2,
1078 typename OriginalP3,
1079 typename OriginalP4,
1080 typename OriginalP5,
1081 typename OriginalP6,
1082 typename OriginalP7,
1083 typename OriginalP8,
1084 typename OriginalP9,
1085 typename OriginalP10,
1086 typename OriginalP11,
1087 typename OriginalP12>
1090 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12)>& originalParameters)
1093 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1094 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1095 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1096 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1097 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1098 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1099 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1100 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1101 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1102 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1103 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1104 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>())
1109 template <
typename Result,
1112 typename OriginalP1,
1113 typename OriginalP2,
1114 typename OriginalP3,
1115 typename OriginalP4,
1116 typename OriginalP5,
1117 typename OriginalP6,
1118 typename OriginalP7,
1119 typename OriginalP8,
1120 typename OriginalP9,
1121 typename OriginalP10,
1122 typename OriginalP11,
1123 typename OriginalP12,
1124 typename OriginalP13>
1127 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13)>& originalParameters)
1130 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1131 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1132 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1133 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1134 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1135 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1136 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1137 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1138 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1139 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1140 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1141 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1142 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>())
1147 template <
typename Result,
1150 typename OriginalP1,
1151 typename OriginalP2,
1152 typename OriginalP3,
1153 typename OriginalP4,
1154 typename OriginalP5,
1155 typename OriginalP6,
1156 typename OriginalP7,
1157 typename OriginalP8,
1158 typename OriginalP9,
1159 typename OriginalP10,
1160 typename OriginalP11,
1161 typename OriginalP12,
1162 typename OriginalP13,
1163 typename OriginalP14>
1166 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14)>& originalParameters)
1169 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1170 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1171 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1172 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1173 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1174 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1175 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1176 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1177 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1178 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1179 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1180 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1181 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>()),
1182 transform(originalParameters.Parameter14, viskores::internal::IndexTag<14>())
1187 template <
typename Result,
1190 typename OriginalP1,
1191 typename OriginalP2,
1192 typename OriginalP3,
1193 typename OriginalP4,
1194 typename OriginalP5,
1195 typename OriginalP6,
1196 typename OriginalP7,
1197 typename OriginalP8,
1198 typename OriginalP9,
1199 typename OriginalP10,
1200 typename OriginalP11,
1201 typename OriginalP12,
1202 typename OriginalP13,
1203 typename OriginalP14,
1204 typename OriginalP15>
1207 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15)>& originalParameters)
1210 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1211 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1212 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1213 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1214 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1215 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1216 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1217 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1218 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1219 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1220 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1221 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1222 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>()),
1223 transform(originalParameters.Parameter14, viskores::internal::IndexTag<14>()),
1224 transform(originalParameters.Parameter15, viskores::internal::IndexTag<15>())
1229 template <
typename Result,
1232 typename OriginalP1,
1233 typename OriginalP2,
1234 typename OriginalP3,
1235 typename OriginalP4,
1236 typename OriginalP5,
1237 typename OriginalP6,
1238 typename OriginalP7,
1239 typename OriginalP8,
1240 typename OriginalP9,
1241 typename OriginalP10,
1242 typename OriginalP11,
1243 typename OriginalP12,
1244 typename OriginalP13,
1245 typename OriginalP14,
1246 typename OriginalP15,
1247 typename OriginalP16>
1250 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16)>& originalParameters)
1253 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1254 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1255 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1256 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1257 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1258 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1259 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1260 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1261 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1262 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1263 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1264 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1265 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>()),
1266 transform(originalParameters.Parameter14, viskores::internal::IndexTag<14>()),
1267 transform(originalParameters.Parameter15, viskores::internal::IndexTag<15>()),
1268 transform(originalParameters.Parameter16, viskores::internal::IndexTag<16>())
1273 template <
typename Result,
1276 typename OriginalP1,
1277 typename OriginalP2,
1278 typename OriginalP3,
1279 typename OriginalP4,
1280 typename OriginalP5,
1281 typename OriginalP6,
1282 typename OriginalP7,
1283 typename OriginalP8,
1284 typename OriginalP9,
1285 typename OriginalP10,
1286 typename OriginalP11,
1287 typename OriginalP12,
1288 typename OriginalP13,
1289 typename OriginalP14,
1290 typename OriginalP15,
1291 typename OriginalP16,
1292 typename OriginalP17>
1295 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17)>& originalParameters)
1298 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1299 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1300 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1301 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1302 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1303 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1304 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1305 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1306 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1307 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1308 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1309 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1310 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>()),
1311 transform(originalParameters.Parameter14, viskores::internal::IndexTag<14>()),
1312 transform(originalParameters.Parameter15, viskores::internal::IndexTag<15>()),
1313 transform(originalParameters.Parameter16, viskores::internal::IndexTag<16>()),
1314 transform(originalParameters.Parameter17, viskores::internal::IndexTag<17>())
1319 template <
typename Result,
1322 typename OriginalP1,
1323 typename OriginalP2,
1324 typename OriginalP3,
1325 typename OriginalP4,
1326 typename OriginalP5,
1327 typename OriginalP6,
1328 typename OriginalP7,
1329 typename OriginalP8,
1330 typename OriginalP9,
1331 typename OriginalP10,
1332 typename OriginalP11,
1333 typename OriginalP12,
1334 typename OriginalP13,
1335 typename OriginalP14,
1336 typename OriginalP15,
1337 typename OriginalP16,
1338 typename OriginalP17,
1339 typename OriginalP18>
1342 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17, OriginalP18)>& originalParameters)
1345 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1346 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1347 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1348 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1349 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1350 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1351 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1352 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1353 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1354 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1355 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1356 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1357 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>()),
1358 transform(originalParameters.Parameter14, viskores::internal::IndexTag<14>()),
1359 transform(originalParameters.Parameter15, viskores::internal::IndexTag<15>()),
1360 transform(originalParameters.Parameter16, viskores::internal::IndexTag<16>()),
1361 transform(originalParameters.Parameter17, viskores::internal::IndexTag<17>()),
1362 transform(originalParameters.Parameter18, viskores::internal::IndexTag<18>())
1367 template <
typename Result,
1370 typename OriginalP1,
1371 typename OriginalP2,
1372 typename OriginalP3,
1373 typename OriginalP4,
1374 typename OriginalP5,
1375 typename OriginalP6,
1376 typename OriginalP7,
1377 typename OriginalP8,
1378 typename OriginalP9,
1379 typename OriginalP10,
1380 typename OriginalP11,
1381 typename OriginalP12,
1382 typename OriginalP13,
1383 typename OriginalP14,
1384 typename OriginalP15,
1385 typename OriginalP16,
1386 typename OriginalP17,
1387 typename OriginalP18,
1388 typename OriginalP19>
1391 ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17, OriginalP18, OriginalP19)>& originalParameters)
1394 transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
1395 transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
1396 transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>()),
1397 transform(originalParameters.Parameter4, viskores::internal::IndexTag<4>()),
1398 transform(originalParameters.Parameter5, viskores::internal::IndexTag<5>()),
1399 transform(originalParameters.Parameter6, viskores::internal::IndexTag<6>()),
1400 transform(originalParameters.Parameter7, viskores::internal::IndexTag<7>()),
1401 transform(originalParameters.Parameter8, viskores::internal::IndexTag<8>()),
1402 transform(originalParameters.Parameter9, viskores::internal::IndexTag<9>()),
1403 transform(originalParameters.Parameter10, viskores::internal::IndexTag<10>()),
1404 transform(originalParameters.Parameter11, viskores::internal::IndexTag<11>()),
1405 transform(originalParameters.Parameter12, viskores::internal::IndexTag<12>()),
1406 transform(originalParameters.Parameter13, viskores::internal::IndexTag<13>()),
1407 transform(originalParameters.Parameter14, viskores::internal::IndexTag<14>()),
1408 transform(originalParameters.Parameter15, viskores::internal::IndexTag<15>()),
1409 transform(originalParameters.Parameter16, viskores::internal::IndexTag<16>()),
1410 transform(originalParameters.Parameter17, viskores::internal::IndexTag<17>()),
1411 transform(originalParameters.Parameter18, viskores::internal::IndexTag<18>()),
1412 transform(originalParameters.Parameter19, viskores::internal::IndexTag<19>())
1422 #endif //viskores_internal_FunctionInterfaceDetailPre_h