@@ -173,6 +173,7 @@ namespace sycl {
173
173
template <typename T, access::address_space addressSpace =
174
174
access::address_space::global_space>
175
175
class atomic {
176
+ friend class atomic <T, access::address_space::global_space>;
176
177
static_assert (detail::IsValidAtomicType<T>::value,
177
178
" Invalid SYCL atomic type. Valid types are: int, "
178
179
" unsigned int, long, unsigned long, long long, unsigned "
@@ -198,12 +199,6 @@ class atomic {
198
199
" T and pointerT must be same size" );
199
200
}
200
201
201
- #ifdef __SYCL_DEVICE_ONLY__
202
- AtomicPtrType *getPtr () const { return Ptr; }
203
- #else
204
- std::atomic<T> *getPtr () const { return Ptr; }
205
- #endif
206
-
207
202
// Create atomic in global_space with one from global_device_space
208
203
template <access::address_space _Space = addressSpace,
209
204
typename = typename std::enable_if<
@@ -229,6 +224,14 @@ class atomic {
229
224
#endif
230
225
}
231
226
227
+ private:
228
+ #ifdef __SYCL_DEVICE_ONLY__
229
+ AtomicPtrType *getPtr () const { return Ptr; }
230
+ #else
231
+ std::atomic<T> *getPtr () const { return Ptr; }
232
+ #endif
233
+
234
+ public:
232
235
void store (T Operand, memory_order Order = memory_order::relaxed) {
233
236
__spirv_AtomicStore (
234
237
Ptr, SpirvScope, detail::getSPIRVMemorySemanticsMask (Order), Operand);
0 commit comments