Skip to content
Snippets Groups Projects
Commit a062fb02 authored by Lebrun-Grandie, Damien's avatar Lebrun-Grandie, Damien
Browse files

Add 2nd template argument Tag to Traits::Access

parent 36d66e7e
No related branches found
No related tags found
1 merge request!115Refactor access traits
This commit is part of merge request !115. Comments created here will be created in the context of that merge request.
......@@ -125,7 +125,7 @@ template <typename DeviceType>
template <typename Primitives>
BoundingVolumeHierarchy<DeviceType>::BoundingVolumeHierarchy(
Primitives const &primitives)
: _size(Traits::Access<Primitives>::size(primitives))
: _size(Traits::Access<Primitives, Traits::PrimitivesTag>::size(primitives))
, _internal_and_leaf_nodes(
Kokkos::ViewAllocateWithoutInitializing("internal_and_leaf_nodes"),
_size > 0 ? 2 * _size - 1 : 0)
......
......@@ -172,7 +172,7 @@ template <typename Primitives>
class CalculateBoundingBoxOfTheSceneFunctor
{
public:
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
CalculateBoundingBoxOfTheSceneFunctor(Primitives const &primitives)
: _primitives(primitives)
......@@ -203,7 +203,7 @@ template <typename Primitives>
inline void TreeConstruction<DeviceType>::calculateBoundingBoxOfTheScene(
Primitives const &primitives, Box &scene_bounding_box)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
auto const n = Access::size(primitives);
Kokkos::parallel_reduce(
ARBORX_MARK_REGION("calculate_bounding_box_of_the_scene"),
......@@ -218,7 +218,7 @@ inline void assignMortonCodesDispatch(BoxTag, Primitives const &primitives,
MortonCodes morton_codes,
Box const &scene_bounding_box)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
using ExecutionSpace = typename Access::MemorySpace::execution_space;
auto const n = Access::size(primitives);
Kokkos::parallel_for(ARBORX_MARK_REGION("assign_morton_codes"),
......@@ -237,7 +237,7 @@ inline void assignMortonCodesDispatch(PointTag, Primitives const &primitives,
MortonCodes morton_codes,
Box const &scene_bounding_box)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
using ExecutionSpace = typename Access::MemorySpace::execution_space;
auto const n = Access::size(primitives);
Kokkos::parallel_for(
......@@ -257,7 +257,7 @@ inline void TreeConstruction<DeviceType>::assignMortonCodes(
Kokkos::View<unsigned int *, DeviceType> morton_codes,
Box const &scene_bounding_box)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
auto const n = Access::size(primitives);
ARBORX_ASSERT(morton_codes.extent(0) == n);
......@@ -272,7 +272,7 @@ inline void initializeLeafNodesDispatch(BoxTag, Primitives const &primitives,
Indices permutation_indices,
Nodes leaf_nodes)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
using ExecutionSpace = typename Access::MemorySpace::execution_space;
auto const n = Access::size(primitives);
Kokkos::parallel_for(
......@@ -290,7 +290,7 @@ inline void initializeLeafNodesDispatch(PointTag, Primitives const &primitives,
Indices permutation_indices,
Nodes leaf_nodes)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
using ExecutionSpace = typename Access::MemorySpace::execution_space;
auto const n = Access::size(primitives);
Kokkos::parallel_for(
......@@ -311,7 +311,7 @@ inline void TreeConstruction<DeviceType>::initializeLeafNodes(
Kokkos::View<size_t const *, DeviceType> permutation_indices,
Kokkos::View<Node *, DeviceType> leaf_nodes)
{
using Access = typename Traits::Access<Primitives>;
using Access = typename Traits::Access<Primitives, Traits::PrimitivesTag>;
auto const n = Access::size(primitives);
ARBORX_ASSERT(permutation_indices.extent(0) == n);
......
......@@ -23,14 +23,23 @@ namespace ArborX
namespace Traits
{
template <typename T, typename Enable = void>
struct PrimitivesTag
{
};
struct PredicatesTag
{
};
template <typename T, typename Tag, typename Enable = void>
struct Access
{
};
template <typename View>
struct Access<View, typename std::enable_if<Kokkos::is_view<View>::value &&
View::rank == 1>::type>
template <typename View, typename TTag>
struct Access<View, TTag,
typename std::enable_if<Kokkos::is_view<View>::value &&
View::rank == 1>::type>
{
// Returns a const reference
KOKKOS_FUNCTION static typename View::const_value_type &get(View const &v,
......@@ -45,9 +54,10 @@ struct Access<View, typename std::enable_if<Kokkos::is_view<View>::value &&
using MemorySpace = typename View::memory_space;
};
template <typename View>
struct Access<View, typename std::enable_if<Kokkos::is_view<View>::value &&
View::rank == 2>::type>
template <typename View, typename TTag>
struct Access<View, TTag,
typename std::enable_if<Kokkos::is_view<View>::value &&
View::rank == 2>::type>
{
// Returns by value
KOKKOS_FUNCTION static Point get(View const &v, int i)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment