00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00016
00017
00018
00020
00021 template<typename eT>
00022 class Mat : public Base< eT, Mat<eT> >
00023 {
00024 public:
00025
00026 typedef eT elem_type;
00027 typedef typename get_pod_type<eT>::result pod_type;
00028
00029 const uword n_rows;
00030 const uword n_cols;
00031 const uword n_elem;
00032 const uhword vec_state;
00033 const uhword mem_state;
00034
00035
00036
00037
00038
00039
00040 arma_aligned const eT* const mem;
00041
00042 protected:
00043 arma_aligned eT mem_local[ arma_config::mat_prealloc ];
00044
00045
00046 public:
00047
00048 inline ~Mat();
00049 inline Mat();
00050
00051 inline Mat(const uword in_rows, const uword in_cols);
00052
00053 inline Mat(const char* text);
00054 inline const Mat& operator=(const char* text);
00055
00056 inline Mat(const std::string& text);
00057 inline const Mat& operator=(const std::string& text);
00058
00059 #if defined(ARMA_USE_CXX11)
00060 inline Mat(const std::initializer_list<eT>& list);
00061 inline const Mat& operator=(const std::initializer_list<eT>& list);
00062 #endif
00063
00064 inline Mat( eT* aux_mem, const uword aux_n_rows, const uword aux_n_cols, const bool copy_aux_mem = true, const bool strict = true);
00065 inline Mat(const eT* aux_mem, const uword aux_n_rows, const uword aux_n_cols);
00066
00067 arma_inline const Mat& operator=(const eT val);
00068 arma_inline const Mat& operator+=(const eT val);
00069 arma_inline const Mat& operator-=(const eT val);
00070 arma_inline const Mat& operator*=(const eT val);
00071 arma_inline const Mat& operator/=(const eT val);
00072
00073 inline Mat(const Mat& m);
00074 inline const Mat& operator=(const Mat& m);
00075 inline const Mat& operator+=(const Mat& m);
00076 inline const Mat& operator-=(const Mat& m);
00077 inline const Mat& operator*=(const Mat& m);
00078 inline const Mat& operator%=(const Mat& m);
00079 inline const Mat& operator/=(const Mat& m);
00080
00081 template<typename T1> inline Mat(const BaseCube<eT,T1>& X);
00082 template<typename T1> inline const Mat& operator=(const BaseCube<eT,T1>& X);
00083 template<typename T1> inline const Mat& operator+=(const BaseCube<eT,T1>& X);
00084 template<typename T1> inline const Mat& operator-=(const BaseCube<eT,T1>& X);
00085 template<typename T1> inline const Mat& operator*=(const BaseCube<eT,T1>& X);
00086 template<typename T1> inline const Mat& operator%=(const BaseCube<eT,T1>& X);
00087 template<typename T1> inline const Mat& operator/=(const BaseCube<eT,T1>& X);
00088
00089 template<typename T1, typename T2>
00090 inline explicit Mat(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
00091
00092 inline Mat(const subview<eT>& X);
00093 inline const Mat& operator=(const subview<eT>& X);
00094 inline const Mat& operator+=(const subview<eT>& X);
00095 inline const Mat& operator-=(const subview<eT>& X);
00096 inline const Mat& operator*=(const subview<eT>& X);
00097 inline const Mat& operator%=(const subview<eT>& X);
00098 inline const Mat& operator/=(const subview<eT>& X);
00099
00100
00101 inline Mat(const subview_cube<eT>& X);
00102 inline const Mat& operator=(const subview_cube<eT>& X);
00103 inline const Mat& operator+=(const subview_cube<eT>& X);
00104 inline const Mat& operator-=(const subview_cube<eT>& X);
00105 inline const Mat& operator*=(const subview_cube<eT>& X);
00106 inline const Mat& operator%=(const subview_cube<eT>& X);
00107 inline const Mat& operator/=(const subview_cube<eT>& X);
00108
00109
00110 inline Mat(const diagview<eT>& X);
00111 inline const Mat& operator=(const diagview<eT>& X);
00112 inline const Mat& operator+=(const diagview<eT>& X);
00113 inline const Mat& operator-=(const diagview<eT>& X);
00114 inline const Mat& operator*=(const diagview<eT>& X);
00115 inline const Mat& operator%=(const diagview<eT>& X);
00116 inline const Mat& operator/=(const diagview<eT>& X);
00117
00118 template<typename T1> inline Mat(const subview_elem1<eT,T1>& X);
00119 template<typename T1> inline const Mat& operator= (const subview_elem1<eT,T1>& X);
00120 template<typename T1> inline const Mat& operator+=(const subview_elem1<eT,T1>& X);
00121 template<typename T1> inline const Mat& operator-=(const subview_elem1<eT,T1>& X);
00122 template<typename T1> inline const Mat& operator*=(const subview_elem1<eT,T1>& X);
00123 template<typename T1> inline const Mat& operator%=(const subview_elem1<eT,T1>& X);
00124 template<typename T1> inline const Mat& operator/=(const subview_elem1<eT,T1>& X);
00125
00126
00127 inline mat_injector<Mat> operator<<(const eT val);
00128 inline mat_injector<Mat> operator<<(const injector_end_of_row& x);
00129
00130
00131 arma_inline subview_row<eT> row(const uword row_num);
00132 arma_inline const subview_row<eT> row(const uword row_num) const;
00133
00134 inline subview_row<eT> operator()(const uword row_num, const span& col_span);
00135 inline const subview_row<eT> operator()(const uword row_num, const span& col_span) const;
00136
00137
00138 arma_inline subview_col<eT> col(const uword col_num);
00139 arma_inline const subview_col<eT> col(const uword col_num) const;
00140
00141 inline subview_col<eT> operator()(const span& row_span, const uword col_num);
00142 inline const subview_col<eT> operator()(const span& row_span, const uword col_num) const;
00143
00144 inline Col<eT> unsafe_col(const uword col_num);
00145 inline const Col<eT> unsafe_col(const uword col_num) const;
00146
00147
00148 arma_inline subview<eT> rows(const uword in_row1, const uword in_row2);
00149 arma_inline const subview<eT> rows(const uword in_row1, const uword in_row2) const;
00150
00151 arma_inline subview<eT> cols(const uword in_col1, const uword in_col2);
00152 arma_inline const subview<eT> cols(const uword in_col1, const uword in_col2) const;
00153
00154 arma_inline subview<eT> submat(const uword in_row1, const uword in_col1, const uword in_row2, const uword in_col2);
00155 arma_inline const subview<eT> submat(const uword in_row1, const uword in_col1, const uword in_row2, const uword in_col2) const;
00156
00157
00158 inline subview<eT> submat (const span& row_span, const span& col_span);
00159 inline const subview<eT> submat (const span& row_span, const span& col_span) const;
00160
00161 inline subview<eT> operator()(const span& row_span, const span& col_span);
00162 inline const subview<eT> operator()(const span& row_span, const span& col_span) const;
00163
00164
00165 template<typename T1> arma_inline subview_elem1<eT,T1> elem(const Base<uword,T1>& a);
00166 template<typename T1> arma_inline const subview_elem1<eT,T1> elem(const Base<uword,T1>& a) const;
00167
00168
00169
00170
00171
00172 arma_inline diagview<eT> diag(const sword in_id = 0);
00173 arma_inline const diagview<eT> diag(const sword in_id = 0) const;
00174
00175
00176 inline void swap_rows(const uword in_row1, const uword in_row2);
00177 inline void swap_cols(const uword in_col1, const uword in_col2);
00178
00179 inline void shed_row(const uword row_num);
00180 inline void shed_col(const uword col_num);
00181
00182 inline void shed_rows(const uword in_row1, const uword in_row2);
00183 inline void shed_cols(const uword in_col1, const uword in_col2);
00184
00185 inline void insert_rows(const uword row_num, const uword N, const bool set_to_zero = true);
00186 inline void insert_cols(const uword col_num, const uword N, const bool set_to_zero = true);
00187
00188 template<typename T1> inline void insert_rows(const uword row_num, const Base<eT,T1>& X);
00189 template<typename T1> inline void insert_cols(const uword col_num, const Base<eT,T1>& X);
00190
00191
00192 template<typename gen_type> inline Mat(const Gen<eT, gen_type>& X);
00193 template<typename gen_type> inline const Mat& operator=(const Gen<eT, gen_type>& X);
00194 template<typename gen_type> inline const Mat& operator+=(const Gen<eT, gen_type>& X);
00195 template<typename gen_type> inline const Mat& operator-=(const Gen<eT, gen_type>& X);
00196 template<typename gen_type> inline const Mat& operator*=(const Gen<eT, gen_type>& X);
00197 template<typename gen_type> inline const Mat& operator%=(const Gen<eT, gen_type>& X);
00198 template<typename gen_type> inline const Mat& operator/=(const Gen<eT, gen_type>& X);
00199
00200 template<typename T1, typename op_type> inline Mat(const Op<T1, op_type>& X);
00201 template<typename T1, typename op_type> inline const Mat& operator=(const Op<T1, op_type>& X);
00202 template<typename T1, typename op_type> inline const Mat& operator+=(const Op<T1, op_type>& X);
00203 template<typename T1, typename op_type> inline const Mat& operator-=(const Op<T1, op_type>& X);
00204 template<typename T1, typename op_type> inline const Mat& operator*=(const Op<T1, op_type>& X);
00205 template<typename T1, typename op_type> inline const Mat& operator%=(const Op<T1, op_type>& X);
00206 template<typename T1, typename op_type> inline const Mat& operator/=(const Op<T1, op_type>& X);
00207
00208 template<typename T1, typename eop_type> inline Mat(const eOp<T1, eop_type>& X);
00209 template<typename T1, typename eop_type> inline const Mat& operator=(const eOp<T1, eop_type>& X);
00210 template<typename T1, typename eop_type> inline const Mat& operator+=(const eOp<T1, eop_type>& X);
00211 template<typename T1, typename eop_type> inline const Mat& operator-=(const eOp<T1, eop_type>& X);
00212 template<typename T1, typename eop_type> inline const Mat& operator*=(const eOp<T1, eop_type>& X);
00213 template<typename T1, typename eop_type> inline const Mat& operator%=(const eOp<T1, eop_type>& X);
00214 template<typename T1, typename eop_type> inline const Mat& operator/=(const eOp<T1, eop_type>& X);
00215
00216 template<typename T1, typename op_type> inline Mat(const mtOp<eT, T1, op_type>& X);
00217 template<typename T1, typename op_type> inline const Mat& operator=(const mtOp<eT, T1, op_type>& X);
00218 template<typename T1, typename op_type> inline const Mat& operator+=(const mtOp<eT, T1, op_type>& X);
00219 template<typename T1, typename op_type> inline const Mat& operator-=(const mtOp<eT, T1, op_type>& X);
00220 template<typename T1, typename op_type> inline const Mat& operator*=(const mtOp<eT, T1, op_type>& X);
00221 template<typename T1, typename op_type> inline const Mat& operator%=(const mtOp<eT, T1, op_type>& X);
00222 template<typename T1, typename op_type> inline const Mat& operator/=(const mtOp<eT, T1, op_type>& X);
00223
00224 template<typename T1, typename T2, typename glue_type> inline Mat(const Glue<T1, T2, glue_type>& X);
00225 template<typename T1, typename T2, typename glue_type> inline const Mat& operator=(const Glue<T1, T2, glue_type>& X);
00226 template<typename T1, typename T2, typename glue_type> inline const Mat& operator+=(const Glue<T1, T2, glue_type>& X);
00227 template<typename T1, typename T2, typename glue_type> inline const Mat& operator-=(const Glue<T1, T2, glue_type>& X);
00228 template<typename T1, typename T2, typename glue_type> inline const Mat& operator*=(const Glue<T1, T2, glue_type>& X);
00229 template<typename T1, typename T2, typename glue_type> inline const Mat& operator%=(const Glue<T1, T2, glue_type>& X);
00230 template<typename T1, typename T2, typename glue_type> inline const Mat& operator/=(const Glue<T1, T2, glue_type>& X);
00231
00232 template<typename T1, typename T2> inline const Mat& operator+=(const Glue<T1, T2, glue_times>& X);
00233 template<typename T1, typename T2> inline const Mat& operator-=(const Glue<T1, T2, glue_times>& X);
00234
00235 template<typename T1, typename T2, typename eglue_type> inline Mat(const eGlue<T1, T2, eglue_type>& X);
00236 template<typename T1, typename T2, typename eglue_type> inline const Mat& operator=(const eGlue<T1, T2, eglue_type>& X);
00237 template<typename T1, typename T2, typename eglue_type> inline const Mat& operator+=(const eGlue<T1, T2, eglue_type>& X);
00238 template<typename T1, typename T2, typename eglue_type> inline const Mat& operator-=(const eGlue<T1, T2, eglue_type>& X);
00239 template<typename T1, typename T2, typename eglue_type> inline const Mat& operator*=(const eGlue<T1, T2, eglue_type>& X);
00240 template<typename T1, typename T2, typename eglue_type> inline const Mat& operator%=(const eGlue<T1, T2, eglue_type>& X);
00241 template<typename T1, typename T2, typename eglue_type> inline const Mat& operator/=(const eGlue<T1, T2, eglue_type>& X);
00242
00243 template<typename T1, typename T2, typename glue_type> inline Mat(const mtGlue<eT, T1, T2, glue_type>& X);
00244 template<typename T1, typename T2, typename glue_type> inline const Mat& operator=(const mtGlue<eT, T1, T2, glue_type>& X);
00245 template<typename T1, typename T2, typename glue_type> inline const Mat& operator+=(const mtGlue<eT, T1, T2, glue_type>& X);
00246 template<typename T1, typename T2, typename glue_type> inline const Mat& operator-=(const mtGlue<eT, T1, T2, glue_type>& X);
00247 template<typename T1, typename T2, typename glue_type> inline const Mat& operator*=(const mtGlue<eT, T1, T2, glue_type>& X);
00248 template<typename T1, typename T2, typename glue_type> inline const Mat& operator%=(const mtGlue<eT, T1, T2, glue_type>& X);
00249 template<typename T1, typename T2, typename glue_type> inline const Mat& operator/=(const mtGlue<eT, T1, T2, glue_type>& X);
00250
00251
00252 arma_inline arma_warn_unused eT& operator[] (const uword i);
00253 arma_inline arma_warn_unused eT operator[] (const uword i) const;
00254 arma_inline arma_warn_unused eT& at (const uword i);
00255 arma_inline arma_warn_unused eT at (const uword i) const;
00256 arma_inline arma_warn_unused eT& operator() (const uword i);
00257 arma_inline arma_warn_unused eT operator() (const uword i) const;
00258
00259 arma_inline arma_warn_unused eT& at (const uword in_row, const uword in_col);
00260 arma_inline arma_warn_unused eT at (const uword in_row, const uword in_col) const;
00261 arma_inline arma_warn_unused eT& operator() (const uword in_row, const uword in_col);
00262 arma_inline arma_warn_unused eT operator() (const uword in_row, const uword in_col) const;
00263
00264 arma_inline const Mat& operator++();
00265 arma_inline void operator++(int);
00266
00267 arma_inline const Mat& operator--();
00268 arma_inline void operator--(int);
00269
00270 arma_inline arma_warn_unused bool is_empty() const;
00271 arma_inline arma_warn_unused bool is_vec() const;
00272 arma_inline arma_warn_unused bool is_rowvec() const;
00273 arma_inline arma_warn_unused bool is_colvec() const;
00274 arma_inline arma_warn_unused bool is_square() const;
00275 inline arma_warn_unused bool is_finite() const;
00276
00277 arma_inline arma_warn_unused bool in_range(const uword i) const;
00278 arma_inline arma_warn_unused bool in_range(const span& x) const;
00279
00280 arma_inline arma_warn_unused bool in_range(const uword in_row, const uword in_col) const;
00281 arma_inline arma_warn_unused bool in_range(const span& row_span, const uword in_col) const;
00282 arma_inline arma_warn_unused bool in_range(const uword in_row, const span& col_span) const;
00283 arma_inline arma_warn_unused bool in_range(const span& row_span, const span& col_span) const;
00284
00285 arma_inline arma_warn_unused eT* colptr(const uword in_col);
00286 arma_inline arma_warn_unused const eT* colptr(const uword in_col) const;
00287
00288 arma_inline arma_warn_unused eT* memptr();
00289 arma_inline arma_warn_unused const eT* memptr() const;
00290
00291
00292 inline void impl_print(const std::string& extra_text) const;
00293 inline void impl_print(std::ostream& user_stream, const std::string& extra_text) const;
00294
00295 inline void impl_print_trans(const std::string& extra_text) const;
00296 inline void impl_print_trans(std::ostream& user_stream, const std::string& extra_text) const;
00297
00298 inline void impl_raw_print(const std::string& extra_text) const;
00299 inline void impl_raw_print(std::ostream& user_stream, const std::string& extra_text) const;
00300
00301 inline void impl_raw_print_trans(const std::string& extra_text) const;
00302 inline void impl_raw_print_trans(std::ostream& user_stream, const std::string& extra_text) const;
00303
00304
00305 template<typename eT2>
00306 inline void copy_size(const Mat<eT2>& m);
00307
00308 inline void set_size(const uword in_elem);
00309 inline void set_size(const uword in_rows, const uword in_cols);
00310
00311 inline void resize(const uword in_elem);
00312 inline void resize(const uword in_rows, const uword in_cols);
00313 inline void reshape(const uword in_rows, const uword in_cols, const uword dim = 0);
00314
00315
00316 arma_hot inline const Mat& fill(const eT val);
00317
00318 inline const Mat& zeros();
00319 inline const Mat& zeros(const uword in_elem);
00320 inline const Mat& zeros(const uword in_rows, const uword in_cols);
00321
00322 inline const Mat& ones();
00323 inline const Mat& ones(const uword in_elem);
00324 inline const Mat& ones(const uword in_rows, const uword in_cols);
00325
00326 inline const Mat& randu();
00327 inline const Mat& randu(const uword in_elem);
00328 inline const Mat& randu(const uword in_rows, const uword in_cols);
00329
00330 inline const Mat& randn();
00331 inline const Mat& randn(const uword in_elem);
00332 inline const Mat& randn(const uword in_rows, const uword in_cols);
00333
00334 inline const Mat& eye();
00335 inline const Mat& eye(const uword in_rows, const uword in_cols);
00336
00337 inline void reset();
00338
00339
00340 template<typename T1> inline void set_real(const Base<pod_type,T1>& X);
00341 template<typename T1> inline void set_imag(const Base<pod_type,T1>& X);
00342
00343
00344 inline arma_warn_unused eT min() const;
00345 inline arma_warn_unused eT max() const;
00346
00347 inline eT min(uword& index_of_min_val) const;
00348 inline eT max(uword& index_of_max_val) const;
00349
00350 inline eT min(uword& row_of_min_val, uword& col_of_min_val) const;
00351 inline eT max(uword& row_of_max_val, uword& col_of_max_val) const;
00352
00353
00354 inline bool save(const std::string name, const file_type type = arma_binary, const bool print_status = true) const;
00355 inline bool save( std::ostream& os, const file_type type = arma_binary, const bool print_status = true) const;
00356
00357 inline bool load(const std::string name, const file_type type = auto_detect, const bool print_status = true);
00358 inline bool load( std::istream& is, const file_type type = auto_detect, const bool print_status = true);
00359
00360 inline bool quiet_save(const std::string name, const file_type type = arma_binary) const;
00361 inline bool quiet_save( std::ostream& os, const file_type type = arma_binary) const;
00362
00363 inline bool quiet_load(const std::string name, const file_type type = auto_detect);
00364 inline bool quiet_load( std::istream& is, const file_type type = auto_detect);
00365
00366
00367
00368
00369 typedef eT value_type;
00370 typedef uword size_type;
00371
00372 typedef eT* iterator;
00373 typedef const eT* const_iterator;
00374
00375 typedef eT* col_iterator;
00376 typedef const eT* const_col_iterator;
00377
00378 class row_iterator
00379 {
00380 public:
00381
00382 inline row_iterator(Mat<eT>& in_M, const uword in_row);
00383
00384 inline eT& operator* ();
00385
00386 inline row_iterator& operator++();
00387 inline void operator++(int);
00388
00389 inline row_iterator& operator--();
00390 inline void operator--(int);
00391
00392 inline bool operator!=(const row_iterator& X) const;
00393 inline bool operator==(const row_iterator& X) const;
00394
00395 arma_aligned Mat<eT>& M;
00396 arma_aligned uword row;
00397 arma_aligned uword col;
00398 };
00399
00400
00401 class const_row_iterator
00402 {
00403 public:
00404
00405 const_row_iterator(const Mat<eT>& in_M, const uword in_row);
00406 const_row_iterator(const row_iterator& X);
00407
00408 inline eT operator*() const;
00409
00410 inline const_row_iterator& operator++();
00411 inline void operator++(int);
00412
00413 inline const_row_iterator& operator--();
00414 inline void operator--(int);
00415
00416 inline bool operator!=(const const_row_iterator& X) const;
00417 inline bool operator==(const const_row_iterator& X) const;
00418
00419 arma_aligned const Mat<eT>& M;
00420 arma_aligned uword row;
00421 arma_aligned uword col;
00422 };
00423
00424 inline iterator begin();
00425 inline const_iterator begin() const;
00426
00427 inline iterator end();
00428 inline const_iterator end() const;
00429
00430 inline col_iterator begin_col(const uword col_num);
00431 inline const_col_iterator begin_col(const uword col_num) const;
00432
00433 inline col_iterator end_col (const uword col_num);
00434 inline const_col_iterator end_col (const uword col_num) const;
00435
00436 inline row_iterator begin_row(const uword row_num);
00437 inline const_row_iterator begin_row(const uword row_num) const;
00438
00439 inline row_iterator end_row (const uword row_num);
00440 inline const_row_iterator end_row (const uword row_num) const;
00441
00442 inline void clear();
00443 inline bool empty() const;
00444 inline uword size() const;
00445
00446 template<uword fixed_n_rows, uword fixed_n_cols>
00447 class fixed : public Mat<eT>
00448 {
00449 private:
00450
00451 static const uword fixed_n_elem = fixed_n_rows * fixed_n_cols;
00452 static const bool use_extra = (fixed_n_elem > arma_config::mat_prealloc);
00453
00454 arma_aligned eT mem_local_extra[ (use_extra) ? fixed_n_elem : 1 ];
00455
00456 arma_inline void mem_setup();
00457
00458
00459 public:
00460
00461 static const uword n_rows = fixed_n_rows;
00462 static const uword n_cols = fixed_n_cols;
00463 static const uword n_elem = fixed_n_elem;
00464
00465
00466 arma_inline fixed();
00467 arma_inline fixed(const fixed<fixed_n_rows, fixed_n_cols>& X);
00468
00469 template<typename T1> inline fixed(const Base<eT,T1>& A);
00470 template<typename T1, typename T2> inline fixed(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
00471
00472 inline fixed( eT* aux_mem, const bool copy_aux_mem = true);
00473 inline fixed(const eT* aux_mem);
00474
00475 inline fixed(const char* text);
00476 inline fixed(const std::string& text);
00477
00478
00479
00480 template<typename T1> inline const Mat& operator=(const Base<eT,T1>& A);
00481
00482 inline const Mat& operator=(const eT val);
00483 inline const Mat& operator=(const char* text);
00484 inline const Mat& operator=(const std::string& text);
00485
00486
00487 inline subview_row<eT> operator()(const uword row_num, const span& col_span);
00488 inline const subview_row<eT> operator()(const uword row_num, const span& col_span) const;
00489
00490 inline subview_col<eT> operator()(const span& row_span, const uword col_num);
00491 inline const subview_col<eT> operator()(const span& row_span, const uword col_num) const;
00492
00493 inline subview<eT> operator()(const span& row_span, const span& col_span);
00494 inline const subview<eT> operator()(const span& row_span, const span& col_span) const;
00495
00496
00497 arma_inline arma_warn_unused eT& operator[] (const uword i);
00498 arma_inline arma_warn_unused eT operator[] (const uword i) const;
00499 arma_inline arma_warn_unused eT& at (const uword i);
00500 arma_inline arma_warn_unused eT at (const uword i) const;
00501 arma_inline arma_warn_unused eT& operator() (const uword i);
00502 arma_inline arma_warn_unused eT operator() (const uword i) const;
00503
00504 arma_inline arma_warn_unused eT& at (const uword in_row, const uword in_col);
00505 arma_inline arma_warn_unused eT at (const uword in_row, const uword in_col) const;
00506 arma_inline arma_warn_unused eT& operator() (const uword in_row, const uword in_col);
00507 arma_inline arma_warn_unused eT operator() (const uword in_row, const uword in_col) const;
00508
00509
00510 arma_hot inline const Mat<eT>& fill(const eT val);
00511 arma_hot inline const Mat<eT>& zeros();
00512 arma_hot inline const Mat<eT>& ones();
00513 };
00514
00515
00516 protected:
00517
00518 inline void init_cold();
00519 inline void init_warm(uword in_rows, uword in_cols);
00520
00521 inline void init(const std::string& text);
00522
00523 #if defined(ARMA_USE_CXX11)
00524 inline void init(const std::initializer_list<eT>& list);
00525 #endif
00526
00527 template<typename T1, typename T2>
00528 inline void init(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
00529
00530 inline void steal_mem(Mat& X);
00531
00532 inline Mat(const char junk, const eT* aux_mem, const uword aux_n_rows, const uword aux_n_cols);
00533
00534 friend class Cube<eT>;
00535 friend class glue_join;
00536 friend class op_strans;
00537 friend class op_htrans;
00538 friend class op_resize;
00539
00540
00541 public:
00542
00543 #ifdef ARMA_EXTRA_MAT_PROTO
00544 #include ARMA_INCFILE_WRAP(ARMA_EXTRA_MAT_PROTO)
00545 #endif
00546 };
00547
00548
00549
00550 class Mat_aux
00551 {
00552 public:
00553
00554 template<typename eT> arma_inline static void prefix_pp(Mat<eT>& x);
00555 template<typename T> arma_inline static void prefix_pp(Mat< std::complex<T> >& x);
00556
00557 template<typename eT> arma_inline static void postfix_pp(Mat<eT>& x);
00558 template<typename T> arma_inline static void postfix_pp(Mat< std::complex<T> >& x);
00559
00560 template<typename eT> arma_inline static void prefix_mm(Mat<eT>& x);
00561 template<typename T> arma_inline static void prefix_mm(Mat< std::complex<T> >& x);
00562
00563 template<typename eT> arma_inline static void postfix_mm(Mat<eT>& x);
00564 template<typename T> arma_inline static void postfix_mm(Mat< std::complex<T> >& x);
00565
00566 template<typename eT, typename T1> inline static void set_real(Mat<eT>& out, const Base<eT,T1>& X);
00567 template<typename T, typename T1> inline static void set_real(Mat< std::complex<T> >& out, const Base< T,T1>& X);
00568
00569 template<typename eT, typename T1> inline static void set_imag(Mat<eT>& out, const Base<eT,T1>& X);
00570 template<typename T, typename T1> inline static void set_imag(Mat< std::complex<T> >& out, const Base< T,T1>& X);
00571 };
00572
00573
00574