Chris@49
|
1 // Copyright (C) 2012 Ryan Curtin
|
Chris@49
|
2 // Copyright (C) 2012 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 //! \addtogroup SpProxy
|
Chris@49
|
9 //! @{
|
Chris@49
|
10
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13 template<typename eT>
|
Chris@49
|
14 class SpProxy< SpMat<eT> >
|
Chris@49
|
15 {
|
Chris@49
|
16 public:
|
Chris@49
|
17
|
Chris@49
|
18 typedef eT elem_type;
|
Chris@49
|
19 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
20 typedef SpMat<eT> stored_type;
|
Chris@49
|
21
|
Chris@49
|
22 typedef typename SpMat<eT>::const_iterator const_iterator_type;
|
Chris@49
|
23 typedef typename SpMat<eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
24
|
Chris@49
|
25 static const bool must_use_iterator = false;
|
Chris@49
|
26 static const bool Q_created_by_proxy = false;
|
Chris@49
|
27
|
Chris@49
|
28 static const bool is_row = false;
|
Chris@49
|
29 static const bool is_col = false;
|
Chris@49
|
30
|
Chris@49
|
31 arma_aligned const SpMat<eT>& Q;
|
Chris@49
|
32
|
Chris@49
|
33 inline explicit SpProxy(const SpMat<eT>& A)
|
Chris@49
|
34 : Q(A)
|
Chris@49
|
35 {
|
Chris@49
|
36 arma_extra_debug_sigprint();
|
Chris@49
|
37 }
|
Chris@49
|
38
|
Chris@49
|
39 arma_inline uword get_n_rows() const { return Q.n_rows; }
|
Chris@49
|
40 arma_inline uword get_n_cols() const { return Q.n_cols; }
|
Chris@49
|
41 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
42 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
43
|
Chris@49
|
44 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
45 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
46
|
Chris@49
|
47 arma_inline const eT* get_values() const { return Q.values; }
|
Chris@49
|
48 arma_inline const uword* get_row_indices() const { return Q.row_indices; }
|
Chris@49
|
49 arma_inline const uword* get_col_ptrs() const { return Q.col_ptrs; }
|
Chris@49
|
50
|
Chris@49
|
51 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
52 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin_col(col_num); }
|
Chris@49
|
53 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
54
|
Chris@49
|
55 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
56 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
57 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
58
|
Chris@49
|
59 template<typename eT2>
|
Chris@49
|
60 arma_inline bool is_alias(const SpMat<eT2>& X) const { return (void_ptr(&Q) == void_ptr(&X)); }
|
Chris@49
|
61 };
|
Chris@49
|
62
|
Chris@49
|
63
|
Chris@49
|
64
|
Chris@49
|
65 template<typename eT>
|
Chris@49
|
66 class SpProxy< SpCol<eT> >
|
Chris@49
|
67 {
|
Chris@49
|
68 public:
|
Chris@49
|
69
|
Chris@49
|
70 typedef eT elem_type;
|
Chris@49
|
71 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
72 typedef SpCol<eT> stored_type;
|
Chris@49
|
73
|
Chris@49
|
74 typedef typename SpCol<eT>::const_iterator const_iterator_type;
|
Chris@49
|
75 typedef typename SpCol<eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
76
|
Chris@49
|
77 static const bool must_use_iterator = false;
|
Chris@49
|
78 static const bool Q_created_by_proxy = false;
|
Chris@49
|
79
|
Chris@49
|
80 static const bool is_row = false;
|
Chris@49
|
81 static const bool is_col = true;
|
Chris@49
|
82
|
Chris@49
|
83 arma_aligned const SpCol<eT>& Q;
|
Chris@49
|
84
|
Chris@49
|
85 inline explicit SpProxy(const SpCol<eT>& A)
|
Chris@49
|
86 : Q(A)
|
Chris@49
|
87 {
|
Chris@49
|
88 arma_extra_debug_sigprint();
|
Chris@49
|
89 }
|
Chris@49
|
90
|
Chris@49
|
91 arma_inline uword get_n_rows() const { return Q.n_rows; }
|
Chris@49
|
92 arma_inline uword get_n_cols() const { return 1; }
|
Chris@49
|
93 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
94 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
95
|
Chris@49
|
96 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
97 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
98
|
Chris@49
|
99 arma_inline const eT* get_values() const { return Q.values; }
|
Chris@49
|
100 arma_inline const uword* get_row_indices() const { return Q.row_indices; }
|
Chris@49
|
101 arma_inline const uword* get_col_ptrs() const { return Q.col_ptrs; }
|
Chris@49
|
102
|
Chris@49
|
103 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
104 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin(); }
|
Chris@49
|
105 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
106
|
Chris@49
|
107 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
108 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
109 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
110
|
Chris@49
|
111 template<typename eT2>
|
Chris@49
|
112 arma_inline bool is_alias(const SpMat<eT2>& X) const { return (void_ptr(&Q) == void_ptr(&X)); }
|
Chris@49
|
113 };
|
Chris@49
|
114
|
Chris@49
|
115
|
Chris@49
|
116
|
Chris@49
|
117 template<typename eT>
|
Chris@49
|
118 class SpProxy< SpRow<eT> >
|
Chris@49
|
119 {
|
Chris@49
|
120 public:
|
Chris@49
|
121
|
Chris@49
|
122 typedef eT elem_type;
|
Chris@49
|
123 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
124 typedef SpRow<eT> stored_type;
|
Chris@49
|
125
|
Chris@49
|
126 typedef typename SpRow<eT>::const_iterator const_iterator_type;
|
Chris@49
|
127 typedef typename SpRow<eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
128
|
Chris@49
|
129 static const bool must_use_iterator = false;
|
Chris@49
|
130 static const bool Q_created_by_proxy = false;
|
Chris@49
|
131
|
Chris@49
|
132 static const bool is_row = true;
|
Chris@49
|
133 static const bool is_col = false;
|
Chris@49
|
134
|
Chris@49
|
135 arma_aligned const SpRow<eT>& Q;
|
Chris@49
|
136
|
Chris@49
|
137 inline explicit SpProxy(const SpRow<eT>& A)
|
Chris@49
|
138 : Q(A)
|
Chris@49
|
139 {
|
Chris@49
|
140 arma_extra_debug_sigprint();
|
Chris@49
|
141 }
|
Chris@49
|
142
|
Chris@49
|
143 arma_inline uword get_n_rows() const { return 1; }
|
Chris@49
|
144 arma_inline uword get_n_cols() const { return Q.n_cols; }
|
Chris@49
|
145 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
146 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
147
|
Chris@49
|
148 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
149 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
150
|
Chris@49
|
151 arma_inline const eT* get_values() const { return Q.values; }
|
Chris@49
|
152 arma_inline const uword* get_row_indices() const { return Q.row_indices; }
|
Chris@49
|
153 arma_inline const uword* get_col_ptrs() const { return Q.col_ptrs; }
|
Chris@49
|
154
|
Chris@49
|
155 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
156 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin_col(col_num); }
|
Chris@49
|
157 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
158
|
Chris@49
|
159 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
160 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
161 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
162
|
Chris@49
|
163 template<typename eT2>
|
Chris@49
|
164 arma_inline bool is_alias(const SpMat<eT2>& X) const { return (void_ptr(&Q) == void_ptr(&X)); }
|
Chris@49
|
165 };
|
Chris@49
|
166
|
Chris@49
|
167
|
Chris@49
|
168
|
Chris@49
|
169 template<typename eT>
|
Chris@49
|
170 class SpProxy< SpSubview<eT> >
|
Chris@49
|
171 {
|
Chris@49
|
172 public:
|
Chris@49
|
173
|
Chris@49
|
174 typedef eT elem_type;
|
Chris@49
|
175 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
176 typedef SpSubview<eT> stored_type;
|
Chris@49
|
177
|
Chris@49
|
178 typedef typename SpSubview<eT>::const_iterator const_iterator_type;
|
Chris@49
|
179 typedef typename SpSubview<eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
180
|
Chris@49
|
181 static const bool must_use_iterator = true;
|
Chris@49
|
182 static const bool Q_created_by_proxy = false;
|
Chris@49
|
183
|
Chris@49
|
184 static const bool is_row = false;
|
Chris@49
|
185 static const bool is_col = false;
|
Chris@49
|
186
|
Chris@49
|
187 arma_aligned const SpSubview<eT>& Q;
|
Chris@49
|
188
|
Chris@49
|
189 inline explicit SpProxy(const SpSubview<eT>& A)
|
Chris@49
|
190 : Q(A)
|
Chris@49
|
191 {
|
Chris@49
|
192 arma_extra_debug_sigprint();
|
Chris@49
|
193 }
|
Chris@49
|
194
|
Chris@49
|
195 arma_inline uword get_n_rows() const { return Q.n_rows; }
|
Chris@49
|
196 arma_inline uword get_n_cols() const { return Q.n_cols; }
|
Chris@49
|
197 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
198 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
199
|
Chris@49
|
200 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
201 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
202
|
Chris@49
|
203 arma_inline const eT* get_values() const { return Q.m.values; }
|
Chris@49
|
204 arma_inline const uword* get_row_indices() const { return Q.m.row_indices; }
|
Chris@49
|
205 arma_inline const uword* get_col_ptrs() const { return Q.m.col_ptrs; }
|
Chris@49
|
206
|
Chris@49
|
207 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
208 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin_col(col_num); }
|
Chris@49
|
209 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
210
|
Chris@49
|
211 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
212 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
213 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
214
|
Chris@49
|
215 template<typename eT2>
|
Chris@49
|
216 arma_inline bool is_alias(const SpMat<eT2>& X) const { return (void_ptr(&Q.m) == void_ptr(&X)); }
|
Chris@49
|
217 };
|
Chris@49
|
218
|
Chris@49
|
219
|
Chris@49
|
220
|
Chris@49
|
221 template<typename T1, typename spop_type>
|
Chris@49
|
222 class SpProxy< SpOp<T1, spop_type> >
|
Chris@49
|
223 {
|
Chris@49
|
224 public:
|
Chris@49
|
225
|
Chris@49
|
226 typedef typename T1::elem_type elem_type;
|
Chris@49
|
227 typedef typename T1::elem_type eT;
|
Chris@49
|
228 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
229 typedef SpMat<eT> stored_type;
|
Chris@49
|
230
|
Chris@49
|
231 typedef typename SpMat<eT>::const_iterator const_iterator_type;
|
Chris@49
|
232 typedef typename SpMat<eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
233
|
Chris@49
|
234 static const bool must_use_iterator = false;
|
Chris@49
|
235 static const bool Q_created_by_proxy = true;
|
Chris@49
|
236
|
Chris@49
|
237 static const bool is_row = SpOp<T1, spop_type>::is_row;
|
Chris@49
|
238 static const bool is_col = SpOp<T1, spop_type>::is_col;
|
Chris@49
|
239
|
Chris@49
|
240 arma_aligned const SpMat<eT> Q;
|
Chris@49
|
241
|
Chris@49
|
242 inline explicit SpProxy(const SpOp<T1, spop_type>& A)
|
Chris@49
|
243 : Q(A)
|
Chris@49
|
244 {
|
Chris@49
|
245 arma_extra_debug_sigprint();
|
Chris@49
|
246 }
|
Chris@49
|
247
|
Chris@49
|
248 arma_inline uword get_n_rows() const { return is_row ? 1 : Q.n_rows; }
|
Chris@49
|
249 arma_inline uword get_n_cols() const { return is_col ? 1 : Q.n_cols; }
|
Chris@49
|
250 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
251 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
252
|
Chris@49
|
253 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
254 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
255
|
Chris@49
|
256 arma_inline const eT* get_values() const { return Q.values; }
|
Chris@49
|
257 arma_inline const uword* get_row_indices() const { return Q.row_indices; }
|
Chris@49
|
258 arma_inline const uword* get_col_ptrs() const { return Q.col_ptrs; }
|
Chris@49
|
259
|
Chris@49
|
260 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
261 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin_col(col_num); }
|
Chris@49
|
262 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
263
|
Chris@49
|
264 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
265 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
266 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
267
|
Chris@49
|
268 template<typename eT2>
|
Chris@49
|
269 arma_inline bool is_alias(const SpMat<eT2>&) const { return false; }
|
Chris@49
|
270 };
|
Chris@49
|
271
|
Chris@49
|
272
|
Chris@49
|
273
|
Chris@49
|
274 template<typename T1, typename T2, typename spglue_type>
|
Chris@49
|
275 class SpProxy< SpGlue<T1, T2, spglue_type> >
|
Chris@49
|
276 {
|
Chris@49
|
277 public:
|
Chris@49
|
278
|
Chris@49
|
279 typedef typename T1::elem_type elem_type;
|
Chris@49
|
280 typedef typename T1::elem_type eT;
|
Chris@49
|
281 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
282 typedef SpMat<eT> stored_type;
|
Chris@49
|
283
|
Chris@49
|
284 typedef typename SpMat<eT>::const_iterator const_iterator_type;
|
Chris@49
|
285 typedef typename SpMat<eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
286
|
Chris@49
|
287 static const bool must_use_iterator = false;
|
Chris@49
|
288 static const bool Q_created_by_proxy = true;
|
Chris@49
|
289
|
Chris@49
|
290 static const bool is_row = SpGlue<T1, T2, spglue_type>::is_row;
|
Chris@49
|
291 static const bool is_col = SpGlue<T1, T2, spglue_type>::is_col;
|
Chris@49
|
292
|
Chris@49
|
293 arma_aligned const SpMat<eT> Q;
|
Chris@49
|
294
|
Chris@49
|
295 inline explicit SpProxy(const SpGlue<T1, T2, spglue_type>& A)
|
Chris@49
|
296 : Q(A)
|
Chris@49
|
297 {
|
Chris@49
|
298 arma_extra_debug_sigprint();
|
Chris@49
|
299 }
|
Chris@49
|
300
|
Chris@49
|
301 arma_inline uword get_n_rows() const { return is_row ? 1 : Q.n_rows; }
|
Chris@49
|
302 arma_inline uword get_n_cols() const { return is_col ? 1 : Q.n_cols; }
|
Chris@49
|
303 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
304 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
305
|
Chris@49
|
306 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
307 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
308
|
Chris@49
|
309 arma_inline const eT* get_values() const { return Q.values; }
|
Chris@49
|
310 arma_inline const uword* get_row_indices() const { return Q.row_indices; }
|
Chris@49
|
311 arma_inline const uword* get_col_ptrs() const { return Q.col_ptrs; }
|
Chris@49
|
312
|
Chris@49
|
313 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
314 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin_col(col_num); }
|
Chris@49
|
315 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
316
|
Chris@49
|
317 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
318 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
319 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
320
|
Chris@49
|
321 template<typename eT2>
|
Chris@49
|
322 arma_inline bool is_alias(const SpMat<eT2>&) const { return false; }
|
Chris@49
|
323 };
|
Chris@49
|
324
|
Chris@49
|
325
|
Chris@49
|
326
|
Chris@49
|
327 template<typename out_eT, typename T1, typename spop_type>
|
Chris@49
|
328 class SpProxy< mtSpOp<out_eT, T1, spop_type> >
|
Chris@49
|
329 {
|
Chris@49
|
330 public:
|
Chris@49
|
331
|
Chris@49
|
332 typedef out_eT elem_type;
|
Chris@49
|
333 typedef typename T1::elem_type eT;
|
Chris@49
|
334 typedef typename get_pod_type<elem_type>::result pod_type;
|
Chris@49
|
335 typedef SpMat<out_eT> stored_type;
|
Chris@49
|
336
|
Chris@49
|
337 typedef typename SpMat<out_eT>::const_iterator const_iterator_type;
|
Chris@49
|
338 typedef typename SpMat<out_eT>::const_row_iterator const_row_iterator_type;
|
Chris@49
|
339
|
Chris@49
|
340 static const bool must_use_iterator = false;
|
Chris@49
|
341 static const bool Q_created_by_proxy = true;
|
Chris@49
|
342
|
Chris@49
|
343 static const bool is_row = mtSpOp<out_eT, T1, spop_type>::is_row;
|
Chris@49
|
344 static const bool is_col = mtSpOp<out_eT, T1, spop_type>::is_col;
|
Chris@49
|
345
|
Chris@49
|
346 arma_aligned const SpMat<out_eT> Q;
|
Chris@49
|
347
|
Chris@49
|
348 inline explicit SpProxy(const mtSpOp<out_eT, T1, spop_type>& A)
|
Chris@49
|
349 : Q(A)
|
Chris@49
|
350 {
|
Chris@49
|
351 arma_extra_debug_sigprint();
|
Chris@49
|
352 }
|
Chris@49
|
353
|
Chris@49
|
354 arma_inline uword get_n_rows() const { return is_row ? 1 : Q.n_rows; }
|
Chris@49
|
355 arma_inline uword get_n_cols() const { return is_col ? 1 : Q.n_cols; }
|
Chris@49
|
356 arma_inline uword get_n_elem() const { return Q.n_elem; }
|
Chris@49
|
357 arma_inline uword get_n_nonzero() const { return Q.n_nonzero; }
|
Chris@49
|
358
|
Chris@49
|
359 arma_inline elem_type operator[](const uword i) const { return Q[i]; }
|
Chris@49
|
360 arma_inline elem_type at (const uword row, const uword col) const { return Q.at(row, col); }
|
Chris@49
|
361
|
Chris@49
|
362 arma_inline const eT* get_values() const { return Q.values; }
|
Chris@49
|
363 arma_inline const uword* get_row_indices() const { return Q.row_indices; }
|
Chris@49
|
364 arma_inline const uword* get_col_ptrs() const { return Q.col_ptrs; }
|
Chris@49
|
365
|
Chris@49
|
366 arma_inline const_iterator_type begin() const { return Q.begin(); }
|
Chris@49
|
367 arma_inline const_iterator_type begin_col(const uword col_num) const { return Q.begin_col(col_num); }
|
Chris@49
|
368 arma_inline const_row_iterator_type begin_row(const uword row_num = 0) const { return Q.begin_row(row_num); }
|
Chris@49
|
369
|
Chris@49
|
370 arma_inline const_iterator_type end() const { return Q.end(); }
|
Chris@49
|
371 arma_inline const_row_iterator_type end_row() const { return Q.end_row(); }
|
Chris@49
|
372 arma_inline const_row_iterator_type end_row(const uword row_num) const { return Q.end_row(row_num); }
|
Chris@49
|
373
|
Chris@49
|
374 template<typename eT2>
|
Chris@49
|
375 arma_inline bool is_alias(const SpMat<eT2>&) const { return false; }
|
Chris@49
|
376 };
|
Chris@49
|
377
|
Chris@49
|
378
|
Chris@49
|
379
|
Chris@49
|
380 //! @}
|