diff --git a/src/details/ArborX_DetailsHalfTraversal.hpp b/src/details/ArborX_DetailsHalfTraversal.hpp index bf4e8a49ec..13a4299fb5 100644 --- a/src/details/ArborX_DetailsHalfTraversal.hpp +++ b/src/details/ArborX_DetailsHalfTraversal.hpp @@ -62,9 +62,9 @@ struct HalfTraversal { bool const is_leaf = HappyTreeFriends::isLeaf(_bvh, node); - if (predicate((is_leaf ? HappyTreeFriends::getIndexable(_bvh, node) - : HappyTreeFriends::getInternalBoundingVolume( - _bvh, node)))) + if (is_leaf ? predicate(HappyTreeFriends::getIndexable(_bvh, node)) + : predicate(HappyTreeFriends::getInternalBoundingVolume( + _bvh, node))) { if (is_leaf) { diff --git a/src/details/ArborX_DetailsHappyTreeFriends.hpp b/src/details/ArborX_DetailsHappyTreeFriends.hpp index ef1f14b6a4..c28bf994be 100644 --- a/src/details/ArborX_DetailsHappyTreeFriends.hpp +++ b/src/details/ArborX_DetailsHappyTreeFriends.hpp @@ -68,9 +68,6 @@ struct HappyTreeFriends #endif getIndexable(BVH const &bvh, int i) { - static_assert( - std::is_same_v); return bvh._indexable_getter(getValue(bvh, i)); } diff --git a/src/details/ArborX_DetailsTreeConstruction.hpp b/src/details/ArborX_DetailsTreeConstruction.hpp index 7ac6403a96..cbda051b4f 100644 --- a/src/details/ArborX_DetailsTreeConstruction.hpp +++ b/src/details/ArborX_DetailsTreeConstruction.hpp @@ -250,10 +250,11 @@ class GenerateHierarchy // thread. // NOTE we need acquire semantics at the device scope Kokkos::load_fence(); - expand(bounding_volume, - right_child_is_leaf - ? _indexable_getter(_leaf_nodes(right_child).value) - : _internal_nodes(right_child).bounding_volume); + if (right_child_is_leaf) + expand(bounding_volume, + _indexable_getter(_leaf_nodes(right_child).value)); + else + expand(bounding_volume, _internal_nodes(right_child).bounding_volume); } else { @@ -273,10 +274,11 @@ class GenerateHierarchy delta_left = delta(range_left - 1); Kokkos::load_fence(); - expand(bounding_volume, - left_child_is_leaf - ? _indexable_getter(_leaf_nodes(left_child).value) - : _internal_nodes(left_child).bounding_volume); + if (left_child_is_leaf) + expand(bounding_volume, + _indexable_getter(_leaf_nodes(left_child).value)); + else + expand(bounding_volume, _internal_nodes(left_child).bounding_volume); if (!left_child_is_leaf) left_child = internalIndex(left_child); diff --git a/src/details/ArborX_DetailsTreeTraversal.hpp b/src/details/ArborX_DetailsTreeTraversal.hpp index 0299c1c3df..ffc6e0c2e3 100644 --- a/src/details/ArborX_DetailsTreeTraversal.hpp +++ b/src/details/ArborX_DetailsTreeTraversal.hpp @@ -94,9 +94,9 @@ struct TreeTraversal { bool const is_leaf = HappyTreeFriends::isLeaf(_bvh, node); - if (predicate((is_leaf ? HappyTreeFriends::getIndexable(_bvh, node) - : HappyTreeFriends::getInternalBoundingVolume( - _bvh, node)))) + if (is_leaf ? predicate(HappyTreeFriends::getIndexable(_bvh, node)) + : predicate(HappyTreeFriends::getInternalBoundingVolume( + _bvh, node))) { if (is_leaf) { @@ -260,10 +260,10 @@ struct TreeTraversal auto &bvh = _bvh; auto const distance = [&predicate, &bvh](int j) { - return predicate.distance( - HappyTreeFriends::isLeaf(bvh, j) - ? HappyTreeFriends::getIndexable(bvh, j) - : HappyTreeFriends::getInternalBoundingVolume(bvh, j)); + return HappyTreeFriends::isLeaf(bvh, j) + ? predicate.distance(HappyTreeFriends::getIndexable(bvh, j)) + : predicate.distance( + HappyTreeFriends::getInternalBoundingVolume(bvh, j)); }; constexpr int SENTINEL = -1; @@ -469,10 +469,10 @@ struct TreeTraversal