21 #if __cplusplus >= 201703L
23 template <memory_order>
struct order_tag_t {
24 explicit order_tag_t() =
default;
26 inline constexpr order_tag_t<memory_order::relaxed> relaxed_order{};
27 inline constexpr order_tag_t<memory_order::acquire> acquire_order{};
28 inline constexpr order_tag_t<memory_order::release> release_order{};
29 inline constexpr order_tag_t<memory_order::acq_rel> acq_rel_order{};
30 inline constexpr order_tag_t<memory_order::seq_cst> seq_cst_order{};
32 template <memory_scope>
struct scope_tag_t {
33 explicit scope_tag_t() =
default;
35 inline constexpr scope_tag_t<memory_scope::work_item> work_item_scope{};
36 inline constexpr scope_tag_t<memory_scope::sub_group> sub_group_scope{};
37 inline constexpr scope_tag_t<memory_scope::work_group> work_group_scope{};
38 inline constexpr scope_tag_t<memory_scope::device> device_scope{};
39 inline constexpr scope_tag_t<memory_scope::system> system_scope{};
48 :
public accessor<DataT, Dimensions, access::mode::read_write, AccessTarget,
49 IsPlaceholder, ext::oneapi::accessor_property_list<>> {
57 using AccessorT::getQualifiedPtr;
63 using AccessorT::AdjustedDim;
70 using AccessorT::AccessorT;
72 #if __cplusplus >= 201703L
74 template <
typename T = DataT,
int Dims =
Dimensions,
typename AllocatorT,
80 template <
typename T = DataT,
int Dims =
Dimensions,
typename AllocatorT,
83 handler &CommandGroupHandler, order_tag_t<Order>,
85 : atomic_accessor(BufferRef, CommandGroupHandler, PropertyList) {}
90 template <
int Dims = Dimensions>
93 return reference(getQualifiedPtr()[LinearIndex]);
96 template <
int Dims = Dimensions>
100 return reference(getQualifiedPtr()[LinearIndex]);
103 template <
int Dims = Dimensions>
107 return reference(getQualifiedPtr()[LinearIndex]);
111 #if __cplusplus >= 201703L
113 template <
typename DataT,
int Dimensions,
typename AllocatorT,
118 access::placeholder::true_t>;
120 template <
typename DataT,
int Dimensions,
typename AllocatorT,
125 access::placeholder::false_t>;