MUDA
Loading...
Searching...
No Matches
field_entry_viewer_matrix.inl
1namespace muda
2{
3template <bool IsConst, typename T, FieldEntryLayout Layout, int M, int N>
4class FieldEntryViewerBase : public FieldEntryViewerCore<IsConst, T, Layout, M, N>
5{
7
8 template <typename U>
9 using auto_const_t = typename Base::template auto_const_t<U>;
10
11 public:
15
16 using ConstMatrixMap = typename Base::ConstMatMap;
17 using ThisMatrixMap = typename Base::ThisMatMap;
18
19 using Base::Base;
20
21 MUDA_GENERIC FieldEntryViewerBase(const Base& base)
22 : Base(base)
23 {
24 }
25
26 MUDA_GENERIC auto as_const() const { return ConstViewer{this->m_core}; }
27 MUDA_GENERIC operator ConstViewer() const { return as_const(); }
28
29 MUDA_GENERIC auto_const_t<T>* data(int i, int row_index, int col_index)
30 {
31 return Base::data(i, row_index, col_index);
32 }
33
34 MUDA_GENERIC const T* data(int i, int row_index, int col_index) const
35 {
36 return remove_const(this)->data(i, row_index, col_index);
37 }
38
39 MUDA_GENERIC auto operator()(int i)
40 {
41 return ThisMatrixMap{data(i, 0, 0), this->m_stride};
42 }
43
44 MUDA_GENERIC auto operator()(int i) const
45 {
46 return ConstMatrixMap{data(i, 0, 0), this->m_stride};
47 }
48};
49
50template <typename T, FieldEntryLayout Layout, int M, int N>
51class CFieldEntryViewer : public FieldEntryViewerBase<true, T, Layout, M, N>
52{
54
55 MUDA_VIEWER_COMMON_NAME(CFieldEntryViewer);
56
57 public:
58 using Base::Base;
62
63 MUDA_GENERIC CFieldEntryViewer(const Base& base)
64 : Base(base)
65 {
66 }
67
68 MUDA_GENERIC auto as_const() const { return *this; }
69 MUDA_GENERIC operator ConstViewer() const { return as_const(); }
70
71 using Base::operator();
72};
73
74
75template <typename T, FieldEntryLayout Layout, int M, int N>
76class FieldEntryViewer : public FieldEntryViewerBase<false, T, Layout, M, N>
77{
79
80 MUDA_VIEWER_COMMON_NAME(FieldEntryViewer);
81
82 public:
83 using Base::Base;
87
88 MUDA_GENERIC FieldEntryViewer(const Base& base)
89 : Base(base)
90 {
91 }
92
93 MUDA_GENERIC ConstViewer as_const() const
94 {
95 return ConstViewer{Base::as_const()};
96 }
97 MUDA_GENERIC operator ConstViewer() const { return as_const(); }
98
99 using Base::operator();
100};
101} // namespace muda
Definition field_entry_viewer_matrix.inl:52
Definition field_entry_viewer_matrix.inl:5
Definition field_entry_viewer.h:42
Definition field_entry_viewer_matrix.inl:77