13 #ifndef vtk_m_internal_FunctionInterfaceDetailPre_h 
   14 #define vtk_m_internal_FunctionInterfaceDetailPre_h 
   16 #if !defined(vtk_m_internal_FunctionInterface_h) && !defined(VTKM_TEST_HEADER_BUILD) 
   17 #error FunctionInterfaceDetailPre.h must be included from FunctionInterface.h 
   24 #include <type_traits> 
   26 #define VTKM_MAX_FUNCTION_PARAMETERS 20 
   39 struct FunctionInterfaceReturnContainer
 
   42   static constexpr 
bool VALID = 
true;
 
   46 struct FunctionInterfaceReturnContainer<void>
 
   49   static constexpr 
bool VALID = 
false;
 
   60 template <
typename FunctionSignature>
 
   61 struct ParameterContainer;
 
   66 struct ParameterContainer<R()>
 
   72 struct ParameterContainer<R(P1)>
 
   80 struct ParameterContainer<R(P1, P2)>
 
   90 struct ParameterContainer<R(P1, P2, P3)>
 
  102 struct ParameterContainer<R(P1, P2, P3, P4)>
 
  110 template <
typename R,
 
  116 struct ParameterContainer<R(P1, P2, P3, P4, P5)>
 
  125 template <
typename R,
 
  132 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6)>
 
  142 template <
typename R,
 
  150 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7)>
 
  161 template <
typename R,
 
  170 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8)>
 
  182 template <
typename R,
 
  192 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9)>
 
  205 template <
typename R,
 
  216 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10)>
 
  230 template <
typename R,
 
  242 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11)>
 
  257 template <
typename R,
 
  270 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)>
 
  286 template <
typename R,
 
  300 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13)>
 
  317 template <
typename R,
 
  332 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)>
 
  350 template <
typename R,
 
  366 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15)>
 
  385 template <
typename R,
 
  402 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)>
 
  422 template <
typename R,
 
  440 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17)>
 
  461 template <
typename R,
 
  480 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)>
 
  502 template <
typename R,
 
  522 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19)>
 
  545 template <
typename R,
 
  566 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)>
 
  594 struct FunctionSigInfo;
 
  595 template <
typename R, 
typename... ArgTypes>
 
  596 struct FunctionSigInfo<R(ArgTypes...)>
 
  598   static constexpr std::size_t Arity = 
sizeof...(ArgTypes);
 
  599   using ArityType = std::integral_constant<int, static_cast<int>(Arity)>;
 
  601   using ResultType = R;
 
  602   using Components = 
vtkm::List<R, ArgTypes...>;
 
  606 template <
int, 
typename>
 
  608 template <
int Index, 
typename R, 
typename... ArgTypes>
 
  609 struct AtType<
Index, R(ArgTypes...)>
 
  619 template <
typename FunctionSignature>
 
  620 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  621                                  vtkm::internal::IndexTag<1>)
 
  622   -> decltype(parameters.Parameter1) 
const&
 
  624   return parameters.Parameter1;
 
  627 template <
typename FunctionSignature>
 
  628 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  629                                  vtkm::internal::IndexTag<2>)
 
  630   -> decltype(parameters.Parameter2) 
const&
 
  632   return parameters.Parameter2;
 
  635 template <
typename FunctionSignature>
 
  636 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  637                                  vtkm::internal::IndexTag<3>)
 
  638   -> decltype(parameters.Parameter3) 
const&
 
  640   return parameters.Parameter3;
 
  643 template <
typename FunctionSignature>
 
  644 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  645                                  vtkm::internal::IndexTag<4>)
 
  646   -> decltype(parameters.Parameter4) 
const&
 
  648   return parameters.Parameter4;
 
  651 template <
typename FunctionSignature>
 
  652 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  653                                  vtkm::internal::IndexTag<5>)
 
  654   -> decltype(parameters.Parameter5) 
const&
 
  656   return parameters.Parameter5;
 
  659 template <
typename FunctionSignature>
 
  660 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  661                                  vtkm::internal::IndexTag<6>)
 
  662   -> decltype(parameters.Parameter6) 
const&
 
  664   return parameters.Parameter6;
 
  667 template <
typename FunctionSignature>
 
  668 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  669                                  vtkm::internal::IndexTag<7>)
 
  670   -> decltype(parameters.Parameter7) 
const&
 
  672   return parameters.Parameter7;
 
  675 template <
typename FunctionSignature>
 
  676 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  677                                  vtkm::internal::IndexTag<8>)
 
  678   -> decltype(parameters.Parameter8) 
const&
 
  680   return parameters.Parameter8;
 
  683 template <
typename FunctionSignature>
 
  684 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  685                                  vtkm::internal::IndexTag<9>)
 
  686   -> decltype(parameters.Parameter9) 
const&
 
  688   return parameters.Parameter9;
 
  691 template <
typename FunctionSignature>
 
  692 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  693                                  vtkm::internal::IndexTag<10>)
 
  694   -> decltype(parameters.Parameter10) 
const&
 
  696   return parameters.Parameter10;
 
  699 template <
typename FunctionSignature>
 
  700 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  701                                  vtkm::internal::IndexTag<11>)
 
  702   -> decltype(parameters.Parameter11) 
const&
 
  704   return parameters.Parameter11;
 
  707 template <
typename FunctionSignature>
 
  708 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  709                                  vtkm::internal::IndexTag<12>)
 
  710   -> decltype(parameters.Parameter12) 
const&
 
  712   return parameters.Parameter12;
 
  715 template <
typename FunctionSignature>
 
  716 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  717                                  vtkm::internal::IndexTag<13>)
 
  718   -> decltype(parameters.Parameter13) 
const&
 
  720   return parameters.Parameter13;
 
  723 template <
typename FunctionSignature>
 
  724 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  725                                  vtkm::internal::IndexTag<14>)
 
  726   -> decltype(parameters.Parameter14) 
const&
 
  728   return parameters.Parameter14;
 
  731 template <
typename FunctionSignature>
 
  732 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  733                                  vtkm::internal::IndexTag<15>)
 
  734   -> decltype(parameters.Parameter15) 
const&
 
  736   return parameters.Parameter15;
 
  739 template <
typename FunctionSignature>
 
  740 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  741                                  vtkm::internal::IndexTag<16>)
 
  742   -> decltype(parameters.Parameter16) 
const&
 
  744   return parameters.Parameter16;
 
  747 template <
typename FunctionSignature>
 
  748 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  749                                  vtkm::internal::IndexTag<17>)
 
  750   -> decltype(parameters.Parameter17) 
const&
 
  752   return parameters.Parameter17;
 
  755 template <
typename FunctionSignature>
 
  756 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  757                                  vtkm::internal::IndexTag<18>)
 
  758   -> decltype(parameters.Parameter18) 
const&
 
  760   return parameters.Parameter18;
 
  763 template <
typename FunctionSignature>
 
  764 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  765                                  vtkm::internal::IndexTag<19>)
 
  766   -> decltype(parameters.Parameter19) 
const&
 
  768   return parameters.Parameter19;
 
  771 template <
typename FunctionSignature>
 
  772 VTKM_EXEC_CONT auto ParameterGet(
const ParameterContainer<FunctionSignature>& parameters,
 
  773                                  vtkm::internal::IndexTag<20>)
 
  774   -> decltype(parameters.Parameter20) 
const&
 
  776   return parameters.Parameter20;
 
  783 template <
typename OriginalSignature, 
typename Transform>
 
  784 struct FunctionInterfaceStaticTransformType;
 
  789 template <
typename Result,
 
  793   const Transform& transform,
 
  794   ParameterContainer<OriginalR()>& originalParameters)
 
  797   (void)originalParameters;
 
  801 template <
typename Result,
 
  806   const Transform& transform,
 
  807   ParameterContainer<OriginalR(OriginalP1)>& originalParameters)
 
  810     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>())
 
  815 template <
typename Result,
 
  821   const Transform& transform,
 
  822   ParameterContainer<OriginalR(OriginalP1, OriginalP2)>& originalParameters)
 
  825     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  826     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>())
 
  831 template <
typename Result,
 
  838   const Transform& transform,
 
  839   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3)>& originalParameters)
 
  842     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  843     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  844     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>())
 
  849 template <
typename Result,
 
  857   const Transform& transform,
 
  858   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4)>& originalParameters)
 
  861     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  862     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  863     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
  864     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>())
 
  869 template <
typename Result,
 
  878   const Transform& transform,
 
  879   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5)>& originalParameters)
 
  882     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  883     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  884     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
  885     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
  886     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>())
 
  891 template <
typename Result,
 
  901   const Transform& transform,
 
  902   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6)>& originalParameters)
 
  905     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  906     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  907     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
  908     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
  909     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
  910     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>())
 
  915 template <
typename Result,
 
  926   const Transform& transform,
 
  927   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7)>& originalParameters)
 
  930     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  931     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  932     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
  933     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
  934     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
  935     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
  936     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>())
 
  941 template <
typename Result,
 
  953   const Transform& transform,
 
  954   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8)>& originalParameters)
 
  957     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  958     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  959     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
  960     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
  961     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
  962     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
  963     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
  964     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>())
 
  969 template <
typename Result,
 
  982   const Transform& transform,
 
  983   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9)>& originalParameters)
 
  986     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
  987     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
  988     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
  989     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
  990     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
  991     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
  992     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
  993     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
  994     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>())
 
  999 template <
typename Result,
 
 1002           typename OriginalP1,
 
 1003           typename OriginalP2,
 
 1004           typename OriginalP3,
 
 1005           typename OriginalP4,
 
 1006           typename OriginalP5,
 
 1007           typename OriginalP6,
 
 1008           typename OriginalP7,
 
 1009           typename OriginalP8,
 
 1010           typename OriginalP9,
 
 1011           typename OriginalP10>
 
 1013   const Transform& transform,
 
 1014   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10)>& originalParameters)
 
 1017     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1018     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1019     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1020     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1021     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1022     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1023     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1024     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1025     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1026     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>())
 
 1031 template <
typename Result,
 
 1034           typename OriginalP1,
 
 1035           typename OriginalP2,
 
 1036           typename OriginalP3,
 
 1037           typename OriginalP4,
 
 1038           typename OriginalP5,
 
 1039           typename OriginalP6,
 
 1040           typename OriginalP7,
 
 1041           typename OriginalP8,
 
 1042           typename OriginalP9,
 
 1043           typename OriginalP10,
 
 1044           typename OriginalP11>
 
 1046   const Transform& transform,
 
 1047   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11)>& originalParameters)
 
 1050     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1051     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1052     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1053     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1054     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1055     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1056     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1057     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1058     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1059     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1060     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>())
 
 1065 template <
typename Result,
 
 1068           typename OriginalP1,
 
 1069           typename OriginalP2,
 
 1070           typename OriginalP3,
 
 1071           typename OriginalP4,
 
 1072           typename OriginalP5,
 
 1073           typename OriginalP6,
 
 1074           typename OriginalP7,
 
 1075           typename OriginalP8,
 
 1076           typename OriginalP9,
 
 1077           typename OriginalP10,
 
 1078           typename OriginalP11,
 
 1079           typename OriginalP12>
 
 1081   const Transform& transform,
 
 1082   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12)>& originalParameters)
 
 1085     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1086     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1087     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1088     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1089     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1090     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1091     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1092     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1093     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1094     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1095     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1096     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>())
 
 1101 template <
typename Result,
 
 1104           typename OriginalP1,
 
 1105           typename OriginalP2,
 
 1106           typename OriginalP3,
 
 1107           typename OriginalP4,
 
 1108           typename OriginalP5,
 
 1109           typename OriginalP6,
 
 1110           typename OriginalP7,
 
 1111           typename OriginalP8,
 
 1112           typename OriginalP9,
 
 1113           typename OriginalP10,
 
 1114           typename OriginalP11,
 
 1115           typename OriginalP12,
 
 1116           typename OriginalP13>
 
 1118   const Transform& transform,
 
 1119   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13)>& originalParameters)
 
 1122     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1123     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1124     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1125     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1126     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1127     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1128     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1129     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1130     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1131     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1132     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1133     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1134     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>())
 
 1139 template <
typename Result,
 
 1142           typename OriginalP1,
 
 1143           typename OriginalP2,
 
 1144           typename OriginalP3,
 
 1145           typename OriginalP4,
 
 1146           typename OriginalP5,
 
 1147           typename OriginalP6,
 
 1148           typename OriginalP7,
 
 1149           typename OriginalP8,
 
 1150           typename OriginalP9,
 
 1151           typename OriginalP10,
 
 1152           typename OriginalP11,
 
 1153           typename OriginalP12,
 
 1154           typename OriginalP13,
 
 1155           typename OriginalP14>
 
 1157   const Transform& transform,
 
 1158   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14)>& originalParameters)
 
 1161     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1162     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1163     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1164     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1165     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1166     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1167     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1168     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1169     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1170     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1171     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1172     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1173     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>()),
 
 1174     transform(originalParameters.Parameter14, vtkm::internal::IndexTag<14>())
 
 1179 template <
typename Result,
 
 1182           typename OriginalP1,
 
 1183           typename OriginalP2,
 
 1184           typename OriginalP3,
 
 1185           typename OriginalP4,
 
 1186           typename OriginalP5,
 
 1187           typename OriginalP6,
 
 1188           typename OriginalP7,
 
 1189           typename OriginalP8,
 
 1190           typename OriginalP9,
 
 1191           typename OriginalP10,
 
 1192           typename OriginalP11,
 
 1193           typename OriginalP12,
 
 1194           typename OriginalP13,
 
 1195           typename OriginalP14,
 
 1196           typename OriginalP15>
 
 1198   const Transform& transform,
 
 1199   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15)>& originalParameters)
 
 1202     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1203     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1204     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1205     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1206     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1207     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1208     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1209     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1210     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1211     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1212     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1213     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1214     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>()),
 
 1215     transform(originalParameters.Parameter14, vtkm::internal::IndexTag<14>()),
 
 1216     transform(originalParameters.Parameter15, vtkm::internal::IndexTag<15>())
 
 1221 template <
typename Result,
 
 1224           typename OriginalP1,
 
 1225           typename OriginalP2,
 
 1226           typename OriginalP3,
 
 1227           typename OriginalP4,
 
 1228           typename OriginalP5,
 
 1229           typename OriginalP6,
 
 1230           typename OriginalP7,
 
 1231           typename OriginalP8,
 
 1232           typename OriginalP9,
 
 1233           typename OriginalP10,
 
 1234           typename OriginalP11,
 
 1235           typename OriginalP12,
 
 1236           typename OriginalP13,
 
 1237           typename OriginalP14,
 
 1238           typename OriginalP15,
 
 1239           typename OriginalP16>
 
 1241   const Transform& transform,
 
 1242   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16)>& originalParameters)
 
 1245     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1246     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1247     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1248     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1249     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1250     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1251     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1252     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1253     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1254     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1255     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1256     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1257     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>()),
 
 1258     transform(originalParameters.Parameter14, vtkm::internal::IndexTag<14>()),
 
 1259     transform(originalParameters.Parameter15, vtkm::internal::IndexTag<15>()),
 
 1260     transform(originalParameters.Parameter16, vtkm::internal::IndexTag<16>())
 
 1265 template <
typename Result,
 
 1268           typename OriginalP1,
 
 1269           typename OriginalP2,
 
 1270           typename OriginalP3,
 
 1271           typename OriginalP4,
 
 1272           typename OriginalP5,
 
 1273           typename OriginalP6,
 
 1274           typename OriginalP7,
 
 1275           typename OriginalP8,
 
 1276           typename OriginalP9,
 
 1277           typename OriginalP10,
 
 1278           typename OriginalP11,
 
 1279           typename OriginalP12,
 
 1280           typename OriginalP13,
 
 1281           typename OriginalP14,
 
 1282           typename OriginalP15,
 
 1283           typename OriginalP16,
 
 1284           typename OriginalP17>
 
 1286   const Transform& transform,
 
 1287   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17)>& originalParameters)
 
 1290     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1291     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1292     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1293     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1294     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1295     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1296     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1297     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1298     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1299     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1300     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1301     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1302     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>()),
 
 1303     transform(originalParameters.Parameter14, vtkm::internal::IndexTag<14>()),
 
 1304     transform(originalParameters.Parameter15, vtkm::internal::IndexTag<15>()),
 
 1305     transform(originalParameters.Parameter16, vtkm::internal::IndexTag<16>()),
 
 1306     transform(originalParameters.Parameter17, vtkm::internal::IndexTag<17>())
 
 1311 template <
typename Result,
 
 1314           typename OriginalP1,
 
 1315           typename OriginalP2,
 
 1316           typename OriginalP3,
 
 1317           typename OriginalP4,
 
 1318           typename OriginalP5,
 
 1319           typename OriginalP6,
 
 1320           typename OriginalP7,
 
 1321           typename OriginalP8,
 
 1322           typename OriginalP9,
 
 1323           typename OriginalP10,
 
 1324           typename OriginalP11,
 
 1325           typename OriginalP12,
 
 1326           typename OriginalP13,
 
 1327           typename OriginalP14,
 
 1328           typename OriginalP15,
 
 1329           typename OriginalP16,
 
 1330           typename OriginalP17,
 
 1331           typename OriginalP18>
 
 1333   const Transform& transform,
 
 1334   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17, OriginalP18)>& originalParameters)
 
 1337     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1338     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1339     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1340     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1341     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1342     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1343     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1344     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1345     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1346     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1347     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1348     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1349     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>()),
 
 1350     transform(originalParameters.Parameter14, vtkm::internal::IndexTag<14>()),
 
 1351     transform(originalParameters.Parameter15, vtkm::internal::IndexTag<15>()),
 
 1352     transform(originalParameters.Parameter16, vtkm::internal::IndexTag<16>()),
 
 1353     transform(originalParameters.Parameter17, vtkm::internal::IndexTag<17>()),
 
 1354     transform(originalParameters.Parameter18, vtkm::internal::IndexTag<18>())
 
 1359 template <
typename Result,
 
 1362           typename OriginalP1,
 
 1363           typename OriginalP2,
 
 1364           typename OriginalP3,
 
 1365           typename OriginalP4,
 
 1366           typename OriginalP5,
 
 1367           typename OriginalP6,
 
 1368           typename OriginalP7,
 
 1369           typename OriginalP8,
 
 1370           typename OriginalP9,
 
 1371           typename OriginalP10,
 
 1372           typename OriginalP11,
 
 1373           typename OriginalP12,
 
 1374           typename OriginalP13,
 
 1375           typename OriginalP14,
 
 1376           typename OriginalP15,
 
 1377           typename OriginalP16,
 
 1378           typename OriginalP17,
 
 1379           typename OriginalP18,
 
 1380           typename OriginalP19>
 
 1382   const Transform& transform,
 
 1383   ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17, OriginalP18, OriginalP19)>& originalParameters)
 
 1386     transform(originalParameters.Parameter1, vtkm::internal::IndexTag<1>()),
 
 1387     transform(originalParameters.Parameter2, vtkm::internal::IndexTag<2>()),
 
 1388     transform(originalParameters.Parameter3, vtkm::internal::IndexTag<3>()),
 
 1389     transform(originalParameters.Parameter4, vtkm::internal::IndexTag<4>()),
 
 1390     transform(originalParameters.Parameter5, vtkm::internal::IndexTag<5>()),
 
 1391     transform(originalParameters.Parameter6, vtkm::internal::IndexTag<6>()),
 
 1392     transform(originalParameters.Parameter7, vtkm::internal::IndexTag<7>()),
 
 1393     transform(originalParameters.Parameter8, vtkm::internal::IndexTag<8>()),
 
 1394     transform(originalParameters.Parameter9, vtkm::internal::IndexTag<9>()),
 
 1395     transform(originalParameters.Parameter10, vtkm::internal::IndexTag<10>()),
 
 1396     transform(originalParameters.Parameter11, vtkm::internal::IndexTag<11>()),
 
 1397     transform(originalParameters.Parameter12, vtkm::internal::IndexTag<12>()),
 
 1398     transform(originalParameters.Parameter13, vtkm::internal::IndexTag<13>()),
 
 1399     transform(originalParameters.Parameter14, vtkm::internal::IndexTag<14>()),
 
 1400     transform(originalParameters.Parameter15, vtkm::internal::IndexTag<15>()),
 
 1401     transform(originalParameters.Parameter16, vtkm::internal::IndexTag<16>()),
 
 1402     transform(originalParameters.Parameter17, vtkm::internal::IndexTag<17>()),
 
 1403     transform(originalParameters.Parameter18, vtkm::internal::IndexTag<18>()),
 
 1404     transform(originalParameters.Parameter19, vtkm::internal::IndexTag<19>())
 
 1414 #endif //vtk_m_internal_FunctionInterfaceDetailPre_h