MUDA
Loading...
Searching...
No Matches
field_entry_view_vector.inl
1namespace muda
2{
3template <bool IsConst, typename T, FieldEntryLayout Layout, int N>
4class FieldEntryViewBase<IsConst, T, Layout, N, 1>
5 : public FieldEntryViewCore<IsConst, T, Layout, N, 1>
6{
8
9 template <typename U>
10 using auto_const_t = typename Base::template auto_const_t<U>;
11
12 public:
13 using Base::Base;
17 using ElementType = Eigen::Vector<T, N>;
18
19 using ConstVectorMap = typename Base::ConstMatMap;
20 using ThisVectorMap = typename Base::ThisMatMap;
21
22 MUDA_GENERIC auto as_const() const
23 {
24 return ConstView{this->m_core, Base::offset(), Base::size()};
25 }
26
27 MUDA_GENERIC operator ConstView() const { return as_const(); }
28
29 MUDA_GENERIC auto_const_t<T>* data(int i, int comp_j)
30 {
31 return Base::data(i, comp_j);
32 }
33
34 MUDA_GENERIC const T* data(int i, int comp_j) const
35 {
36 return remove_const(this)->data(i, comp_j);
37 }
38
39 MUDA_GENERIC auto subview(int offset) const
40 {
41 return ConstView{this->m_core, this->m_offset + offset, this->m_size - offset};
42 }
43
44 MUDA_GENERIC auto subview(int offset, int size) const
45 {
46 return ConstView{this->m_core, this->m_offset + offset, size};
47 }
48
49 MUDA_GENERIC auto subview(int offset)
50 {
51 return ThisView{this->m_core, this->m_offset + offset, this->m_size - offset};
52 }
53
54 MUDA_GENERIC auto subview(int offset, int size)
55 {
56 return ThisView{this->m_core, this->m_offset + offset, size};
57 }
58
59 /**********************************************************************************
60 * Entry View As Iterator
61 ***********************************************************************************/
62
63 class DummyPointer
64 {
65 ThisVectorMap map;
66
67 public:
68 MUDA_GENERIC DummyPointer(ThisVectorMap map)
69 : map(map)
70 {
71 }
72 MUDA_GENERIC auto operator*() { return map; }
73 };
74
75 // Random Access Iterator Interface
76 using value_type = ElementType;
77 using reference = ThisVectorMap;
78 using pointer = DummyPointer;
79 using iterator_category = std::random_access_iterator_tag;
80 using difference_type = size_t;
81
82 MUDA_GENERIC ThisView operator+(int i)
83 {
84 return ThisView{this->m_core, this->m_offset + i, this->m_size - i, typename Base::AsIterator{}};
85 }
86 MUDA_GENERIC ConstView operator+(int i) const
87 {
88 return remove_const(*this).operator+(i).as_const();
89 }
90 MUDA_GENERIC reference operator*() { return (*this)[0]; }
91
92 MUDA_GENERIC auto operator[](int i)
93 {
94 return ThisVectorMap{data(i, 0), this->m_stride};
95 }
96 MUDA_GENERIC auto operator[](int i) const
97 {
98 return ConstVectorMap{data(i, 0), this->m_stride};
99 }
100};
101
102template <typename T, FieldEntryLayout Layout, int N>
103class CFieldEntryView<T, Layout, N, 1>
104 : public FieldEntryViewBase<true, T, Layout, N, 1>
105{
107
108 public:
109 using Base::Base;
113 using ElementType = typename Base::ElementType;
114
115 MUDA_GENERIC CFieldEntryView(const Base& base)
116 : Base(base)
117 {
118 }
119
120 MUDA_GENERIC auto as_const() const { return *this; }
121 MUDA_GENERIC operator ConstView() const { return as_const(); }
122
123 MUDA_GENERIC auto subview(int offset) const
124 {
125 return ConstView{Base::subview(offset)};
126 }
127
128 MUDA_GENERIC auto subview(int offset, int size) const
129 {
130 return ConstView{Base::subview(offset, size)};
131 }
132
133 MUDA_GENERIC auto subview(int offset)
134 {
135 return ThisView{Base::subview(offset)};
136 }
137
138 MUDA_GENERIC auto subview(int offset, int size)
139 {
140 return ThisView{Base::subview(offset, size)};
141 }
142
143 MUDA_HOST void copy_to(BufferView<ElementType> dst) const;
144};
145
146template <typename T, FieldEntryLayout Layout, int N>
147class FieldEntryView<T, Layout, N, 1>
148 : public FieldEntryViewBase<false, T, Layout, N, 1>
149{
151
152 public:
153 using Base::Base;
157 using ElementType = typename Base::ElementType;
158
159 MUDA_GENERIC FieldEntryView(const Base& base)
160 : Base(base)
161 {
162 }
163
164 MUDA_GENERIC auto as_const() const { return ConstView{Base::as_const()}; }
165 MUDA_GENERIC operator ConstView() const { return as_const(); }
166
167 MUDA_GENERIC auto subview(int offset) const
168 {
169 return ConstView{Base::subview(offset)};
170 }
171
172 MUDA_GENERIC auto subview(int offset, int size) const
173 {
174 return ConstView{Base::subview(offset, size)};
175 }
176
177 MUDA_GENERIC auto subview(int offset)
178 {
179 return ThisView{Base::subview(offset)};
180 }
181
182 MUDA_GENERIC auto subview(int offset, int size)
183 {
184 return ThisView{Base::subview(offset, size)};
185 }
186
187 template <FieldEntryLayout SrcLayout>
188 MUDA_HOST void copy_from(CFieldEntryView<T, SrcLayout, N, 1> src);
189 MUDA_HOST void copy_from(CBufferView<ElementType> src);
190 MUDA_HOST void copy_to(BufferView<ElementType> dst) const
191 {
192 as_const().copy_to(dst);
193 }
194
195 MUDA_HOST void fill(const ElementType& value);
196};
197} // namespace muda
198
199#include <muda/ext/field/field_entry_launch.h>
200
201namespace muda
202{
203template <typename T, FieldEntryLayout Layout, int N>
204template <FieldEntryLayout SrcLayout>
205MUDA_HOST void FieldEntryView<T, Layout, N, 1>::copy_from(CFieldEntryView<T, SrcLayout, N, 1> src)
206{
207 FieldEntryLaunch() //
208 .copy(*this, src)
209 .wait();
210}
211
212template <typename T, FieldEntryLayout Layout, int N>
213MUDA_HOST void CFieldEntryView<T, Layout, N, 1>::copy_to(BufferView<ElementType> dst) const
214{
215 FieldEntryLaunch() //
216 .copy(dst, *this)
217 .wait();
218}
219
220template <typename T, FieldEntryLayout Layout, int N>
221MUDA_HOST void FieldEntryView<T, Layout, N, 1>::copy_from(CBufferView<ElementType> src)
222{
223 FieldEntryLaunch() //
224 .copy(*this, src)
225 .wait();
226}
227
228template <typename T, FieldEntryLayout Layout, int N>
229MUDA_HOST void FieldEntryView<T, Layout, N, 1>::fill(const ElementType& value)
230{
231 FieldEntryLaunch() //
232 .fill(*this, value)
233 .wait();
234}
235} // namespace muda
Definition field_entry_view_vector.inl:105
Definition field_entry_view_matrix.inl:110
Definition field_entry_view_vector.inl:149
Definition field_entry_view_vector.inl:6
Definition field_entry_view_matrix.inl:5
Definition field_entry_view.h:16
Definition field_entry_view_matrix.inl:154