|
24 | 24 | #include <ArborX_HyperBox.hpp>
|
25 | 25 | #include <ArborX_HyperSphere.hpp>
|
26 | 26 | #include <ArborX_LinearBVH.hpp>
|
| 27 | +#include <ArborX_PredicateHelpers.hpp> |
27 | 28 | #include <ArborX_Sphere.hpp>
|
28 | 29 |
|
29 | 30 | namespace ArborX
|
@@ -52,13 +53,6 @@ struct DBSCANCorePoints
|
52 | 53 | }
|
53 | 54 | };
|
54 | 55 |
|
55 |
| -template <typename Primitives> |
56 |
| -struct PrimitivesWithRadius |
57 |
| -{ |
58 |
| - Primitives _primitives; |
59 |
| - float _r; |
60 |
| -}; |
61 |
| - |
62 | 56 | struct WithinRadiusGetter
|
63 | 57 | {
|
64 | 58 | float _r;
|
@@ -100,31 +94,6 @@ struct MixedBoxPrimitives
|
100 | 94 |
|
101 | 95 | } // namespace Details
|
102 | 96 |
|
103 |
| -template <typename Primitives> |
104 |
| -struct AccessTraits<Details::PrimitivesWithRadius<Primitives>, PredicatesTag> |
105 |
| -{ |
106 |
| - using memory_space = typename Primitives::memory_space; |
107 |
| - using Predicates = Details::PrimitivesWithRadius<Primitives>; |
108 |
| - |
109 |
| - static KOKKOS_FUNCTION size_t size(Predicates const &w) |
110 |
| - { |
111 |
| - return w._primitives.size(); |
112 |
| - } |
113 |
| - static KOKKOS_FUNCTION auto get(Predicates const &w, size_t i) |
114 |
| - { |
115 |
| - auto const &point = w._primitives(i); |
116 |
| - constexpr int dim = |
117 |
| - GeometryTraits::dimension_v<std::decay_t<decltype(point)>>; |
118 |
| - // FIXME reinterpret_cast is dangerous here if access traits return user |
119 |
| - // point structure (e.g., struct MyPoint { float y; float x; }) |
120 |
| - auto const &hyper_point = |
121 |
| - reinterpret_cast<ExperimentalHyperGeometry::Point<dim> const &>(point); |
122 |
| - return attach( |
123 |
| - intersects(ExperimentalHyperGeometry::Sphere<dim>{hyper_point, w._r}), |
124 |
| - (int)i); |
125 |
| - } |
126 |
| -}; |
127 |
| - |
128 | 97 | template <typename Primitives, typename PermuteFilter>
|
129 | 98 | struct AccessTraits<Details::PrimitivesWithRadiusReorderedAndFiltered<
|
130 | 99 | Primitives, PermuteFilter>,
|
@@ -315,8 +284,8 @@ dbscan(ExecutionSpace const &exec_space, Primitives const &primitives,
|
315 | 284 | }
|
316 | 285 | else
|
317 | 286 | {
|
318 |
| - auto const predicates = |
319 |
| - Details::PrimitivesWithRadius<Points>{points, eps}; |
| 287 | + auto const predicates = ArborX::Experimental::attach_indices( |
| 288 | + ArborX::Experimental::make_intersects(points, eps)); |
320 | 289 |
|
321 | 290 | // Determine core points
|
322 | 291 | Kokkos::Profiling::pushRegion("ArborX::DBSCAN::clusters::num_neigh");
|
@@ -437,8 +406,8 @@ dbscan(ExecutionSpace const &exec_space, Primitives const &primitives,
|
437 | 406 | // Perform the queries and build clusters through callback
|
438 | 407 | using CorePoints = Details::CCSCorePoints;
|
439 | 408 | Kokkos::Profiling::pushRegion("ArborX::DBSCAN::clusters::query");
|
440 |
| - auto const predicates = |
441 |
| - Details::PrimitivesWithRadius<Points>{points, eps}; |
| 409 | + auto const predicates = Experimental::attach_indices( |
| 410 | + Experimental::make_intersects(points, eps)); |
442 | 411 | bvh.query(exec_space, predicates,
|
443 | 412 | Details::FDBSCANDenseBoxCallback<UnionFind, CorePoints, Points,
|
444 | 413 | decltype(dense_cell_offsets),
|
@@ -478,8 +447,8 @@ dbscan(ExecutionSpace const &exec_space, Primitives const &primitives,
|
478 | 447 |
|
479 | 448 | // Perform the queries and build clusters through callback
|
480 | 449 | Kokkos::Profiling::pushRegion("ArborX::DBSCAN::clusters::query");
|
481 |
| - auto const predicates = |
482 |
| - Details::PrimitivesWithRadius<Points>{points, eps}; |
| 450 | + auto const predicates = Experimental::attach_indices( |
| 451 | + Experimental::make_intersects(points, eps)); |
483 | 452 | bvh.query(exec_space, predicates,
|
484 | 453 | Details::FDBSCANDenseBoxCallback<UnionFind, CorePoints, Points,
|
485 | 454 | decltype(dense_cell_offsets),
|
|
0 commit comments