9#include <sycl/sycl.hpp>
11#include <dr/sp/device_ref.hpp>
16 requires(std::is_trivially_copyable_v<T> || std::is_void_v<T>)
20 using difference_type = std::ptrdiff_t;
24 using iterator_category = std::random_access_iterator_tag;
33 device_ptr(std::nullptr_t) noexcept : pointer_(
nullptr) {}
35 device_ptr &operator=(std::nullptr_t)
noexcept {
41 requires(!std::is_void_v<T>)
47 requires(!std::is_void_v<T>)
53 requires(!std::is_const_v<T>)
58 bool operator==(std::nullptr_t)
const noexcept {
return pointer_ ==
nullptr; }
59 bool operator!=(std::nullptr_t)
const noexcept {
return pointer_ !=
nullptr; }
61 bool operator==(
const device_ptr &)
const noexcept =
default;
62 bool operator!=(
const device_ptr &)
const noexcept =
default;
64 pointer operator+(difference_type offset)
const noexcept {
65 return pointer(pointer_ + offset);
67 pointer operator-(difference_type offset)
const noexcept {
68 return pointer(pointer_ - offset);
72 requires(!std::is_const_v<T>)
74 return pointer_ - other.pointer_;
76 difference_type operator-(
pointer other)
const noexcept {
77 return pointer_ - other.pointer_;
81 return pointer_ < other.pointer_;
84 return pointer_ > other.pointer_;
87 return pointer_ <= other.pointer_;
90 return pointer_ >= other.pointer_;
93 pointer &operator++()
noexcept {
98 pointer operator++(
int)
noexcept {
104 pointer &operator--()
noexcept {
109 pointer operator--(
int)
noexcept {
115 pointer &operator+=(difference_type offset)
noexcept {
120 pointer &operator-=(difference_type offset)
noexcept {
127 reference operator[](difference_type offset)
const noexcept {
131 T *get_raw_pointer()
const noexcept {
return pointer_; }
133 friend pointer operator+(difference_type n,
pointer iter) {
return iter + n; }
135 T *local()
const noexcept {
return pointer_; }
Definition: device_ptr.hpp:17
Definition: device_ref.hpp:15