//============================================================================ // 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 Tuple.h.in #ifndef vtk_m_Tuple_h #define vtk_m_Tuple_h #include #include #include namespace vtkm { ///@{ /// \brief VTK-m replacement for std::tuple /// /// This function serves the same function as `std::tuple` and behaves similarly. However, this /// version of `Tuple` works on devices that VTK-m supports. There are also some implementation /// details that makes compiling faster for VTK-m use. We also provide some methods like `Apply` /// and `ForEach` that are helpful for several VTK-m operations. /// template class Tuple; /// \brief Get the size of a tuple. /// /// Given a `vtkm::Tuple` type, because a `std::integral_constant` of the type. /// template using TupleSize = std::integral_constant; /// \brief Compatible with `std::tuple_size` for `vtkm::Tuple`. /// template using tuple_size = std::integral_constant(TupleType::Size)>; namespace detail { template struct TupleElementImpl { using type = decltype(TupleType::ElementTypeI(vtkm::internal::IndexTag{})); }; } // namespace detail /// \brief Becomes the type of the given index for the given `vtkm::Tuple`. /// template using TupleElement = typename detail::TupleElementImpl::type; /// \brief Compatible with `std::tuple_element` for `vtkm::Tuple`. /// template struct tuple_element { using type = TupleElement(Index), TupleType>; }; /// \brief Compatible with `std::tuple_element_t` for `vtkm::Tuple`. /// template using tuple_element_t = typename tuple_element::type; ///@{ /// \brief Retrieve the object from a `vtkm::Tuple` at the given index. /// VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Get(const vtkm::Tuple& tuple) -> decltype(tuple.template Get()) { return tuple.template Get(); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Get(vtkm::Tuple& tuple) -> decltype(tuple.template Get()) { return tuple.template Get(); } ///@} ///@{ /// \brief Compatible with `std::get` for `vtkm::Tuple`. /// VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto get(const vtkm::Tuple& tuple) -> decltype(vtkm::Get(Index)>(tuple)) { return vtkm::Get(Index)>(tuple); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto get(vtkm::Tuple& tuple) -> decltype(vtkm::Get(Index)>(tuple)) { return vtkm::Get(Index)>(tuple); } ///@} /// \brief Creates a new `vtkm::Tuple` with the given types. /// VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto MakeTuple(Ts&&... args) -> vtkm::Tuple::type...> { return vtkm::Tuple::type...>(std::forward(args)...); } /// \brief Compatible with `std::make_tuple` for `vtkm::Tuple`. /// VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto make_tuple(Ts&&... args) -> decltype(vtkm::MakeTuple(std::forward(args)...)) { return vtkm::MakeTuple(std::forward(args)...); } /// @cond NONE namespace detail { struct TupleTransformFunctor { VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto operator()(Function&& f, Ts&&... args) -> decltype(vtkm::MakeTuple(f(std::forward(args))...)) { return vtkm::MakeTuple(f(std::forward(args))...); } }; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto TupleTransform(TupleType&& tuple, Function&& f) -> decltype(tuple.Apply(TupleTransformFunctor{}, std::forward(f))) { return tuple.Apply(TupleTransformFunctor{}, std::forward(f)); } struct TupleForEachFunctor { VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void operator()(Function&& f, Ts&&... args) { (void)std::initializer_list{ (f(std::forward(args)), false)... }; } }; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto TupleForEach(TupleType&& tuple, Function&& f) -> decltype(tuple.Apply(TupleForEachFunctor{}, std::forward(f))) { return tuple.Apply(TupleForEachFunctor{}, std::forward(f)); } } // namespace detail /// @endcond template <> class Tuple<> { public: static constexpr vtkm::IdComponent Size = 0; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)...)) { return f(std::forward(args)...); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)...)) { return f(std::forward(args)...); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&&) const { } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT vtkm::Tuple<> Transform(Function&&) const { return vtkm::Tuple<>{}; } }; // clang-format off template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 1; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0) : Value0(std::forward(a0)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0)) { return f(std::forward(args)..., Value0); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0)) { return f(std::forward(args)..., Value0); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 2; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1) : Value0(std::forward(a0)) , Value1(std::forward(a1)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1)) { return f(std::forward(args)..., Value0, Value1); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1)) { return f(std::forward(args)..., Value0, Value1); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 3; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2)) { return f(std::forward(args)..., Value0, Value1, Value2); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2)) { return f(std::forward(args)..., Value0, Value1, Value2); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 4; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 5; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 6; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 7; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 8; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 9; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 10; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 11; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 12; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 13; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 14; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 15; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } T15 Value15; static T15 ElementTypeI(vtkm::internal::IndexTag<15>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) { return this->Value15; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) const { return this->Value15; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 16; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) , Value15(std::forward(a15)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } T15 Value15; static T15 ElementTypeI(vtkm::internal::IndexTag<15>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) { return this->Value15; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) const { return this->Value15; } T16 Value16; static T16 ElementTypeI(vtkm::internal::IndexTag<16>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) { return this->Value16; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) const { return this->Value16; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 17; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) , Value15(std::forward(a15)) , Value16(std::forward(a16)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } T15 Value15; static T15 ElementTypeI(vtkm::internal::IndexTag<15>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) { return this->Value15; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) const { return this->Value15; } T16 Value16; static T16 ElementTypeI(vtkm::internal::IndexTag<16>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) { return this->Value16; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) const { return this->Value16; } T17 Value17; static T17 ElementTypeI(vtkm::internal::IndexTag<17>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) { return this->Value17; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) const { return this->Value17; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 18; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) , Value15(std::forward(a15)) , Value16(std::forward(a16)) , Value17(std::forward(a17)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } T15 Value15; static T15 ElementTypeI(vtkm::internal::IndexTag<15>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) { return this->Value15; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) const { return this->Value15; } T16 Value16; static T16 ElementTypeI(vtkm::internal::IndexTag<16>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) { return this->Value16; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) const { return this->Value16; } T17 Value17; static T17 ElementTypeI(vtkm::internal::IndexTag<17>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) { return this->Value17; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) const { return this->Value17; } T18 Value18; static T18 ElementTypeI(vtkm::internal::IndexTag<18>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<18>) { return this->Value18; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<18>) const { return this->Value18; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 19; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17, A18&& a18) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) , Value15(std::forward(a15)) , Value16(std::forward(a16)) , Value17(std::forward(a17)) , Value18(std::forward(a18)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } T15 Value15; static T15 ElementTypeI(vtkm::internal::IndexTag<15>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) { return this->Value15; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) const { return this->Value15; } T16 Value16; static T16 ElementTypeI(vtkm::internal::IndexTag<16>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) { return this->Value16; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) const { return this->Value16; } T17 Value17; static T17 ElementTypeI(vtkm::internal::IndexTag<17>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) { return this->Value17; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) const { return this->Value17; } T18 Value18; static T18 ElementTypeI(vtkm::internal::IndexTag<18>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<18>) { return this->Value18; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<18>) const { return this->Value18; } T19 Value19; static T19 ElementTypeI(vtkm::internal::IndexTag<19>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<19>) { return this->Value19; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<19>) const { return this->Value19; } // Invalid indices template static vtkm::internal::NullType ElementTypeI(vtkm::internal::IndexTag); template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 20; template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17, A18&& a18, A19&& a19) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) , Value15(std::forward(a15)) , Value16(std::forward(a16)) , Value17(std::forward(a17)) , Value18(std::forward(a18)) , Value19(std::forward(a19)) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19)) { return f(std::forward(args)..., Value0, Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Value11, Value12, Value13, Value14, Value15, Value16, Value17, Value18, Value19); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; // Fallback case for tuples with > 20 items. template class Tuple { T0 Value0; static T0 ElementTypeI(vtkm::internal::IndexTag<0>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) { return this->Value0; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<0>) const { return this->Value0; } T1 Value1; static T1 ElementTypeI(vtkm::internal::IndexTag<1>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) { return this->Value1; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<1>) const { return this->Value1; } T2 Value2; static T2 ElementTypeI(vtkm::internal::IndexTag<2>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) { return this->Value2; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<2>) const { return this->Value2; } T3 Value3; static T3 ElementTypeI(vtkm::internal::IndexTag<3>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) { return this->Value3; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<3>) const { return this->Value3; } T4 Value4; static T4 ElementTypeI(vtkm::internal::IndexTag<4>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) { return this->Value4; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<4>) const { return this->Value4; } T5 Value5; static T5 ElementTypeI(vtkm::internal::IndexTag<5>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) { return this->Value5; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<5>) const { return this->Value5; } T6 Value6; static T6 ElementTypeI(vtkm::internal::IndexTag<6>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) { return this->Value6; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<6>) const { return this->Value6; } T7 Value7; static T7 ElementTypeI(vtkm::internal::IndexTag<7>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) { return this->Value7; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<7>) const { return this->Value7; } T8 Value8; static T8 ElementTypeI(vtkm::internal::IndexTag<8>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) { return this->Value8; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<8>) const { return this->Value8; } T9 Value9; static T9 ElementTypeI(vtkm::internal::IndexTag<9>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) { return this->Value9; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<9>) const { return this->Value9; } T10 Value10; static T10 ElementTypeI(vtkm::internal::IndexTag<10>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) { return this->Value10; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<10>) const { return this->Value10; } T11 Value11; static T11 ElementTypeI(vtkm::internal::IndexTag<11>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) { return this->Value11; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<11>) const { return this->Value11; } T12 Value12; static T12 ElementTypeI(vtkm::internal::IndexTag<12>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) { return this->Value12; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<12>) const { return this->Value12; } T13 Value13; static T13 ElementTypeI(vtkm::internal::IndexTag<13>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) { return this->Value13; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<13>) const { return this->Value13; } T14 Value14; static T14 ElementTypeI(vtkm::internal::IndexTag<14>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) { return this->Value14; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<14>) const { return this->Value14; } T15 Value15; static T15 ElementTypeI(vtkm::internal::IndexTag<15>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) { return this->Value15; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<15>) const { return this->Value15; } T16 Value16; static T16 ElementTypeI(vtkm::internal::IndexTag<16>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) { return this->Value16; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<16>) const { return this->Value16; } T17 Value17; static T17 ElementTypeI(vtkm::internal::IndexTag<17>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) { return this->Value17; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<17>) const { return this->Value17; } T18 Value18; static T18 ElementTypeI(vtkm::internal::IndexTag<18>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<18>) { return this->Value18; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<18>) const { return this->Value18; } T19 Value19; static T19 ElementTypeI(vtkm::internal::IndexTag<19>); VTKM_EXEC_CONT vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<19>) { return this->Value19; } VTKM_EXEC_CONT const vtkm::internal::remove_cvref& GetImpl(vtkm::internal::IndexTag<19>) const { return this->Value19; } // Implement the "extra" objects in a sub-Tuple using RemainingValuesType = vtkm::Tuple; RemainingValuesType RemainingValues; template static vtkm::TupleElement ElementTypeI(vtkm::internal::IndexTag); template VTKM_EXEC_CONT const vtkm::internal::remove_cvref>& GetImpl(vtkm::internal::IndexTag) { return vtkm::Get(this->RemainingValues); } template VTKM_EXEC_CONT const vtkm::internal::remove_cvref>& GetImpl(vtkm::internal::IndexTag) const { return vtkm::Get(this->RemainingValues); } template friend struct detail::TupleElementImpl; public: static constexpr vtkm::IdComponent Size = 21 + static_cast(sizeof...(Ts)); template using ElementType = vtkm::TupleElement>; Tuple() = default; Tuple(Tuple&&) = default; Tuple(const Tuple&) = default; ~Tuple() = default; Tuple& operator=(Tuple&&) = default; Tuple& operator=(const Tuple&) = default; VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT Tuple(A0&& a0, A1&& a1, A2&& a2, A3&& a3, A4&& a4, A5&& a5, A6&& a6, A7&& a7, A8&& a8, A9&& a9, A10&& a10, A11&& a11, A12&& a12, A13&& a13, A14&& a14, A15&& a15, A16&& a16, A17&& a17, A18&& a18, A19&& a19, As&&... remainingArgs) : Value0(std::forward(a0)) , Value1(std::forward(a1)) , Value2(std::forward(a2)) , Value3(std::forward(a3)) , Value4(std::forward(a4)) , Value5(std::forward(a5)) , Value6(std::forward(a6)) , Value7(std::forward(a7)) , Value8(std::forward(a8)) , Value9(std::forward(a9)) , Value10(std::forward(a10)) , Value11(std::forward(a11)) , Value12(std::forward(a12)) , Value13(std::forward(a13)) , Value14(std::forward(a14)) , Value15(std::forward(a15)) , Value16(std::forward(a16)) , Value17(std::forward(a17)) , Value18(std::forward(a18)) , Value19(std::forward(a19)) , RemainingValues(std::forward(remainingArgs)...) { } template VTKM_EXEC_CONT auto Get() -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } template VTKM_EXEC_CONT auto Get() const -> decltype(this->GetImpl(vtkm::internal::IndexTag{})) { return this->GetImpl(vtkm::internal::IndexTag{}); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) -> decltype(this->RemainingValues.Apply(std::forward(f), std::forward(args)..., this->Value0, this->Value1, this->Value2, this->Value3, this->Value4, this->Value5, this->Value6, this->Value7, this->Value8, this->Value9, this->Value10, this->Value11, this->Value12, this->Value13, this->Value14, this->Value15, this->Value16, this->Value17, this->Value18, this->Value19)) { return this->RemainingValues.Apply(std::forward(f), std::forward(args)..., this->Value0, this->Value1, this->Value2, this->Value3, this->Value4, this->Value5, this->Value6, this->Value7, this->Value8, this->Value9, this->Value10, this->Value11, this->Value12, this->Value13, this->Value14, this->Value15, this->Value16, this->Value17, this->Value18, this->Value19); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Apply(Function&& f, Args&&... args) const -> decltype(this->RemainingValues.Apply(std::forward(f), std::forward(args)..., this->Value0, this->Value1, this->Value2, this->Value3, this->Value4, this->Value5, this->Value6, this->Value7, this->Value8, this->Value9, this->Value10, this->Value11, this->Value12, this->Value13, this->Value14, this->Value15, this->Value16, this->Value17, this->Value18, this->Value19)) { return this->RemainingValues.Apply(std::forward(f), std::forward(args)..., this->Value0, this->Value1, this->Value2, this->Value3, this->Value4, this->Value5, this->Value6, this->Value7, this->Value8, this->Value9, this->Value10, this->Value11, this->Value12, this->Value13, this->Value14, this->Value15, this->Value16, this->Value17, this->Value18, this->Value19); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT void ForEach(Function&& f) const { detail::TupleForEach(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } VTKM_SUPPRESS_EXEC_WARNINGS template VTKM_EXEC_CONT auto Transform(Function&& f) const -> decltype(detail::TupleTransform(*this, std::forward(f))) { return detail::TupleTransform(*this, std::forward(f)); } }; ///@} // clang-format on } // namespace vtkm #endif //vtk_m_Tuple_h