//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. //============================================================================ // **** DO NOT EDIT THIS FILE!!! **** // This file is automatically generated by FunctionInterfaceDetailPre.h.in #ifndef vtk_m_internal_FunctionInterfaceDetailPre_h #define vtk_m_internal_FunctionInterfaceDetailPre_h #if !defined(vtk_m_internal_FunctionInterface_h) && !defined(VTKM_TEST_HEADER_BUILD) #error FunctionInterfaceDetailPre.h must be included from FunctionInterface.h #endif #include #include #include #include #define VTKM_MAX_FUNCTION_PARAMETERS 20 namespace vtkm { namespace internal { /// This struct is used internally by FunctionInterface to store the return /// value of a function. There is a special implementation for a return type of /// void, which stores nothing. /// template struct FunctionInterfaceReturnContainer { T Value; static constexpr bool VALID = true; }; template <> struct FunctionInterfaceReturnContainer { // Nothing to store for void return. static constexpr bool VALID = false; }; namespace detail { //============================================================================ // This templated class contains the state of parameters. If you get a compiler // error stating that this class is not specialized, that probably means that // you are using FunctionInterface with an unsupported number of arguments. template struct ParameterContainer; // clang-format off template struct ParameterContainer { }; template struct ParameterContainer { P1 Parameter1; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; P15 Parameter15; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; P15 Parameter15; P16 Parameter16; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; P15 Parameter15; P16 Parameter16; P17 Parameter17; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; P15 Parameter15; P16 Parameter16; P17 Parameter17; P18 Parameter18; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; P15 Parameter15; P16 Parameter16; P17 Parameter17; P18 Parameter18; P19 Parameter19; }; template struct ParameterContainer { P1 Parameter1; P2 Parameter2; P3 Parameter3; P4 Parameter4; P5 Parameter5; P6 Parameter6; P7 Parameter7; P8 Parameter8; P9 Parameter9; P10 Parameter10; P11 Parameter11; P12 Parameter12; P13 Parameter13; P14 Parameter14; P15 Parameter15; P16 Parameter16; P17 Parameter17; P18 Parameter18; P19 Parameter19; P20 Parameter20; }; // clang-format on //============================================================================ template struct FunctionSigInfo; template struct FunctionSigInfo { static constexpr std::size_t Arity = sizeof...(ArgTypes); using ArityType = std::integral_constant(Arity)>; using ResultType = R; using Components = brigand::list; using Parameters = brigand::list; }; template struct AtType; template struct AtType { using type = brigand::at_c, Index>; }; template struct AppendType; template