11 #include <muda/viewer/viewer_base.h> 25 template <
bool IsConst,
typename T>
30 using auto_const_t =
typename Base::template auto_const_t<U>;
40 auto_const_t<T>* m_data;
46 MUDA_GENERIC
Dense1DBase() MUDA_NOEXCEPT : m_data(
nullptr) {}
48 MUDA_GENERIC
Dense1DBase(auto_const_t<T>* p,
int dim) MUDA_NOEXCEPT : m_data(p),
53 MUDA_GENERIC
auto as_const()
const MUDA_NOEXCEPT
58 MUDA_GENERIC
operator ConstViewer()
const MUDA_NOEXCEPT
64 MUDA_GENERIC auto_const_t<T>& operator()(
int x) MUDA_NOEXCEPT
67 return m_data[map(x)];
70 MUDA_GENERIC
const T& operator()(
int x)
const MUDA_NOEXCEPT
72 return remove_const(*
this)(x);
75 MUDA_GENERIC auto_const_t<T>* data() MUDA_NOEXCEPT {
return m_data; }
76 MUDA_GENERIC
const T* data()
const MUDA_NOEXCEPT {
return m_data; }
79 MUDA_GENERIC
int total_size()
const MUDA_NOEXCEPT {
return m_dim; }
80 MUDA_GENERIC
int dim()
const MUDA_NOEXCEPT {
return m_dim; }
82 MUDA_GENERIC
ThisViewer subview(
int offset) MUDA_NOEXCEPT
84 auto size = this->m_dim - offset;
85 if constexpr(DEBUG_VIEWER)
88 MUDA_KERNEL_ERROR(
"Dense1D[%s:%s]: subview out of range, offset=%d size=%d m_dim=(%d)",
95 return ThisViewer{this->m_data + offset, size};
98 MUDA_GENERIC
ThisViewer subview(
int offset,
int size) MUDA_NOEXCEPT
100 if constexpr(DEBUG_VIEWER)
102 if(offset < 0 || offset + size > m_dim)
103 MUDA_KERNEL_ERROR(
"Dense1D[%s:%s]: subview out of range, offset=%d size=%d m_dim=(%d)",
110 return ThisViewer{this->m_data + offset, size};
113 MUDA_GENERIC
ConstViewer subview(
int offset)
const MUDA_NOEXCEPT
115 return remove_const(*this).subview(offset).as_const();
118 MUDA_GENERIC
ConstViewer subview(
int offset,
int size)
const MUDA_NOEXCEPT
120 return remove_const(*this).subview(offset, size).as_const();
124 MUDA_INLINE MUDA_GENERIC
void check()
const MUDA_NOEXCEPT
126 if constexpr(DEBUG_VIEWER)
127 if(m_data ==
nullptr)
128 MUDA_KERNEL_ERROR(
"Dense1D[%s:%s]: m_data is null",
130 this->kernel_name());
133 MUDA_GENERIC
int map(
int x)
const MUDA_NOEXCEPT
135 if constexpr(DEBUG_VIEWER)
136 if(!(x >= 0 && x < m_dim))
137 MUDA_KERNEL_ERROR(
"Dense1D[%s:%s]: out of range, index=(%d) m_dim=(%d)",
146 template <
typename T>
149 template <
typename T>
153 template <
typename T>
159 template <
typename T>
166 template <
typename T>
167 MUDA_INLINE MUDA_GENERIC
auto make_cdense_1d(
const T* data,
int dimx) MUDA_NOEXCEPT
172 template <
typename T,
int N>
173 MUDA_INLINE MUDA_GENERIC
auto make_cdense_1d(
const T (&data)[N]) MUDA_NOEXCEPT
178 template <
typename T>
179 MUDA_INLINE MUDA_GENERIC
auto make_dense_1d(T* data,
int dimx) MUDA_NOEXCEPT
184 template <
typename T,
int N>
185 MUDA_INLINE MUDA_GENERIC
auto make_dense_1d(T (&data)[N]) MUDA_NOEXCEPT
Definition: type_modifier.h:21
Definition: type_modifier.h:27
Definition: viewer_base.h:21
Definition: dense_1d.h:26