Chris@49
|
1 // Copyright (C) 2008-2013 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2008-2013 Conrad Sanderson
|
Chris@49
|
3 //
|
Chris@49
|
4 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
5 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
7
|
Chris@49
|
8
|
Chris@49
|
9 //! \addtogroup Row
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12 //! Class for row vectors (matrices with only one row)
|
Chris@49
|
13
|
Chris@49
|
14 template<typename eT>
|
Chris@49
|
15 class Row : public Mat<eT>
|
Chris@49
|
16 {
|
Chris@49
|
17 public:
|
Chris@49
|
18
|
Chris@49
|
19 typedef eT elem_type;
|
Chris@49
|
20 typedef typename get_pod_type<eT>::result pod_type;
|
Chris@49
|
21
|
Chris@49
|
22 static const bool is_col = false;
|
Chris@49
|
23 static const bool is_row = true;
|
Chris@49
|
24
|
Chris@49
|
25 inline Row();
|
Chris@49
|
26 inline Row(const Row<eT>& X);
|
Chris@49
|
27 inline explicit Row(const uword N);
|
Chris@49
|
28 inline Row(const uword in_rows, const uword in_cols);
|
Chris@49
|
29
|
Chris@49
|
30 inline Row(const char* text);
|
Chris@49
|
31 inline const Row& operator=(const char* text);
|
Chris@49
|
32
|
Chris@49
|
33 inline Row(const std::string& text);
|
Chris@49
|
34 inline const Row& operator=(const std::string& text);
|
Chris@49
|
35
|
Chris@49
|
36 inline Row(const std::vector<eT>& x);
|
Chris@49
|
37 inline const Row& operator=(const std::vector<eT>& x);
|
Chris@49
|
38
|
Chris@49
|
39 #if defined(ARMA_USE_CXX11)
|
Chris@49
|
40 inline Row(const std::initializer_list<eT>& list);
|
Chris@49
|
41 inline const Row& operator=(const std::initializer_list<eT>& list);
|
Chris@49
|
42 #endif
|
Chris@49
|
43
|
Chris@49
|
44 inline explicit Row(const SpRow<eT>& X);
|
Chris@49
|
45
|
Chris@49
|
46 inline const Row& operator=(const eT val);
|
Chris@49
|
47
|
Chris@49
|
48 template<typename T1> inline Row(const Base<eT,T1>& X);
|
Chris@49
|
49 template<typename T1> inline const Row& operator=(const Base<eT,T1>& X);
|
Chris@49
|
50
|
Chris@49
|
51 inline Row( eT* aux_mem, const uword aux_length, const bool copy_aux_mem = true, const bool strict = true);
|
Chris@49
|
52 inline Row(const eT* aux_mem, const uword aux_length);
|
Chris@49
|
53
|
Chris@49
|
54 template<typename T1, typename T2>
|
Chris@49
|
55 inline explicit Row(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
|
Chris@49
|
56
|
Chris@49
|
57 template<typename T1> inline Row(const BaseCube<eT,T1>& X);
|
Chris@49
|
58 template<typename T1> inline const Row& operator=(const BaseCube<eT,T1>& X);
|
Chris@49
|
59
|
Chris@49
|
60 inline Row(const subview_cube<eT>& X);
|
Chris@49
|
61 inline const Row& operator=(const subview_cube<eT>& X);
|
Chris@49
|
62
|
Chris@49
|
63 inline mat_injector<Row> operator<<(const eT val);
|
Chris@49
|
64
|
Chris@49
|
65 arma_inline const Op<Row<eT>,op_htrans> t() const;
|
Chris@49
|
66 arma_inline const Op<Row<eT>,op_htrans> ht() const;
|
Chris@49
|
67 arma_inline const Op<Row<eT>,op_strans> st() const;
|
Chris@49
|
68
|
Chris@49
|
69 arma_inline eT& col(const uword col_num);
|
Chris@49
|
70 arma_inline eT col(const uword col_num) const;
|
Chris@49
|
71
|
Chris@49
|
72 arma_inline subview_row<eT> cols(const uword in_col1, const uword in_col2);
|
Chris@49
|
73 arma_inline const subview_row<eT> cols(const uword in_col1, const uword in_col2) const;
|
Chris@49
|
74
|
Chris@49
|
75 arma_inline subview_row<eT> subvec(const uword in_col1, const uword in_col2);
|
Chris@49
|
76 arma_inline const subview_row<eT> subvec(const uword in_col1, const uword in_col2) const;
|
Chris@49
|
77
|
Chris@49
|
78 arma_inline subview_row<eT> subvec(const span& col_span);
|
Chris@49
|
79 arma_inline const subview_row<eT> subvec(const span& col_span) const;
|
Chris@49
|
80
|
Chris@49
|
81 using Mat<eT>::operator();
|
Chris@49
|
82
|
Chris@49
|
83 arma_inline subview_row<eT> operator()(const span& col_span);
|
Chris@49
|
84 arma_inline const subview_row<eT> operator()(const span& col_span) const;
|
Chris@49
|
85
|
Chris@49
|
86
|
Chris@49
|
87 inline void shed_col (const uword col_num);
|
Chris@49
|
88 inline void shed_cols(const uword in_col1, const uword in_col2);
|
Chris@49
|
89
|
Chris@49
|
90 inline void insert_cols(const uword col_num, const uword N, const bool set_to_zero = true);
|
Chris@49
|
91 template<typename T1> inline void insert_cols(const uword col_num, const Base<eT,T1>& X);
|
Chris@49
|
92
|
Chris@49
|
93
|
Chris@49
|
94 arma_inline arma_warn_unused eT& at(const uword i);
|
Chris@49
|
95 arma_inline arma_warn_unused const eT& at(const uword i) const;
|
Chris@49
|
96
|
Chris@49
|
97 arma_inline arma_warn_unused eT& at(const uword in_row, const uword in_col);
|
Chris@49
|
98 arma_inline arma_warn_unused const eT& at(const uword in_row, const uword in_col) const;
|
Chris@49
|
99
|
Chris@49
|
100
|
Chris@49
|
101 typedef eT* row_iterator;
|
Chris@49
|
102 typedef const eT* const_row_iterator;
|
Chris@49
|
103
|
Chris@49
|
104 inline row_iterator begin_row(const uword row_num);
|
Chris@49
|
105 inline const_row_iterator begin_row(const uword row_num) const;
|
Chris@49
|
106
|
Chris@49
|
107 inline row_iterator end_row (const uword row_num);
|
Chris@49
|
108 inline const_row_iterator end_row (const uword row_num) const;
|
Chris@49
|
109
|
Chris@49
|
110
|
Chris@49
|
111 template<uword fixed_n_elem> class fixed;
|
Chris@49
|
112
|
Chris@49
|
113
|
Chris@49
|
114 protected:
|
Chris@49
|
115
|
Chris@49
|
116 inline Row(const arma_fixed_indicator&, const uword in_n_elem, const eT* in_mem);
|
Chris@49
|
117
|
Chris@49
|
118
|
Chris@49
|
119 public:
|
Chris@49
|
120
|
Chris@49
|
121 #ifdef ARMA_EXTRA_ROW_PROTO
|
Chris@49
|
122 #include ARMA_INCFILE_WRAP(ARMA_EXTRA_ROW_PROTO)
|
Chris@49
|
123 #endif
|
Chris@49
|
124 };
|
Chris@49
|
125
|
Chris@49
|
126
|
Chris@49
|
127
|
Chris@49
|
128 template<typename eT>
|
Chris@49
|
129 template<uword fixed_n_elem>
|
Chris@49
|
130 class Row<eT>::fixed : public Row<eT>
|
Chris@49
|
131 {
|
Chris@49
|
132 private:
|
Chris@49
|
133
|
Chris@49
|
134 static const bool use_extra = (fixed_n_elem > arma_config::mat_prealloc);
|
Chris@49
|
135
|
Chris@49
|
136 arma_align_mem eT mem_local_extra[ (use_extra) ? fixed_n_elem : 1 ];
|
Chris@49
|
137
|
Chris@49
|
138
|
Chris@49
|
139 public:
|
Chris@49
|
140
|
Chris@49
|
141 typedef fixed<fixed_n_elem> Row_fixed_type;
|
Chris@49
|
142
|
Chris@49
|
143 typedef eT elem_type;
|
Chris@49
|
144 typedef typename get_pod_type<eT>::result pod_type;
|
Chris@49
|
145
|
Chris@49
|
146 static const bool is_col = false;
|
Chris@49
|
147 static const bool is_row = true;
|
Chris@49
|
148
|
Chris@49
|
149 static const uword n_rows = 1;
|
Chris@49
|
150 static const uword n_cols = fixed_n_elem;
|
Chris@49
|
151 static const uword n_elem = fixed_n_elem;
|
Chris@49
|
152
|
Chris@49
|
153 arma_inline fixed();
|
Chris@49
|
154 arma_inline fixed(const fixed<fixed_n_elem>& X);
|
Chris@49
|
155 inline fixed(const subview_cube<eT>& X);
|
Chris@49
|
156
|
Chris@49
|
157 template<typename T1> inline fixed(const Base<eT,T1>& A);
|
Chris@49
|
158 template<typename T1, typename T2> inline fixed(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
|
Chris@49
|
159
|
Chris@49
|
160 inline fixed(const eT* aux_mem);
|
Chris@49
|
161
|
Chris@49
|
162 inline fixed(const char* text);
|
Chris@49
|
163 inline fixed(const std::string& text);
|
Chris@49
|
164
|
Chris@49
|
165 template<typename T1> inline const Row& operator=(const Base<eT,T1>& A);
|
Chris@49
|
166
|
Chris@49
|
167 inline const Row& operator=(const eT val);
|
Chris@49
|
168 inline const Row& operator=(const char* text);
|
Chris@49
|
169 inline const Row& operator=(const std::string& text);
|
Chris@49
|
170 inline const Row& operator=(const subview_cube<eT>& X);
|
Chris@49
|
171
|
Chris@49
|
172 using Row<eT>::operator();
|
Chris@49
|
173
|
Chris@49
|
174 #if defined(ARMA_USE_CXX11)
|
Chris@49
|
175 inline fixed(const std::initializer_list<eT>& list);
|
Chris@49
|
176 inline const Row& operator=(const std::initializer_list<eT>& list);
|
Chris@49
|
177 #endif
|
Chris@49
|
178
|
Chris@49
|
179 arma_inline const Op< Row_fixed_type, op_htrans > t() const;
|
Chris@49
|
180 arma_inline const Op< Row_fixed_type, op_htrans > ht() const;
|
Chris@49
|
181 arma_inline const Op< Row_fixed_type, op_strans > st() const;
|
Chris@49
|
182
|
Chris@49
|
183 arma_inline arma_warn_unused const eT& at_alt (const uword i) const;
|
Chris@49
|
184
|
Chris@49
|
185 arma_inline arma_warn_unused eT& operator[] (const uword i);
|
Chris@49
|
186 arma_inline arma_warn_unused const eT& operator[] (const uword i) const;
|
Chris@49
|
187 arma_inline arma_warn_unused eT& at (const uword i);
|
Chris@49
|
188 arma_inline arma_warn_unused const eT& at (const uword i) const;
|
Chris@49
|
189 arma_inline arma_warn_unused eT& operator() (const uword i);
|
Chris@49
|
190 arma_inline arma_warn_unused const eT& operator() (const uword i) const;
|
Chris@49
|
191
|
Chris@49
|
192 arma_inline arma_warn_unused eT& at (const uword in_row, const uword in_col);
|
Chris@49
|
193 arma_inline arma_warn_unused const eT& at (const uword in_row, const uword in_col) const;
|
Chris@49
|
194 arma_inline arma_warn_unused eT& operator() (const uword in_row, const uword in_col);
|
Chris@49
|
195 arma_inline arma_warn_unused const eT& operator() (const uword in_row, const uword in_col) const;
|
Chris@49
|
196
|
Chris@49
|
197 arma_inline arma_warn_unused eT* memptr();
|
Chris@49
|
198 arma_inline arma_warn_unused const eT* memptr() const;
|
Chris@49
|
199
|
Chris@49
|
200 arma_hot inline const Row<eT>& fill(const eT val);
|
Chris@49
|
201 arma_hot inline const Row<eT>& zeros();
|
Chris@49
|
202 arma_hot inline const Row<eT>& ones();
|
Chris@49
|
203 };
|
Chris@49
|
204
|
Chris@49
|
205
|
Chris@49
|
206
|
Chris@49
|
207 //! @}
|