Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 template<typename eT>
00024 class subview : public Base<eT, subview<eT> >
00025 {
00026 public: arma_aligned const Mat<eT>& m;
00027 protected: arma_aligned Mat<eT>* m_ptr;
00028
00029 public:
00030
00031 typedef eT elem_type;
00032 typedef typename get_pod_type<elem_type>::result pod_type;
00033
00034 const u32 aux_row1;
00035 const u32 aux_col1;
00036
00037 const u32 aux_row2;
00038 const u32 aux_col2;
00039
00040 const u32 n_rows;
00041 const u32 n_cols;
00042 const u32 n_elem;
00043
00044
00045 protected:
00046
00047 arma_inline subview(const Mat<eT>& in_m, const u32 in_row1, const u32 in_col1, const u32 in_row2, const u32 in_col2);
00048 arma_inline subview( Mat<eT>& in_m, const u32 in_row1, const u32 in_col1, const u32 in_row2, const u32 in_col2);
00049
00050
00051 public:
00052
00053 inline ~subview();
00054
00055 inline void operator+= (const eT val);
00056 inline void operator-= (const eT val);
00057 inline void operator*= (const eT val);
00058 inline void operator/= (const eT val);
00059
00060 template<typename T1> inline void operator_equ_mat (const Base<eT,T1>& x);
00061 template<typename T1> inline void operator_equ_proxy(const Base<eT,T1>& x);
00062
00063
00064 template<typename T1> inline void operator= (const Base<eT,T1>& x);
00065 template<typename T1> inline void operator+= (const Base<eT,T1>& x);
00066 template<typename T1> inline void operator-= (const Base<eT,T1>& x);
00067 template<typename T1> inline void operator%= (const Base<eT,T1>& x);
00068 template<typename T1> inline void operator/= (const Base<eT,T1>& x);
00069
00070 inline void operator= (const subview& x);
00071 inline void operator+= (const subview& x);
00072 inline void operator-= (const subview& x);
00073 inline void operator%= (const subview& x);
00074 inline void operator/= (const subview& x);
00075
00076 inline static void extract(Mat<eT>& out, const subview& in);
00077
00078 inline static void plus_inplace(Mat<eT>& out, const subview& in);
00079 inline static void minus_inplace(Mat<eT>& out, const subview& in);
00080 inline static void schur_inplace(Mat<eT>& out, const subview& in);
00081 inline static void div_inplace(Mat<eT>& out, const subview& in);
00082
00083 inline void fill(const eT val);
00084 inline void zeros();
00085
00086 arma_inline eT& operator[](const u32 i);
00087 arma_inline eT operator[](const u32 i) const;
00088
00089 arma_inline eT& operator()(const u32 i);
00090 arma_inline eT operator()(const u32 i) const;
00091
00092 arma_inline eT& operator()(const u32 in_row, const u32 in_col);
00093 arma_inline eT operator()(const u32 in_row, const u32 in_col) const;
00094
00095 arma_inline eT& at(const u32 in_row, const u32 in_col);
00096 arma_inline eT at(const u32 in_row, const u32 in_col) const;
00097
00098 arma_inline eT* colptr(const u32 in_col);
00099 arma_inline const eT* colptr(const u32 in_col) const;
00100
00101 inline bool check_overlap(const subview& x) const;
00102
00103 inline bool is_vec() const;
00104
00105
00106 private:
00107
00108 friend class Mat<eT>;
00109 subview();
00110 };
00111
00112
00113
00114 template<typename eT>
00115 class subview_col : public subview<eT>
00116 {
00117 public:
00118
00119 typedef eT elem_type;
00120 typedef typename get_pod_type<elem_type>::result pod_type;
00121
00122 inline void operator= (const subview<eT>& x);
00123 inline void operator= (const subview_col& x);
00124
00125 template<typename T1>
00126 inline void operator= (const Base<eT,T1>& x);
00127
00128
00129 protected:
00130
00131 arma_inline subview_col(const Mat<eT>& in_m, const u32 in_col);
00132 arma_inline subview_col( Mat<eT>& in_m, const u32 in_col);
00133
00134 arma_inline subview_col(const Mat<eT>& in_m, const u32 in_col, const u32 in_row1, const u32 in_row2);
00135 arma_inline subview_col( Mat<eT>& in_m, const u32 in_col, const u32 in_row1, const u32 in_row2);
00136
00137
00138 private:
00139
00140 friend class Mat<eT>;
00141 friend class Col<eT>;
00142
00143 subview_col();
00144 };
00145
00146
00147
00148 template<typename eT>
00149 class subview_row : public subview<eT>
00150 {
00151 public:
00152
00153 typedef eT elem_type;
00154 typedef typename get_pod_type<elem_type>::result pod_type;
00155
00156 inline void operator= (const subview<eT>& x);
00157 inline void operator= (const subview_row& x);
00158
00159 template<typename T1>
00160 inline void operator= (const Base<eT,T1>& x);
00161
00162
00163 protected:
00164
00165 arma_inline subview_row(const Mat<eT>& in_m, const u32 in_row);
00166 arma_inline subview_row( Mat<eT>& in_m, const u32 in_row);
00167
00168 arma_inline subview_row(const Mat<eT>& in_m, const u32 in_row, const u32 in_col1, const u32 in_col2);
00169 arma_inline subview_row( Mat<eT>& in_m, const u32 in_row, const u32 in_col1, const u32 in_col2);
00170
00171
00172 private:
00173
00174 friend class Mat<eT>;
00175 friend class Row<eT>;
00176
00177 subview_row();
00178 };
00179
00180
00181
00182