Skip to content

Commit 44e5f13

Browse files
authored
Merge pull request #1255 from aprokop/fix_predicate_helpers
2 parents f94e337 + 2cb560f commit 44e5f13

2 files changed

Lines changed: 40 additions & 4 deletions

File tree

src/spatial/detail/ArborX_PredicateHelpers.hpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class PrimitivesIntersect
2828
using Primitives = Details::AccessValues<UserPrimitives>;
2929

3030
public:
31+
using memory_space = typename Primitives::memory_space;
32+
3133
KOKKOS_FUNCTION PrimitivesIntersect(UserPrimitives const &primitives)
3234
: _primitives(primitives)
3335
{}
@@ -41,6 +43,8 @@ class PrimitivesOrderedIntersect
4143
using Primitives = Details::AccessValues<UserPrimitives>;
4244

4345
public:
46+
using memory_space = typename Primitives::memory_space;
47+
4448
KOKKOS_FUNCTION PrimitivesOrderedIntersect(UserPrimitives const &primitives)
4549
: _primitives(primitives)
4650
{}
@@ -57,6 +61,8 @@ class PrimitivesWithRadius
5761
using Coordinate = typename GeometryTraits::coordinate_type<Point>::type;
5862

5963
public:
64+
using memory_space = typename Primitives::memory_space;
65+
6066
PrimitivesWithRadius(UserPrimitives const &user_primitives, Coordinate r)
6167
: _primitives(user_primitives)
6268
, _r(r)
@@ -72,6 +78,8 @@ class PrimitivesNearestK
7278
using Primitives = Details::AccessValues<UserPrimitives>;
7379

7480
public:
81+
using memory_space = typename Primitives::memory_space;
82+
7583
PrimitivesNearestK(UserPrimitives const &user_primitives, int k)
7684
: _primitives(user_primitives)
7785
, _k(k)
@@ -119,7 +127,7 @@ struct AccessTraits<Experimental::PrimitivesIntersect<Primitives>>
119127
using Self = Experimental::PrimitivesIntersect<Primitives>;
120128

121129
public:
122-
using memory_space = typename Primitives::memory_space;
130+
using memory_space = typename Self::memory_space;
123131
using size_type = typename memory_space::size_type;
124132

125133
static KOKKOS_FUNCTION size_type size(Self const &x)
@@ -139,7 +147,7 @@ struct AccessTraits<Experimental::PrimitivesOrderedIntersect<Primitives>>
139147
using Self = Experimental::PrimitivesOrderedIntersect<Primitives>;
140148

141149
public:
142-
using memory_space = typename Primitives::memory_space;
150+
using memory_space = typename Self::memory_space;
143151
using size_type = typename memory_space::size_type;
144152

145153
static KOKKOS_FUNCTION size_type size(Self const &x)
@@ -159,7 +167,7 @@ struct AccessTraits<Experimental::PrimitivesWithRadius<Primitives>>
159167
using Self = Experimental::PrimitivesWithRadius<Primitives>;
160168

161169
public:
162-
using memory_space = typename Primitives::memory_space;
170+
using memory_space = typename Self::memory_space;
163171
using size_type = typename memory_space::size_type;
164172

165173
static KOKKOS_FUNCTION size_type size(Self const &x)
@@ -184,7 +192,7 @@ struct AccessTraits<Experimental::PrimitivesNearestK<Primitives>>
184192
using Self = Experimental::PrimitivesNearestK<Primitives>;
185193

186194
public:
187-
using memory_space = typename Primitives::memory_space;
195+
using memory_space = typename Self::memory_space;
188196
using size_type = typename memory_space::size_type;
189197

190198
static KOKKOS_FUNCTION size_type size(Self const &x)

test/tstPredicateHelpers.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ struct Placeholder
3030
int n;
3131
};
3232

33+
struct PlaceholderWithoutMemory
34+
{
35+
int n;
36+
};
37+
3338
template <typename MemorySpace>
3439
struct ArborX::AccessTraits<Placeholder<MemorySpace>>
3540
{
@@ -43,6 +48,19 @@ struct ArborX::AccessTraits<Placeholder<MemorySpace>>
4348
}
4449
};
4550

51+
template <>
52+
struct ArborX::AccessTraits<PlaceholderWithoutMemory>
53+
{
54+
using Self = PlaceholderWithoutMemory;
55+
using memory_space = Kokkos::DefaultExecutionSpace::memory_space;
56+
57+
KOKKOS_FUNCTION static auto size(Self const &self) { return self.n; }
58+
KOKKOS_FUNCTION static auto get(Self const &, int i)
59+
{
60+
return ArborX::Point<2>{(float)i, (float)i};
61+
}
62+
};
63+
4664
struct IntersectsTag
4765
{};
4866
struct IntersectsWithRadiusTag
@@ -131,22 +149,32 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(make_predicates, DeviceType, ARBORX_DEVICE_TYPES)
131149
v.data(), v.size()));
132150

133151
Placeholder<MemorySpace> points_access{3};
152+
PlaceholderWithoutMemory points_access_nomem{3};
134153

135154
BOOST_TEST(checkPredicates(IntersectsTag{}, space,
136155
make_intersects(points_view), points_view));
137156
BOOST_TEST(checkPredicates(IntersectsTag{}, space,
138157
make_intersects(points_access), points_access));
158+
BOOST_TEST(checkPredicates(IntersectsTag{}, space,
159+
make_intersects(points_access_nomem),
160+
points_access_nomem));
139161

140162
float r = 1.f;
141163
BOOST_TEST(checkPredicates(IntersectsWithRadiusTag{}, space,
142164
make_intersects(points_view, r), points_view, r));
143165
BOOST_TEST(checkPredicates(IntersectsWithRadiusTag{}, space,
144166
make_intersects(points_access, r), points_access,
145167
r));
168+
BOOST_TEST(checkPredicates(IntersectsWithRadiusTag{}, space,
169+
make_intersects(points_access_nomem, r),
170+
points_access_nomem, r));
146171

147172
int const k = 3;
148173
BOOST_TEST(checkPredicates(NearestTag{}, space, make_nearest(points_view, k),
149174
points_view, k));
150175
BOOST_TEST(checkPredicates(NearestTag{}, space,
151176
make_nearest(points_access, k), points_access, k));
177+
BOOST_TEST(checkPredicates(NearestTag{}, space,
178+
make_nearest(points_access_nomem, k),
179+
points_access_nomem, k));
152180
}

0 commit comments

Comments
 (0)