Chris@49
|
1 // Copyright (C) 2012 Conrad Sanderson
|
Chris@49
|
2 //
|
Chris@49
|
3 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
6
|
Chris@49
|
7
|
Chris@49
|
8 //! \addtogroup subview_each
|
Chris@49
|
9 //! @{
|
Chris@49
|
10
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13 template<typename parent, unsigned int mode>
|
Chris@49
|
14 class subview_each_common
|
Chris@49
|
15 {
|
Chris@49
|
16 public:
|
Chris@49
|
17
|
Chris@49
|
18 typedef typename parent::elem_type eT;
|
Chris@49
|
19
|
Chris@49
|
20
|
Chris@49
|
21 protected:
|
Chris@49
|
22
|
Chris@49
|
23 parent& p;
|
Chris@49
|
24
|
Chris@49
|
25 arma_inline subview_each_common(parent& in_p);
|
Chris@49
|
26
|
Chris@49
|
27 arma_inline const Mat<typename parent::elem_type>& get_mat_ref_helper(const Mat <typename parent::elem_type>& X) const;
|
Chris@49
|
28 arma_inline const Mat<typename parent::elem_type>& get_mat_ref_helper(const subview<typename parent::elem_type>& X) const;
|
Chris@49
|
29
|
Chris@49
|
30 arma_inline const Mat<typename parent::elem_type>& get_mat_ref() const;
|
Chris@49
|
31
|
Chris@49
|
32 inline void check_size(const Mat<typename parent::elem_type>& A) const;
|
Chris@49
|
33
|
Chris@49
|
34 arma_cold inline const std::string incompat_size_string(const Mat<typename parent::elem_type>& A) const;
|
Chris@49
|
35
|
Chris@49
|
36
|
Chris@49
|
37 private:
|
Chris@49
|
38
|
Chris@49
|
39 subview_each_common();
|
Chris@49
|
40 };
|
Chris@49
|
41
|
Chris@49
|
42
|
Chris@49
|
43
|
Chris@49
|
44
|
Chris@49
|
45 template<typename parent, unsigned int mode>
|
Chris@49
|
46 class subview_each1 : public subview_each_common<parent, mode>
|
Chris@49
|
47 {
|
Chris@49
|
48 protected:
|
Chris@49
|
49
|
Chris@49
|
50 arma_inline subview_each1(parent& in_p);
|
Chris@49
|
51
|
Chris@49
|
52
|
Chris@49
|
53 public:
|
Chris@49
|
54
|
Chris@49
|
55 typedef typename parent::elem_type eT;
|
Chris@49
|
56
|
Chris@49
|
57 inline ~subview_each1();
|
Chris@49
|
58
|
Chris@49
|
59 // deliberately returning void
|
Chris@49
|
60 template<typename T1> inline void operator= (const Base<eT,T1>& x);
|
Chris@49
|
61 template<typename T1> inline void operator+= (const Base<eT,T1>& x);
|
Chris@49
|
62 template<typename T1> inline void operator-= (const Base<eT,T1>& x);
|
Chris@49
|
63 template<typename T1> inline void operator%= (const Base<eT,T1>& x);
|
Chris@49
|
64 template<typename T1> inline void operator/= (const Base<eT,T1>& x);
|
Chris@49
|
65
|
Chris@49
|
66
|
Chris@49
|
67 private:
|
Chris@49
|
68
|
Chris@49
|
69 friend class Mat<eT>;
|
Chris@49
|
70 friend class subview<eT>;
|
Chris@49
|
71
|
Chris@49
|
72 subview_each1();
|
Chris@49
|
73 };
|
Chris@49
|
74
|
Chris@49
|
75
|
Chris@49
|
76
|
Chris@49
|
77 template<typename parent, unsigned int mode, typename TB>
|
Chris@49
|
78 class subview_each2 : public subview_each_common<parent, mode>
|
Chris@49
|
79 {
|
Chris@49
|
80 protected:
|
Chris@49
|
81
|
Chris@49
|
82 const Base<uword, TB>& base_indices;
|
Chris@49
|
83
|
Chris@49
|
84 inline subview_each2(parent& in_p, const Base<uword, TB>& in_indices);
|
Chris@49
|
85
|
Chris@49
|
86 inline void check_indices(const Mat<uword>& indices) const;
|
Chris@49
|
87
|
Chris@49
|
88
|
Chris@49
|
89 public:
|
Chris@49
|
90
|
Chris@49
|
91 typedef typename parent::elem_type eT;
|
Chris@49
|
92
|
Chris@49
|
93 inline ~subview_each2();
|
Chris@49
|
94
|
Chris@49
|
95 // deliberately returning void
|
Chris@49
|
96 template<typename T1> inline void operator= (const Base<eT,T1>& x);
|
Chris@49
|
97 template<typename T1> inline void operator+= (const Base<eT,T1>& x);
|
Chris@49
|
98 template<typename T1> inline void operator-= (const Base<eT,T1>& x);
|
Chris@49
|
99 template<typename T1> inline void operator%= (const Base<eT,T1>& x);
|
Chris@49
|
100 template<typename T1> inline void operator/= (const Base<eT,T1>& x);
|
Chris@49
|
101
|
Chris@49
|
102 // TODO: add handling of scalars
|
Chris@49
|
103
|
Chris@49
|
104
|
Chris@49
|
105 private:
|
Chris@49
|
106
|
Chris@49
|
107 friend class Mat<eT>;
|
Chris@49
|
108 friend class subview<eT>;
|
Chris@49
|
109
|
Chris@49
|
110 subview_each2();
|
Chris@49
|
111 };
|
Chris@49
|
112
|
Chris@49
|
113
|
Chris@49
|
114
|
Chris@49
|
115 //! @}
|