Viskores  1.0
FunctionInterfaceDetailPre.h
Go to the documentation of this file.
1 //============================================================================
2 // The contents of this file are covered by the Viskores license. See
3 // LICENSE.txt for details.
4 //
5 // By contributing to this file, all contributors agree to the Developer
6 // Certificate of Origin Version 1.1 (DCO 1.1) as stated in DCO.txt.
7 //============================================================================
8 
9 //============================================================================
10 // Copyright (c) Kitware, Inc.
11 // All rights reserved.
12 // See LICENSE.txt for details.
13 //
14 // This software is distributed WITHOUT ANY WARRANTY; without even
15 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 // PURPOSE. See the above copyright notice for more information.
17 //============================================================================
18 // **** DO NOT EDIT THIS FILE!!! ****
19 // This file is automatically generated by FunctionInterfaceDetailPre.h.in
20 
21 #ifndef viskores_internal_FunctionInterfaceDetailPre_h
22 #define viskores_internal_FunctionInterfaceDetailPre_h
23 
24 #if !defined(viskores_internal_FunctionInterface_h) && !defined(VISKORES_TEST_HEADER_BUILD)
25 #error FunctionInterfaceDetailPre.h must be included from FunctionInterface.h
26 #endif
27 
28 #include <viskores/List.h>
29 #include <viskores/Types.h>
31 
32 #include <type_traits>
33 
34 #define VISKORES_MAX_FUNCTION_PARAMETERS 20
35 
36 
37 namespace viskores
38 {
39 namespace internal
40 {
41 
46 template <typename T>
47 struct FunctionInterfaceReturnContainer
48 {
49  T Value;
50  static constexpr bool VALID = true;
51 };
52 
53 template <>
54 struct FunctionInterfaceReturnContainer<void>
55 {
56  // Nothing to store for void return.
57  static constexpr bool VALID = false;
58 };
59 
60 namespace detail
61 {
62 
63 //============================================================================
64 
65 // This templated class contains the state of parameters. If you get a compiler
66 // error stating that this class is not specialized, that probably means that
67 // you are using FunctionInterface with an unsupported number of arguments.
68 template <typename FunctionSignature>
69 struct ParameterContainer;
70 
71 // clang-format off
72 
73 template <typename R>
74 struct ParameterContainer<R()>
75 {
76 };
77 
78 template <typename R,
79  typename P1>
80 struct ParameterContainer<R(P1)>
81 {
82  P1 Parameter1;
83 };
84 
85 template <typename R,
86  typename P1,
87  typename P2>
88 struct ParameterContainer<R(P1, P2)>
89 {
90  P1 Parameter1;
91  P2 Parameter2;
92 };
93 
94 template <typename R,
95  typename P1,
96  typename P2,
97  typename P3>
98 struct ParameterContainer<R(P1, P2, P3)>
99 {
100  P1 Parameter1;
101  P2 Parameter2;
102  P3 Parameter3;
103 };
104 
105 template <typename R,
106  typename P1,
107  typename P2,
108  typename P3,
109  typename P4>
110 struct ParameterContainer<R(P1, P2, P3, P4)>
111 {
112  P1 Parameter1;
113  P2 Parameter2;
114  P3 Parameter3;
115  P4 Parameter4;
116 };
117 
118 template <typename R,
119  typename P1,
120  typename P2,
121  typename P3,
122  typename P4,
123  typename P5>
124 struct ParameterContainer<R(P1, P2, P3, P4, P5)>
125 {
126  P1 Parameter1;
127  P2 Parameter2;
128  P3 Parameter3;
129  P4 Parameter4;
130  P5 Parameter5;
131 };
132 
133 template <typename R,
134  typename P1,
135  typename P2,
136  typename P3,
137  typename P4,
138  typename P5,
139  typename P6>
140 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6)>
141 {
142  P1 Parameter1;
143  P2 Parameter2;
144  P3 Parameter3;
145  P4 Parameter4;
146  P5 Parameter5;
147  P6 Parameter6;
148 };
149 
150 template <typename R,
151  typename P1,
152  typename P2,
153  typename P3,
154  typename P4,
155  typename P5,
156  typename P6,
157  typename P7>
158 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7)>
159 {
160  P1 Parameter1;
161  P2 Parameter2;
162  P3 Parameter3;
163  P4 Parameter4;
164  P5 Parameter5;
165  P6 Parameter6;
166  P7 Parameter7;
167 };
168 
169 template <typename R,
170  typename P1,
171  typename P2,
172  typename P3,
173  typename P4,
174  typename P5,
175  typename P6,
176  typename P7,
177  typename P8>
178 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8)>
179 {
180  P1 Parameter1;
181  P2 Parameter2;
182  P3 Parameter3;
183  P4 Parameter4;
184  P5 Parameter5;
185  P6 Parameter6;
186  P7 Parameter7;
187  P8 Parameter8;
188 };
189 
190 template <typename R,
191  typename P1,
192  typename P2,
193  typename P3,
194  typename P4,
195  typename P5,
196  typename P6,
197  typename P7,
198  typename P8,
199  typename P9>
200 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9)>
201 {
202  P1 Parameter1;
203  P2 Parameter2;
204  P3 Parameter3;
205  P4 Parameter4;
206  P5 Parameter5;
207  P6 Parameter6;
208  P7 Parameter7;
209  P8 Parameter8;
210  P9 Parameter9;
211 };
212 
213 template <typename R,
214  typename P1,
215  typename P2,
216  typename P3,
217  typename P4,
218  typename P5,
219  typename P6,
220  typename P7,
221  typename P8,
222  typename P9,
223  typename P10>
224 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10)>
225 {
226  P1 Parameter1;
227  P2 Parameter2;
228  P3 Parameter3;
229  P4 Parameter4;
230  P5 Parameter5;
231  P6 Parameter6;
232  P7 Parameter7;
233  P8 Parameter8;
234  P9 Parameter9;
235  P10 Parameter10;
236 };
237 
238 template <typename R,
239  typename P1,
240  typename P2,
241  typename P3,
242  typename P4,
243  typename P5,
244  typename P6,
245  typename P7,
246  typename P8,
247  typename P9,
248  typename P10,
249  typename P11>
250 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11)>
251 {
252  P1 Parameter1;
253  P2 Parameter2;
254  P3 Parameter3;
255  P4 Parameter4;
256  P5 Parameter5;
257  P6 Parameter6;
258  P7 Parameter7;
259  P8 Parameter8;
260  P9 Parameter9;
261  P10 Parameter10;
262  P11 Parameter11;
263 };
264 
265 template <typename R,
266  typename P1,
267  typename P2,
268  typename P3,
269  typename P4,
270  typename P5,
271  typename P6,
272  typename P7,
273  typename P8,
274  typename P9,
275  typename P10,
276  typename P11,
277  typename P12>
278 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)>
279 {
280  P1 Parameter1;
281  P2 Parameter2;
282  P3 Parameter3;
283  P4 Parameter4;
284  P5 Parameter5;
285  P6 Parameter6;
286  P7 Parameter7;
287  P8 Parameter8;
288  P9 Parameter9;
289  P10 Parameter10;
290  P11 Parameter11;
291  P12 Parameter12;
292 };
293 
294 template <typename R,
295  typename P1,
296  typename P2,
297  typename P3,
298  typename P4,
299  typename P5,
300  typename P6,
301  typename P7,
302  typename P8,
303  typename P9,
304  typename P10,
305  typename P11,
306  typename P12,
307  typename P13>
308 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13)>
309 {
310  P1 Parameter1;
311  P2 Parameter2;
312  P3 Parameter3;
313  P4 Parameter4;
314  P5 Parameter5;
315  P6 Parameter6;
316  P7 Parameter7;
317  P8 Parameter8;
318  P9 Parameter9;
319  P10 Parameter10;
320  P11 Parameter11;
321  P12 Parameter12;
322  P13 Parameter13;
323 };
324 
325 template <typename R,
326  typename P1,
327  typename P2,
328  typename P3,
329  typename P4,
330  typename P5,
331  typename P6,
332  typename P7,
333  typename P8,
334  typename P9,
335  typename P10,
336  typename P11,
337  typename P12,
338  typename P13,
339  typename P14>
340 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)>
341 {
342  P1 Parameter1;
343  P2 Parameter2;
344  P3 Parameter3;
345  P4 Parameter4;
346  P5 Parameter5;
347  P6 Parameter6;
348  P7 Parameter7;
349  P8 Parameter8;
350  P9 Parameter9;
351  P10 Parameter10;
352  P11 Parameter11;
353  P12 Parameter12;
354  P13 Parameter13;
355  P14 Parameter14;
356 };
357 
358 template <typename R,
359  typename P1,
360  typename P2,
361  typename P3,
362  typename P4,
363  typename P5,
364  typename P6,
365  typename P7,
366  typename P8,
367  typename P9,
368  typename P10,
369  typename P11,
370  typename P12,
371  typename P13,
372  typename P14,
373  typename P15>
374 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15)>
375 {
376  P1 Parameter1;
377  P2 Parameter2;
378  P3 Parameter3;
379  P4 Parameter4;
380  P5 Parameter5;
381  P6 Parameter6;
382  P7 Parameter7;
383  P8 Parameter8;
384  P9 Parameter9;
385  P10 Parameter10;
386  P11 Parameter11;
387  P12 Parameter12;
388  P13 Parameter13;
389  P14 Parameter14;
390  P15 Parameter15;
391 };
392 
393 template <typename R,
394  typename P1,
395  typename P2,
396  typename P3,
397  typename P4,
398  typename P5,
399  typename P6,
400  typename P7,
401  typename P8,
402  typename P9,
403  typename P10,
404  typename P11,
405  typename P12,
406  typename P13,
407  typename P14,
408  typename P15,
409  typename P16>
410 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)>
411 {
412  P1 Parameter1;
413  P2 Parameter2;
414  P3 Parameter3;
415  P4 Parameter4;
416  P5 Parameter5;
417  P6 Parameter6;
418  P7 Parameter7;
419  P8 Parameter8;
420  P9 Parameter9;
421  P10 Parameter10;
422  P11 Parameter11;
423  P12 Parameter12;
424  P13 Parameter13;
425  P14 Parameter14;
426  P15 Parameter15;
427  P16 Parameter16;
428 };
429 
430 template <typename R,
431  typename P1,
432  typename P2,
433  typename P3,
434  typename P4,
435  typename P5,
436  typename P6,
437  typename P7,
438  typename P8,
439  typename P9,
440  typename P10,
441  typename P11,
442  typename P12,
443  typename P13,
444  typename P14,
445  typename P15,
446  typename P16,
447  typename P17>
448 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17)>
449 {
450  P1 Parameter1;
451  P2 Parameter2;
452  P3 Parameter3;
453  P4 Parameter4;
454  P5 Parameter5;
455  P6 Parameter6;
456  P7 Parameter7;
457  P8 Parameter8;
458  P9 Parameter9;
459  P10 Parameter10;
460  P11 Parameter11;
461  P12 Parameter12;
462  P13 Parameter13;
463  P14 Parameter14;
464  P15 Parameter15;
465  P16 Parameter16;
466  P17 Parameter17;
467 };
468 
469 template <typename R,
470  typename P1,
471  typename P2,
472  typename P3,
473  typename P4,
474  typename P5,
475  typename P6,
476  typename P7,
477  typename P8,
478  typename P9,
479  typename P10,
480  typename P11,
481  typename P12,
482  typename P13,
483  typename P14,
484  typename P15,
485  typename P16,
486  typename P17,
487  typename P18>
488 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)>
489 {
490  P1 Parameter1;
491  P2 Parameter2;
492  P3 Parameter3;
493  P4 Parameter4;
494  P5 Parameter5;
495  P6 Parameter6;
496  P7 Parameter7;
497  P8 Parameter8;
498  P9 Parameter9;
499  P10 Parameter10;
500  P11 Parameter11;
501  P12 Parameter12;
502  P13 Parameter13;
503  P14 Parameter14;
504  P15 Parameter15;
505  P16 Parameter16;
506  P17 Parameter17;
507  P18 Parameter18;
508 };
509 
510 template <typename R,
511  typename P1,
512  typename P2,
513  typename P3,
514  typename P4,
515  typename P5,
516  typename P6,
517  typename P7,
518  typename P8,
519  typename P9,
520  typename P10,
521  typename P11,
522  typename P12,
523  typename P13,
524  typename P14,
525  typename P15,
526  typename P16,
527  typename P17,
528  typename P18,
529  typename P19>
530 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19)>
531 {
532  P1 Parameter1;
533  P2 Parameter2;
534  P3 Parameter3;
535  P4 Parameter4;
536  P5 Parameter5;
537  P6 Parameter6;
538  P7 Parameter7;
539  P8 Parameter8;
540  P9 Parameter9;
541  P10 Parameter10;
542  P11 Parameter11;
543  P12 Parameter12;
544  P13 Parameter13;
545  P14 Parameter14;
546  P15 Parameter15;
547  P16 Parameter16;
548  P17 Parameter17;
549  P18 Parameter18;
550  P19 Parameter19;
551 };
552 
553 template <typename R,
554  typename P1,
555  typename P2,
556  typename P3,
557  typename P4,
558  typename P5,
559  typename P6,
560  typename P7,
561  typename P8,
562  typename P9,
563  typename P10,
564  typename P11,
565  typename P12,
566  typename P13,
567  typename P14,
568  typename P15,
569  typename P16,
570  typename P17,
571  typename P18,
572  typename P19,
573  typename P20>
574 struct ParameterContainer<R(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)>
575 {
576  P1 Parameter1;
577  P2 Parameter2;
578  P3 Parameter3;
579  P4 Parameter4;
580  P5 Parameter5;
581  P6 Parameter6;
582  P7 Parameter7;
583  P8 Parameter8;
584  P9 Parameter9;
585  P10 Parameter10;
586  P11 Parameter11;
587  P12 Parameter12;
588  P13 Parameter13;
589  P14 Parameter14;
590  P15 Parameter15;
591  P16 Parameter16;
592  P17 Parameter17;
593  P18 Parameter18;
594  P19 Parameter19;
595  P20 Parameter20;
596 };
597 
598 // clang-format on
599 
600 //============================================================================
601 template <typename>
602 struct FunctionSigInfo;
603 template <typename R, typename... ArgTypes>
604 struct FunctionSigInfo<R(ArgTypes...)>
605 {
606  static constexpr std::size_t Arity = sizeof...(ArgTypes);
607  using ArityType = std::integral_constant<int, static_cast<int>(Arity)>;
608 
609  using ResultType = R;
610  using Components = viskores::List<R, ArgTypes...>;
611  using Parameters = viskores::List<ArgTypes...>;
612 };
613 
614 template <int, typename>
615 struct AtType;
616 template <int Index, typename R, typename... ArgTypes>
617 struct AtType<Index, R(ArgTypes...)>
618 {
619  using type = viskores::ListAt<viskores::List<R, ArgTypes...>, Index>;
620 };
621 
622 //============================================================================
623 
624 // clang-format off
625 
627 template <typename FunctionSignature>
628 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
629  viskores::internal::IndexTag<1>)
630  -> decltype(parameters.Parameter1) const&
631 {
632  return parameters.Parameter1;
633 }
635 template <typename FunctionSignature>
636 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
637  viskores::internal::IndexTag<2>)
638  -> decltype(parameters.Parameter2) const&
639 {
640  return parameters.Parameter2;
641 }
643 template <typename FunctionSignature>
644 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
645  viskores::internal::IndexTag<3>)
646  -> decltype(parameters.Parameter3) const&
647 {
648  return parameters.Parameter3;
649 }
651 template <typename FunctionSignature>
652 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
653  viskores::internal::IndexTag<4>)
654  -> decltype(parameters.Parameter4) const&
655 {
656  return parameters.Parameter4;
657 }
659 template <typename FunctionSignature>
660 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
661  viskores::internal::IndexTag<5>)
662  -> decltype(parameters.Parameter5) const&
663 {
664  return parameters.Parameter5;
665 }
667 template <typename FunctionSignature>
668 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
669  viskores::internal::IndexTag<6>)
670  -> decltype(parameters.Parameter6) const&
671 {
672  return parameters.Parameter6;
673 }
675 template <typename FunctionSignature>
676 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
677  viskores::internal::IndexTag<7>)
678  -> decltype(parameters.Parameter7) const&
679 {
680  return parameters.Parameter7;
681 }
683 template <typename FunctionSignature>
684 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
685  viskores::internal::IndexTag<8>)
686  -> decltype(parameters.Parameter8) const&
687 {
688  return parameters.Parameter8;
689 }
691 template <typename FunctionSignature>
692 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
693  viskores::internal::IndexTag<9>)
694  -> decltype(parameters.Parameter9) const&
695 {
696  return parameters.Parameter9;
697 }
699 template <typename FunctionSignature>
700 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
701  viskores::internal::IndexTag<10>)
702  -> decltype(parameters.Parameter10) const&
703 {
704  return parameters.Parameter10;
705 }
707 template <typename FunctionSignature>
708 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
709  viskores::internal::IndexTag<11>)
710  -> decltype(parameters.Parameter11) const&
711 {
712  return parameters.Parameter11;
713 }
715 template <typename FunctionSignature>
716 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
717  viskores::internal::IndexTag<12>)
718  -> decltype(parameters.Parameter12) const&
719 {
720  return parameters.Parameter12;
721 }
723 template <typename FunctionSignature>
724 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
725  viskores::internal::IndexTag<13>)
726  -> decltype(parameters.Parameter13) const&
727 {
728  return parameters.Parameter13;
729 }
731 template <typename FunctionSignature>
732 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
733  viskores::internal::IndexTag<14>)
734  -> decltype(parameters.Parameter14) const&
735 {
736  return parameters.Parameter14;
737 }
739 template <typename FunctionSignature>
740 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
741  viskores::internal::IndexTag<15>)
742  -> decltype(parameters.Parameter15) const&
743 {
744  return parameters.Parameter15;
745 }
747 template <typename FunctionSignature>
748 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
749  viskores::internal::IndexTag<16>)
750  -> decltype(parameters.Parameter16) const&
751 {
752  return parameters.Parameter16;
753 }
755 template <typename FunctionSignature>
756 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
757  viskores::internal::IndexTag<17>)
758  -> decltype(parameters.Parameter17) const&
759 {
760  return parameters.Parameter17;
761 }
763 template <typename FunctionSignature>
764 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
765  viskores::internal::IndexTag<18>)
766  -> decltype(parameters.Parameter18) const&
767 {
768  return parameters.Parameter18;
769 }
771 template <typename FunctionSignature>
772 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
773  viskores::internal::IndexTag<19>)
774  -> decltype(parameters.Parameter19) const&
775 {
776  return parameters.Parameter19;
777 }
779 template <typename FunctionSignature>
780 VISKORES_EXEC_CONT auto ParameterGet(const ParameterContainer<FunctionSignature>& parameters,
781  viskores::internal::IndexTag<20>)
782  -> decltype(parameters.Parameter20) const&
783 {
784  return parameters.Parameter20;
785 }
786 
787 // clang-format on
788 
789 //============================================================================
790 
791 template <typename OriginalSignature, typename Transform>
792 struct FunctionInterfaceStaticTransformType;
793 
794 // clang-format off
795 
797 template <typename Result,
798  typename Transform,
799  typename OriginalR>
800 VISKORES_CONT Result DoStaticTransformCont(
801  const Transform& transform,
802  ParameterContainer<OriginalR()>& originalParameters)
803 {
804  (void)transform;
805  (void)originalParameters;
806 }
807 
809 template <typename Result,
810  typename Transform,
811  typename OriginalR,
812  typename OriginalP1>
813 VISKORES_CONT Result DoStaticTransformCont(
814  const Transform& transform,
815  ParameterContainer<OriginalR(OriginalP1)>& originalParameters)
816 {
817  return Result{
818  transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>())
819  };
820 }
821 
823 template <typename Result,
824  typename Transform,
825  typename OriginalR,
826  typename OriginalP1,
827  typename OriginalP2>
828 VISKORES_CONT Result DoStaticTransformCont(
829  const Transform& transform,
830  ParameterContainer<OriginalR(OriginalP1, OriginalP2)>& originalParameters)
831 {
832  return Result{
833  transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
834  transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>())
835  };
836 }
837 
839 template <typename Result,
840  typename Transform,
841  typename OriginalR,
842  typename OriginalP1,
843  typename OriginalP2,
844  typename OriginalP3>
845 VISKORES_CONT Result DoStaticTransformCont(
846  const Transform& transform,
847  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3)>& originalParameters)
848 {
849  return Result{
850  transform(originalParameters.Parameter1, viskores::internal::IndexTag<1>()),
851  transform(originalParameters.Parameter2, viskores::internal::IndexTag<2>()),
852  transform(originalParameters.Parameter3, viskores::internal::IndexTag<3>())
853  };
854 }
855 
857 template <typename Result,
858  typename Transform,
859  typename OriginalR,
860  typename OriginalP1,
861  typename OriginalP2,
862  typename OriginalP3,
863  typename OriginalP4>
864 VISKORES_CONT Result DoStaticTransformCont(
865  const Transform& transform,
866  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4)>& originalParameters)
867 {
868  return Result{
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>())
873  };
874 }
875 
877 template <typename Result,
878  typename Transform,
879  typename OriginalR,
880  typename OriginalP1,
881  typename OriginalP2,
882  typename OriginalP3,
883  typename OriginalP4,
884  typename OriginalP5>
885 VISKORES_CONT Result DoStaticTransformCont(
886  const Transform& transform,
887  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5)>& originalParameters)
888 {
889  return Result{
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>())
895  };
896 }
897 
899 template <typename Result,
900  typename Transform,
901  typename OriginalR,
902  typename OriginalP1,
903  typename OriginalP2,
904  typename OriginalP3,
905  typename OriginalP4,
906  typename OriginalP5,
907  typename OriginalP6>
908 VISKORES_CONT Result DoStaticTransformCont(
909  const Transform& transform,
910  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6)>& originalParameters)
911 {
912  return Result{
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>())
919  };
920 }
921 
923 template <typename Result,
924  typename Transform,
925  typename OriginalR,
926  typename OriginalP1,
927  typename OriginalP2,
928  typename OriginalP3,
929  typename OriginalP4,
930  typename OriginalP5,
931  typename OriginalP6,
932  typename OriginalP7>
933 VISKORES_CONT Result DoStaticTransformCont(
934  const Transform& transform,
935  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7)>& originalParameters)
936 {
937  return Result{
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>())
945  };
946 }
947 
949 template <typename Result,
950  typename Transform,
951  typename OriginalR,
952  typename OriginalP1,
953  typename OriginalP2,
954  typename OriginalP3,
955  typename OriginalP4,
956  typename OriginalP5,
957  typename OriginalP6,
958  typename OriginalP7,
959  typename OriginalP8>
960 VISKORES_CONT Result DoStaticTransformCont(
961  const Transform& transform,
962  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8)>& originalParameters)
963 {
964  return Result{
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>())
973  };
974 }
975 
977 template <typename Result,
978  typename Transform,
979  typename OriginalR,
980  typename OriginalP1,
981  typename OriginalP2,
982  typename OriginalP3,
983  typename OriginalP4,
984  typename OriginalP5,
985  typename OriginalP6,
986  typename OriginalP7,
987  typename OriginalP8,
988  typename OriginalP9>
989 VISKORES_CONT Result DoStaticTransformCont(
990  const Transform& transform,
991  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9)>& originalParameters)
992 {
993  return Result{
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>())
1003  };
1004 }
1005 
1007 template <typename Result,
1008  typename Transform,
1009  typename OriginalR,
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>
1020 VISKORES_CONT Result DoStaticTransformCont(
1021  const Transform& transform,
1022  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10)>& originalParameters)
1023 {
1024  return Result{
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>())
1035  };
1036 }
1037 
1039 template <typename Result,
1040  typename Transform,
1041  typename OriginalR,
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>
1053 VISKORES_CONT Result DoStaticTransformCont(
1054  const Transform& transform,
1055  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11)>& originalParameters)
1056 {
1057  return Result{
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>())
1069  };
1070 }
1071 
1073 template <typename Result,
1074  typename Transform,
1075  typename OriginalR,
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>
1088 VISKORES_CONT Result DoStaticTransformCont(
1089  const Transform& transform,
1090  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12)>& originalParameters)
1091 {
1092  return Result{
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>())
1105  };
1106 }
1107 
1109 template <typename Result,
1110  typename Transform,
1111  typename OriginalR,
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>
1125 VISKORES_CONT Result DoStaticTransformCont(
1126  const Transform& transform,
1127  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13)>& originalParameters)
1128 {
1129  return Result{
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>())
1143  };
1144 }
1145 
1147 template <typename Result,
1148  typename Transform,
1149  typename OriginalR,
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>
1164 VISKORES_CONT Result DoStaticTransformCont(
1165  const Transform& transform,
1166  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14)>& originalParameters)
1167 {
1168  return Result{
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>())
1183  };
1184 }
1185 
1187 template <typename Result,
1188  typename Transform,
1189  typename OriginalR,
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>
1205 VISKORES_CONT Result DoStaticTransformCont(
1206  const Transform& transform,
1207  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15)>& originalParameters)
1208 {
1209  return Result{
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>())
1225  };
1226 }
1227 
1229 template <typename Result,
1230  typename Transform,
1231  typename OriginalR,
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>
1248 VISKORES_CONT Result DoStaticTransformCont(
1249  const Transform& transform,
1250  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16)>& originalParameters)
1251 {
1252  return Result{
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>())
1269  };
1270 }
1271 
1273 template <typename Result,
1274  typename Transform,
1275  typename OriginalR,
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>
1293 VISKORES_CONT Result DoStaticTransformCont(
1294  const Transform& transform,
1295  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17)>& originalParameters)
1296 {
1297  return Result{
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>())
1315  };
1316 }
1317 
1319 template <typename Result,
1320  typename Transform,
1321  typename OriginalR,
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>
1340 VISKORES_CONT Result DoStaticTransformCont(
1341  const Transform& transform,
1342  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17, OriginalP18)>& originalParameters)
1343 {
1344  return Result{
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>())
1363  };
1364 }
1365 
1367 template <typename Result,
1368  typename Transform,
1369  typename OriginalR,
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>
1389 VISKORES_CONT Result DoStaticTransformCont(
1390  const Transform& transform,
1391  ParameterContainer<OriginalR(OriginalP1, OriginalP2, OriginalP3, OriginalP4, OriginalP5, OriginalP6, OriginalP7, OriginalP8, OriginalP9, OriginalP10, OriginalP11, OriginalP12, OriginalP13, OriginalP14, OriginalP15, OriginalP16, OriginalP17, OriginalP18, OriginalP19)>& originalParameters)
1392 {
1393  return Result{
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>())
1413  };
1414 }
1415 
1416 // clang-format on
1417 
1418 } // namespace detail
1419 }
1420 } // namespace viskores::internal
1421 
1422 #endif //viskores_internal_FunctionInterfaceDetailPre_h
Types.h
viskores::Transform
auto Transform(const TupleType &&tuple, Function &&f) -> decltype(Apply(tuple, detail::TupleTransformFunctor(), std::forward< Function >(f)))
Construct a new viskores::Tuple by applying a function to each value.
Definition: Tuple.h:221
VISKORES_SUPPRESS_EXEC_WARNINGS
#define VISKORES_SUPPRESS_EXEC_WARNINGS
Definition: ExportMacros.h:61
VISKORES_EXEC_CONT
#define VISKORES_EXEC_CONT
Definition: ExportMacros.h:60
viskores::List
A template used to hold a list of types.
Definition: List.h:47
viskores::ListAt
typename detail::ListAtImpl< List, Index >::type ListAt
Finds the type at the given index.
Definition: List.h:358
VISKORES_CONT
#define VISKORES_CONT
Definition: ExportMacros.h:65
viskores
Groups connected points that have the same field value.
Definition: Atomic.h:27
Index
int Index
Definition: ChooseCudaDevice.h:95
IndexTag.h
List.h