Chris@49
|
1 // Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2008-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
|
Chris@49
|
9 //! \addtogroup subview_field
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13 //! Class for storing data required to construct or apply operations to a subfield
|
Chris@49
|
14 //! (i.e. where the subfield starts and ends as well as a reference/pointer to the original field),
|
Chris@49
|
15 template<typename oT>
|
Chris@49
|
16 class subview_field
|
Chris@49
|
17 {
|
Chris@49
|
18 public:
|
Chris@49
|
19
|
Chris@49
|
20 typedef oT object_type;
|
Chris@49
|
21
|
Chris@49
|
22 const field<oT>& f;
|
Chris@49
|
23
|
Chris@49
|
24 const uword aux_row1;
|
Chris@49
|
25 const uword aux_col1;
|
Chris@49
|
26
|
Chris@49
|
27 const uword n_rows;
|
Chris@49
|
28 const uword n_cols;
|
Chris@49
|
29 const uword n_elem;
|
Chris@49
|
30
|
Chris@49
|
31
|
Chris@49
|
32 protected:
|
Chris@49
|
33
|
Chris@49
|
34 arma_inline subview_field(const field<oT>& in_f, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols);
|
Chris@49
|
35
|
Chris@49
|
36
|
Chris@49
|
37 public:
|
Chris@49
|
38
|
Chris@49
|
39 inline ~subview_field();
|
Chris@49
|
40
|
Chris@49
|
41 inline void operator= (const field<oT>& x);
|
Chris@49
|
42 inline void operator= (const subview_field& x);
|
Chris@49
|
43
|
Chris@49
|
44 arma_inline oT& operator[](const uword i);
|
Chris@49
|
45 arma_inline const oT& operator[](const uword i) const;
|
Chris@49
|
46
|
Chris@49
|
47 arma_inline oT& operator()(const uword i);
|
Chris@49
|
48 arma_inline const oT& operator()(const uword i) const;
|
Chris@49
|
49
|
Chris@49
|
50 arma_inline oT& at(const uword row, const uword col);
|
Chris@49
|
51 arma_inline const oT& at(const uword row, const uword col) const;
|
Chris@49
|
52
|
Chris@49
|
53 arma_inline oT& operator()(const uword row, const uword col);
|
Chris@49
|
54 arma_inline const oT& operator()(const uword row, const uword col) const;
|
Chris@49
|
55
|
Chris@49
|
56 inline bool check_overlap(const subview_field& x) const;
|
Chris@49
|
57
|
Chris@49
|
58 inline static void extract(field<oT>& out, const subview_field& in);
|
Chris@49
|
59
|
Chris@49
|
60
|
Chris@49
|
61 private:
|
Chris@49
|
62
|
Chris@49
|
63 friend class field<oT>;
|
Chris@49
|
64
|
Chris@49
|
65
|
Chris@49
|
66 subview_field();
|
Chris@49
|
67 //subview_field(const subview_field&);
|
Chris@49
|
68 };
|
Chris@49
|
69
|
Chris@49
|
70
|
Chris@49
|
71 //! @}
|