Skip to content
Snippets Groups Projects

Particle Data Structure

Merged Slattery, Stuart requested to merge (removed):particle_api into master
Compare and Show latest version
1 file
+ 59
1
Compare changes
  • Side-by-side
  • Inline
@@ -29,6 +29,11 @@ class AoSoA
using struct_member_array_type =
typename ArrayTypeAtIndex<I,array_size,Types...>::return_type;
// Struct member array const return type at a given index I.
template<std::size_t I>
using struct_member_const_array_type =
typename std::add_const<struct_member_array_type<I> >::type;
// Struct member array data type at a given index I.
template<std::size_t I>
using struct_member_data_type =
@@ -42,7 +47,12 @@ class AoSoA
// Struct member array element reference type at a given index I.
template<std::size_t I>
using struct_member_reference_type =
typename std::add_lvalue_reference<struct_member_value_type<I>>::type;
typename std::add_lvalue_reference<struct_member_value_type<I> >::type;
// Struct member array element const reference type at a given index I.
template<std::size_t I>
using struct_member_const_reference_type =
typename std::add_const<struct_member_reference_type<I> >::type;
public:
@@ -154,6 +164,12 @@ class AoSoA
return getStructMember<I>( _structs[idx.s()] );
}
template<std::size_t I>
inline struct_member_const_array_type<I> array( const Index& idx ) const
{
return getStructMember<I>( _structs[idx.s()] );
}
// Access the data value at a given struct member index and offset index
// for Rank 0 data.
template<std::size_t I>
@@ -165,6 +181,15 @@ class AoSoA
return array<I>(idx)[idx.i()];
}
template<std::size_t I>
inline
typename std::enable_if<(0==std::rank<struct_member_data_type<I> >::value),
struct_member_const_reference_type<I> >::type
get( const Index& idx ) const
{
return array<I>(idx)[idx.i()];
}
// Access the data value at a given struct member index and offset index
// for Rank 1 data.
template<std::size_t I>
@@ -177,6 +202,16 @@ class AoSoA
return array<I>(idx)[idx.i()][d0];
}
template<std::size_t I>
inline
typename std::enable_if<(1==std::rank<struct_member_data_type<I> >::value),
struct_member_const_reference_type<I> >::type
get( const Index& idx,
const int d0 ) const
{
return array<I>(idx)[idx.i()][d0];
}
// Access the data value at a given struct member index and offset index
// for Rank 2 data.
template<std::size_t I>
@@ -190,6 +225,17 @@ class AoSoA
return array<I>(idx)[idx.i()][d0][d1];
}
template<std::size_t I>
inline
typename std::enable_if<(2==std::rank<struct_member_data_type<I> >::value),
struct_member_const_reference_type<I> >::type
get( const Index& idx,
const int d0,
const int d1 ) const
{
return array<I>(idx)[idx.i()][d0][d1];
}
// Access the data value at a given struct member index and offset index
// for Rank 3 data.
template<std::size_t I>
@@ -204,6 +250,18 @@ class AoSoA
return array<I>(idx)[idx.i()][d0][d1][d2];
}
template<std::size_t I>
inline
typename std::enable_if<(3==std::rank<struct_member_data_type<I> >::value),
struct_member_const_reference_type<I> >::type
get( const Index& idx,
const int d0,
const int d1,
const int d2 ) const
{
return array<I>(idx)[idx.i()][d0][d1][d2];
}
private:
// Total size of the array.
Loading