16#ifndef CABANA_TUPLE_HPP
17#define CABANA_TUPLE_HPP
22#include <Kokkos_Core.hpp>
31template <
typename DataTypes>
37struct is_tuple_impl :
public std::false_type
41template <
class DataTypes>
42struct is_tuple_impl<
Tuple<DataTypes>> :
public std::true_type
49struct is_tuple :
public is_tuple_impl<typename std::remove_cv<T>::type>::type
57template <std::
size_t M,
class Tuple_t>
58KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
60 typename Tuple_t::template member_reference_type<M>>::type
63 return get<M>(
static_cast<typename Tuple_t::base&
>( tp ), 0 );
67template <std::
size_t M,
class Tuple_t>
68KOKKOS_FORCEINLINE_FUNCTION
69 typename Tuple_t::template member_const_reference_type<M>
70 get(
const Tuple_t& tp )
72 return get<M>(
static_cast<const typename Tuple_t::base&
>( tp ), 0 );
76template <std::
size_t M,
class Tuple_t>
77KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
78 is_tuple<Tuple_t>::value,
79 typename Tuple_t::template member_reference_type<M>>::type
80get( Tuple_t& tp,
const std::size_t d0 )
82 return get<M>(
static_cast<typename Tuple_t::base&
>( tp ), 0, d0 );
86template <std::
size_t M,
class Tuple_t>
87KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
88 is_tuple<Tuple_t>::value,
89 typename Tuple_t::template member_const_reference_type<M>>::type
90get(
const Tuple_t& tp,
const std::size_t d0 )
92 return get<M>(
static_cast<const typename Tuple_t::base&
>( tp ), 0, d0 );
96template <std::
size_t M,
class Tuple_t>
97KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
98 is_tuple<Tuple_t>::value,
99 typename Tuple_t::template member_reference_type<M>>::type
100get( Tuple_t& tp,
const std::size_t d0,
const std::size_t d1 )
102 return get<M>(
static_cast<typename Tuple_t::base&
>( tp ), 0, d0, d1 );
106template <std::
size_t M,
class Tuple_t>
107KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
108 is_tuple<Tuple_t>::value,
109 typename Tuple_t::template member_const_reference_type<M>>::type
110get(
const Tuple_t& tp,
const std::size_t d0,
const std::size_t d1 )
112 return get<M>(
static_cast<const typename Tuple_t::base&
>( tp ), 0, d0,
117template <std::
size_t M,
class Tuple_t>
118KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
119 is_tuple<Tuple_t>::value,
120 typename Tuple_t::template member_reference_type<M>>::type
121get( Tuple_t& tp,
const std::size_t d0,
const std::size_t d1,
122 const std::size_t d2 )
124 return get<M>(
static_cast<typename Tuple_t::base&
>( tp ), 0, d0, d1, d2 );
128template <std::
size_t M,
class Tuple_t>
129KOKKOS_FORCEINLINE_FUNCTION
typename std::enable_if<
130 is_tuple<Tuple_t>::value,
131 typename Tuple_t::template member_const_reference_type<M>>::type
132get(
const Tuple_t& tp,
const std::size_t d0,
const std::size_t d1,
133 const std::size_t d2 )
135 return get<M>(
static_cast<const typename Tuple_t::base&
>( tp ), 0, d0, d1,
149template <
typename... Types>
155 KOKKOS_DEFAULTED_FUNCTION Tuple() =
default;
158 KOKKOS_FORCEINLINE_FUNCTION
Tuple(
const Tuple& t )
160 Impl::tupleCopy( *
this, 0, t, 0 );
164 KOKKOS_FORCEINLINE_FUNCTION
Tuple( Tuple&& t )
166 Impl::tupleCopy( *
this, 0, t, 0 );
170 KOKKOS_FORCEINLINE_FUNCTION Tuple&
operator=(
const Tuple& t )
172 Impl::tupleCopy( *
this, 0, t, 0 );
177 KOKKOS_FORCEINLINE_FUNCTION Tuple&
operator=( Tuple&& t )
179 Impl::tupleCopy( *
this, 0, t, 0 );
AoSoA tuple member types.
Struct-of-Arrays for building AoSoA.
Core: particle data structures and algorithms.
Definition Cabana_AoSoA.hpp:36
KOKKOS_FORCEINLINE_FUNCTION std::enable_if< is_parameter_pack< ParameterPack_t >::value, typenameParameterPack_t::templatevalue_type< N > & >::type get(ParameterPack_t &pp)
Get an element from a parameter pack.
Definition Cabana_ParameterPack.hpp:129
General sequence of types for SoA and AoSoA member data.
Definition Cabana_MemberTypes.hpp:28
Definition Cabana_SoA.hpp:32
KOKKOS_FORCEINLINE_FUNCTION Tuple(Tuple &&t)
Copy constructor.
Definition Cabana_Tuple.hpp:164
SoA< MemberTypes< Types... >, 1 > base
Base type.
Definition Cabana_Tuple.hpp:153
KOKKOS_FORCEINLINE_FUNCTION Tuple & operator=(Tuple &&t)
Assignment operator.
Definition Cabana_Tuple.hpp:177
KOKKOS_FORCEINLINE_FUNCTION Tuple(const Tuple &t)
Const copy constructor.
Definition Cabana_Tuple.hpp:158
KOKKOS_FORCEINLINE_FUNCTION Tuple & operator=(const Tuple &t)
Const assignment operator.
Definition Cabana_Tuple.hpp:170
Definition Cabana_Tuple.hpp:32
Tuple static type checker.
Definition Cabana_Tuple.hpp:50