27 template <
bool OtherIsConst,
typename U>
31 static_assert(!std::is_const_v<T>,
"Ty must be non-const");
37 using ThisViewer = std::conditional_t<IsConst, CViewer, Viewer>;
40 using auto_const_t =
typename Base::template auto_const_t<U>;
43 auto_const_t<T>* m_data =
nullptr;
52 MUDA_GENERIC
BufferViewT(auto_const_t<T>* data,
size_t offset,
size_t size) MUDA_NOEXCEPT;
54 MUDA_GENERIC
BufferViewT(auto_const_t<T>* data,
size_t size) MUDA_NOEXCEPT;
56 template <
bool OtherIsConst>
58 MUDA_REQUIRES(!OtherIsConst);
60 MUDA_GENERIC
ConstView as_const()
const MUDA_NOEXCEPT;
62 MUDA_GENERIC auto_const_t<T>* data()
const MUDA_NOEXCEPT;
64 MUDA_GENERIC auto_const_t<T>* data(
size_t i)
const MUDA_NOEXCEPT;
66 MUDA_GENERIC auto_const_t<T>* origin_data()
const MUDA_NOEXCEPT;
68 MUDA_GENERIC
ThisView subview(
size_t offset,
size_t size = ~0)
const MUDA_NOEXCEPT;
70 MUDA_GENERIC ThisViewer viewer()
const MUDA_NOEXCEPT;
72 MUDA_GENERIC
CViewer cviewer()
const MUDA_NOEXCEPT;
74 MUDA_GENERIC
size_t size()
const MUDA_NOEXCEPT {
return m_size; }
76 MUDA_GENERIC
size_t offset()
const MUDA_NOEXCEPT {
return m_offset; }
78 MUDA_GENERIC auto_const_t<T>& operator[](
size_t i)
const MUDA_NOEXCEPT;
81 MUDA_REQUIRES(!IsConst);
83 MUDA_HOST
void fill(
const T& value)
const MUDA_REQUIRES(!IsConst);
85 MUDA_HOST
void copy_from(
const T* host)
const MUDA_REQUIRES(!IsConst);
87 MUDA_HOST
void copy_to(T* host)
const;
97 using iterator_category = std::random_access_iterator_tag;
98 using difference_type = size_t;
100 MUDA_GENERIC
ThisView operator+(
int i)
const MUDA_NOEXCEPT;
101 MUDA_GENERIC reference operator*()
const MUDA_NOEXCEPT;
102 MUDA_GENERIC auto_const_t<T>& operator[](
int i)
const MUDA_NOEXCEPT;