39 inline namespace _V1 {
41 template <
typename AccessorDataT,
int AccessorDimensions,
60 return *(MDataPtr + getAbsoluteOffsetToBuffer());
122 return MLinearId < Other.MLinearId;
128 return !(*
this > Other);
132 return !(*
this < Other);
136 return MLinearId == Other.MLinearId;
140 return !(*
this == Other);
144 return MLinearId - Rhs.MLinearId;
148 template <
typename AccessorDataT,
int AccessorDimensions,
153 DataT *MDataPtr =
nullptr;
159 size_t MLinearId = 0;
169 bool MAccessorIsRanged =
false;
219 size_t MStaticOffset = 0;
220 size_t MPerRowOffset = 0;
221 size_t MPerSliceOffset = 0;
226 size_t MSliceSize = 0;
236 size_t getAbsoluteOffsetToBuffer()
const {
249 size_t AbsoluteId = MLinearId + MStaticOffset;
252 size_t Remaining = MLinearId;
254 AbsoluteId += MPerSliceOffset * (Remaining / MSliceSize);
255 Remaining %= MSliceSize;
259 AbsoluteId += MPerRowOffset * (Remaining / MRowSize);
260 Remaining %= MRowSize;
268 : MDataPtr(DataPtr) {
276 MRowSize = AccessRange[XIndex];
278 MSliceSize = AccessRange[YIndex] * MRowSize;
281 MAccessorIsRanged =
true;
284 if (AccessRange[I] != MemoryRange[I])
285 MAccessorIsRanged =
true;
288 if (MAccessorIsRanged) {
291 MemoryRange[XIndex] * MemoryRange[YIndex] * Offset[ZIndex];
293 MemoryRange[XIndex] * MemoryRange[YIndex] - MSliceSize;
297 MStaticOffset += MemoryRange[XIndex] * Offset[YIndex];
298 MPerRowOffset = MemoryRange[XIndex] - MRowSize;
304 MBegin = Offset[XIndex];
306 MStaticOffset += Offset[XIndex];
309 MEnd = MBegin + AccessRange.size();
317 It.MLinearId = It.MBegin;
322 const range<Dimensions> &MemoryRange,
323 const range<Dimensions> &AccessRange,
324 const id<Dimensions> &Offset) {
326 It.MLinearId = It.MEnd;
336 os <<
"accessor_iterator {\n";
337 os <<
"\tMLinearId: " << it.MLinearId <<
"\n";
338 os <<
"\tMEnd: " << it.MEnd <<
"\n";
339 os <<
"\tMStaticOffset: " << it.MStaticOffset <<
"\n";
340 os <<
"\tMPerRowOffset: " << it.MPerRowOffset <<
"\n";
341 os <<
"\tMPerSliceOffset: " << it.MPerSliceOffset <<
"\n";
342 os <<
"\tMRowSize: " << it.MRowSize <<
"\n";
343 os <<
"\tMSliceSize: " << it.MSliceSize <<
"\n";
344 os <<
"\tMAccessorIsRanged: " << it.MAccessorIsRanged <<
"\n";
accessor_iterator & operator-=(difference_type N)
accessor_iterator()=default
accessor_iterator operator++(int)
reference operator*() const
bool operator==(const accessor_iterator &Other) const
accessor_iterator & operator+=(difference_type N)
accessor_iterator operator-(difference_type N) const
accessor_iterator operator+(difference_type N) const
bool operator>=(const accessor_iterator &Other) const
friend std::ostream & operator<<(std::ostream &os, const accessor_iterator &it)
reference & operator[](difference_type N) const
std::ptrdiff_t difference_type
friend accessor_iterator operator+(difference_type N, const accessor_iterator &Rhs)
bool operator<(const accessor_iterator &Other) const
accessor_iterator & operator--()
accessor_iterator operator--(int)
difference_type operator-(const accessor_iterator &Rhs) const
bool operator>(const accessor_iterator &Other) const
bool operator!=(const accessor_iterator &Other) const
accessor_iterator & operator++()
std::random_access_iterator_tag iterator_category
bool operator<=(const accessor_iterator &Other) const
A unique identifier of an item in an index space.
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor accessor(buffer< DataT, Dimensions, AllocatorT >) -> accessor< DataT, Dimensions, access::mode::read_write, target::device, access::placeholder::true_t >
Buffer accessor.
constexpr if(sizeof(T)==8)
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS IsPlaceholder
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode