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 Col
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12 //! Class for column vectors (matrices with only one column)
|
Chris@49
|
13
|
Chris@49
|
14 template<typename eT>
|
Chris@49
|
15 class Col : 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 = true;
|
Chris@49
|
23 static const bool is_row = false;
|
Chris@49
|
24
|
Chris@49
|
25 inline Col();
|
Chris@49
|
26 inline Col(const Col<eT>& X);
|
Chris@49
|
27 inline explicit Col(const uword n_elem);
|
Chris@49
|
28 inline Col(const uword in_rows, const uword in_cols);
|
Chris@49
|
29
|
Chris@49
|
30 inline Col(const char* text);
|
Chris@49
|
31 inline const Col& operator=(const char* text);
|
Chris@49
|
32
|
Chris@49
|
33 inline Col(const std::string& text);
|
Chris@49
|
34 inline const Col& operator=(const std::string& text);
|
Chris@49
|
35
|
Chris@49
|
36 inline Col(const std::vector<eT>& x);
|
Chris@49
|
37 inline const Col& operator=(const std::vector<eT>& x);
|
Chris@49
|
38
|
Chris@49
|
39 #if defined(ARMA_USE_CXX11)
|
Chris@49
|
40 inline Col(const std::initializer_list<eT>& list);
|
Chris@49
|
41 inline const Col& operator=(const std::initializer_list<eT>& list);
|
Chris@49
|
42 #endif
|
Chris@49
|
43
|
Chris@49
|
44 inline explicit Col(const SpCol<eT>& X);
|
Chris@49
|
45
|
Chris@49
|
46 inline const Col& operator=(const eT val);
|
Chris@49
|
47
|
Chris@49
|
48 template<typename T1> inline Col(const Base<eT,T1>& X);
|
Chris@49
|
49 template<typename T1> inline const Col& operator=(const Base<eT,T1>& X);
|
Chris@49
|
50
|
Chris@49
|
51 inline Col( eT* aux_mem, const uword aux_length, const bool copy_aux_mem = true, const bool strict = true);
|
Chris@49
|
52 inline Col(const eT* aux_mem, const uword aux_length);
|
Chris@49
|
53
|
Chris@49
|
54 template<typename T1, typename T2>
|
Chris@49
|
55 inline explicit Col(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
|
Chris@49
|
56
|
Chris@49
|
57 template<typename T1> inline Col(const BaseCube<eT,T1>& X);
|
Chris@49
|
58 template<typename T1> inline const Col& operator=(const BaseCube<eT,T1>& X);
|
Chris@49
|
59
|
Chris@49
|
60 inline Col(const subview_cube<eT>& X);
|
Chris@49
|
61 inline const Col& operator=(const subview_cube<eT>& X);
|
Chris@49
|
62
|
Chris@49
|
63 inline mat_injector<Col> operator<<(const eT val);
|
Chris@49
|
64
|
Chris@49
|
65 arma_inline const Op<Col<eT>,op_htrans> t() const;
|
Chris@49
|
66 arma_inline const Op<Col<eT>,op_htrans> ht() const;
|
Chris@49
|
67 arma_inline const Op<Col<eT>,op_strans> st() const;
|
Chris@49
|
68
|
Chris@49
|
69 arma_inline eT& row(const uword row_num);
|
Chris@49
|
70 arma_inline eT row(const uword row_num) const;
|
Chris@49
|
71
|
Chris@49
|
72 arma_inline subview_col<eT> rows(const uword in_row1, const uword in_row2);
|
Chris@49
|
73 arma_inline const subview_col<eT> rows(const uword in_row1, const uword in_row2) const;
|
Chris@49
|
74
|
Chris@49
|
75 arma_inline subview_col<eT> subvec(const uword in_row1, const uword in_row2);
|
Chris@49
|
76 arma_inline const subview_col<eT> subvec(const uword in_row1, const uword in_row2) const;
|
Chris@49
|
77
|
Chris@49
|
78 arma_inline subview_col<eT> subvec(const span& row_span);
|
Chris@49
|
79 arma_inline const subview_col<eT> subvec(const span& row_span) const;
|
Chris@49
|
80
|
Chris@49
|
81 using Mat<eT>::operator();
|
Chris@49
|
82
|
Chris@49
|
83 arma_inline subview_col<eT> operator()(const span& row_span);
|
Chris@49
|
84 arma_inline const subview_col<eT> operator()(const span& row_span) const;
|
Chris@49
|
85
|
Chris@49
|
86
|
Chris@49
|
87 inline void shed_row (const uword row_num);
|
Chris@49
|
88 inline void shed_rows(const uword in_row1, const uword in_row2);
|
Chris@49
|
89
|
Chris@49
|
90 inline void insert_rows(const uword row_num, const uword N, const bool set_to_zero = true);
|
Chris@49
|
91 template<typename T1> inline void insert_rows(const uword row_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 Col(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_COL_PROTO
|
Chris@49
|
122 #include ARMA_INCFILE_WRAP(ARMA_EXTRA_COL_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 Col<eT>::fixed : public Col<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 arma_inline void change_to_row();
|
Chris@49
|
139
|
Chris@49
|
140
|
Chris@49
|
141 public:
|
Chris@49
|
142
|
Chris@49
|
143 typedef fixed<fixed_n_elem> Col_fixed_type;
|
Chris@49
|
144
|
Chris@49
|
145 typedef eT elem_type;
|
Chris@49
|
146 typedef typename get_pod_type<eT>::result pod_type;
|
Chris@49
|
147
|
Chris@49
|
148 static const bool is_col = true;
|
Chris@49
|
149 static const bool is_row = false;
|
Chris@49
|
150
|
Chris@49
|
151 static const uword n_rows = fixed_n_elem;
|
Chris@49
|
152 static const uword n_cols = 1;
|
Chris@49
|
153 static const uword n_elem = fixed_n_elem;
|
Chris@49
|
154
|
Chris@49
|
155 arma_inline fixed();
|
Chris@49
|
156 arma_inline fixed(const fixed<fixed_n_elem>& X);
|
Chris@49
|
157 inline fixed(const subview_cube<eT>& X);
|
Chris@49
|
158
|
Chris@49
|
159 template<typename T1> inline fixed(const Base<eT,T1>& A);
|
Chris@49
|
160 template<typename T1, typename T2> inline fixed(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
|
Chris@49
|
161
|
Chris@49
|
162 inline fixed(const eT* aux_mem);
|
Chris@49
|
163
|
Chris@49
|
164 inline fixed(const char* text);
|
Chris@49
|
165 inline fixed(const std::string& text);
|
Chris@49
|
166
|
Chris@49
|
167 template<typename T1> inline const Col& operator=(const Base<eT,T1>& A);
|
Chris@49
|
168
|
Chris@49
|
169 inline const Col& operator=(const eT val);
|
Chris@49
|
170 inline const Col& operator=(const char* text);
|
Chris@49
|
171 inline const Col& operator=(const std::string& text);
|
Chris@49
|
172 inline const Col& operator=(const subview_cube<eT>& X);
|
Chris@49
|
173
|
Chris@49
|
174 using Col<eT>::operator();
|
Chris@49
|
175
|
Chris@49
|
176 #if defined(ARMA_USE_CXX11)
|
Chris@49
|
177 inline fixed(const std::initializer_list<eT>& list);
|
Chris@49
|
178 inline const Col& operator=(const std::initializer_list<eT>& list);
|
Chris@49
|
179 #endif
|
Chris@49
|
180
|
Chris@49
|
181 arma_inline const Op< Col_fixed_type, op_htrans > t() const;
|
Chris@49
|
182 arma_inline const Op< Col_fixed_type, op_htrans > ht() const;
|
Chris@49
|
183 arma_inline const Op< Col_fixed_type, op_strans > st() const;
|
Chris@49
|
184
|
Chris@49
|
185 arma_inline arma_warn_unused const eT& at_alt (const uword i) const;
|
Chris@49
|
186
|
Chris@49
|
187 arma_inline arma_warn_unused eT& operator[] (const uword i);
|
Chris@49
|
188 arma_inline arma_warn_unused const eT& operator[] (const uword i) const;
|
Chris@49
|
189 arma_inline arma_warn_unused eT& at (const uword i);
|
Chris@49
|
190 arma_inline arma_warn_unused const eT& at (const uword i) const;
|
Chris@49
|
191 arma_inline arma_warn_unused eT& operator() (const uword i);
|
Chris@49
|
192 arma_inline arma_warn_unused const eT& operator() (const uword i) const;
|
Chris@49
|
193
|
Chris@49
|
194 arma_inline arma_warn_unused eT& at (const uword in_row, const uword in_col);
|
Chris@49
|
195 arma_inline arma_warn_unused const eT& at (const uword in_row, const uword in_col) const;
|
Chris@49
|
196 arma_inline arma_warn_unused eT& operator() (const uword in_row, const uword in_col);
|
Chris@49
|
197 arma_inline arma_warn_unused const eT& operator() (const uword in_row, const uword in_col) const;
|
Chris@49
|
198
|
Chris@49
|
199 arma_inline arma_warn_unused eT* memptr();
|
Chris@49
|
200 arma_inline arma_warn_unused const eT* memptr() const;
|
Chris@49
|
201
|
Chris@49
|
202 arma_hot inline const Col<eT>& fill(const eT val);
|
Chris@49
|
203 arma_hot inline const Col<eT>& zeros();
|
Chris@49
|
204 arma_hot inline const Col<eT>& ones();
|
Chris@49
|
205 };
|
Chris@49
|
206
|
Chris@49
|
207
|
Chris@49
|
208
|
Chris@49
|
209 //! @}
|