00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00017
00018
00019
00020 struct field_prealloc_n_elem
00021 {
00022 static const uword val = 16;
00023 };
00024
00025
00026
00029
00030 template<typename oT>
00031 class field
00032 {
00033 public:
00034
00035 typedef oT object_type;
00036
00037 const uword n_rows;
00038 const uword n_cols;
00039 const uword n_elem;
00040
00041
00042 private:
00043
00044 arma_aligned oT** mem;
00045 arma_aligned oT* mem_local[ field_prealloc_n_elem::val ];
00047
00048
00049 public:
00050
00051 inline ~field();
00052 inline field();
00053
00054 inline field(const field& x);
00055 inline const field& operator=(const field& x);
00056
00057 inline field(const subview_field<oT>& x);
00058 inline const field& operator=(const subview_field<oT>& x);
00059
00060 inline explicit field(const uword n_elem_in);
00061 inline field(const uword n_rows_in, const uword n_cols_in);
00062
00063 inline void set_size(const uword n_obj_in);
00064 inline void set_size(const uword n_rows_in, const uword n_cols_in);
00065
00066 template<typename oT2>
00067 inline void copy_size(const field<oT2>& x);
00068
00069 arma_inline oT& operator[](const uword i);
00070 arma_inline const oT& operator[](const uword i) const;
00071
00072 arma_inline oT& at(const uword i);
00073 arma_inline const oT& at(const uword i) const;
00074
00075 arma_inline oT& operator()(const uword i);
00076 arma_inline const oT& operator()(const uword i) const;
00077
00078 arma_inline oT& at(const uword row, const uword col);
00079 arma_inline const oT& at(const uword row, const uword col) const;
00080
00081 arma_inline oT& operator()(const uword row, const uword col);
00082 arma_inline const oT& operator()(const uword row, const uword col) const;
00083
00084 inline field_injector<field> operator<<(const oT& val);
00085 inline field_injector<field> operator<<(const injector_end_of_row& x);
00086
00087
00088 inline subview_field<oT> row(const uword row_num);
00089 inline const subview_field<oT> row(const uword row_num) const;
00090
00091 inline subview_field<oT> col(const uword col_num);
00092 inline const subview_field<oT> col(const uword col_num) const;
00093
00094 inline subview_field<oT> rows(const uword in_row1, const uword in_row2);
00095 inline const subview_field<oT> rows(const uword in_row1, const uword in_row2) const;
00096
00097 inline subview_field<oT> cols(const uword in_col1, const uword in_col2);
00098 inline const subview_field<oT> cols(const uword in_col1, const uword in_col2) const;
00099
00100 inline subview_field<oT> subfield(const uword in_row1, const uword in_col1, const uword in_row2, const uword in_col2);
00101 inline const subview_field<oT> subfield(const uword in_row1, const uword in_col1, const uword in_row2, const uword in_col2) const;
00102
00103 inline subview_field<oT> subfield (const span& row_span, const span& col_span);
00104 inline const subview_field<oT> subfield (const span& row_span, const span& col_span) const;
00105
00106 inline subview_field<oT> operator()(const span& row_span, const span& col_span);
00107 inline const subview_field<oT> operator()(const span& row_span, const span& col_span) const;
00108
00109
00110 inline void print(const std::string extra_text = "") const;
00111 inline void print(std::ostream& user_stream, const std::string extra_text = "") const;
00112
00113 inline void fill(const oT& x);
00114
00115 inline void reset();
00116 inline void reset_objects();
00117
00118 arma_inline bool is_empty() const;
00119
00120 arma_inline arma_warn_unused bool in_range(const uword i) const;
00121 arma_inline arma_warn_unused bool in_range(const span& x) const;
00122
00123 arma_inline arma_warn_unused bool in_range(const uword in_row, const uword in_col ) const;
00124 arma_inline arma_warn_unused bool in_range(const span& row_span, const uword in_col ) const;
00125 arma_inline arma_warn_unused bool in_range(const uword in_row, const span& col_span) const;
00126 arma_inline arma_warn_unused bool in_range(const span& row_span, const span& col_span) const;
00127
00128 inline bool save(const std::string name, const file_type type = arma_binary, const bool print_status = true) const;
00129 inline bool save( std::ostream& os, const file_type type = arma_binary, const bool print_status = true) const;
00130
00131 inline bool load(const std::string name, const file_type type = auto_detect, const bool print_status = true);
00132 inline bool load( std::istream& is, const file_type type = auto_detect, const bool print_status = true);
00133
00134
00135 inline bool quiet_save(const std::string name, const file_type type = arma_binary) const;
00136 inline bool quiet_save( std::ostream& os, const file_type type = arma_binary) const;
00137
00138 inline bool quiet_load(const std::string name, const file_type type = auto_detect);
00139 inline bool quiet_load( std::istream& is, const file_type type = auto_detect);
00140
00141
00142
00143
00144 class iterator
00145 {
00146 public:
00147
00148 inline iterator(field<oT>& in_M, const bool at_end = false);
00149
00150 inline oT& operator* ();
00151
00152 inline iterator& operator++();
00153 inline void operator++(int);
00154
00155 inline iterator& operator--();
00156 inline void operator--(int);
00157
00158 inline bool operator!=(const iterator& X) const;
00159 inline bool operator==(const iterator& X) const;
00160
00161 arma_aligned field<oT>& M;
00162 arma_aligned uword i;
00163 };
00164
00165
00166 class const_iterator
00167 {
00168 public:
00169
00170 const_iterator(const field<oT>& in_M, const bool at_end = false);
00171 const_iterator(const iterator& X);
00172
00173 inline const oT& operator*() const;
00174
00175 inline const_iterator& operator++();
00176 inline void operator++(int);
00177
00178 inline const_iterator& operator--();
00179 inline void operator--(int);
00180
00181 inline bool operator!=(const const_iterator& X) const;
00182 inline bool operator==(const const_iterator& X) const;
00183
00184 arma_aligned const field<oT>& M;
00185 arma_aligned uword i;
00186 };
00187
00188 inline iterator begin();
00189 inline const_iterator begin() const;
00190
00191 inline iterator end();
00192 inline const_iterator end() const;
00193
00194
00195 private:
00196
00197 inline void init(const field<oT>& x);
00198 inline void init(const uword n_rows_in, const uword n_cols_in);
00199
00200 inline void delete_objects();
00201 inline void create_objects();
00202
00203 friend class field_aux;
00204 friend class subview_field<oT>;
00205
00206
00207 public:
00208
00209 #ifdef ARMA_EXTRA_FIELD_PROTO
00210 #include ARMA_INCFILE_WRAP(ARMA_EXTRA_FIELD_PROTO)
00211 #endif
00212 };
00213
00214
00215
00216 class field_aux
00217 {
00218 public:
00219
00220 template<typename oT> inline static void reset_objects(field< oT >& x);
00221 template<typename eT> inline static void reset_objects(field< Mat<eT> >& x);
00222 template<typename eT> inline static void reset_objects(field< Col<eT> >& x);
00223 template<typename eT> inline static void reset_objects(field< Row<eT> >& x);
00224 template<typename eT> inline static void reset_objects(field< Cube<eT> >& x);
00225 inline static void reset_objects(field< std::string >& x);
00226
00227
00228 template<typename oT> inline static bool save(const field< oT >& x, const std::string& name, const file_type type, std::string& err_msg);
00229 template<typename oT> inline static bool save(const field< oT >& x, std::ostream& os, const file_type type, std::string& err_msg);
00230 template<typename oT> inline static bool load( field< oT >& x, const std::string& name, const file_type type, std::string& err_msg);
00231 template<typename oT> inline static bool load( field< oT >& x, std::istream& is, const file_type type, std::string& err_msg);
00232
00233 template<typename eT> inline static bool save(const field< Mat<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00234 template<typename eT> inline static bool save(const field< Mat<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg);
00235 template<typename eT> inline static bool load( field< Mat<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00236 template<typename eT> inline static bool load( field< Mat<eT> >& x, std::istream& is, const file_type type, std::string& err_msg);
00237
00238 template<typename eT> inline static bool save(const field< Col<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00239 template<typename eT> inline static bool save(const field< Col<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg);
00240 template<typename eT> inline static bool load( field< Col<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00241 template<typename eT> inline static bool load( field< Col<eT> >& x, std::istream& is, const file_type type, std::string& err_msg);
00242
00243 template<typename eT> inline static bool save(const field< Row<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00244 template<typename eT> inline static bool save(const field< Row<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg);
00245 template<typename eT> inline static bool load( field< Row<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00246 template<typename eT> inline static bool load( field< Row<eT> >& x, std::istream& is, const file_type type, std::string& err_msg);
00247
00248 template<typename eT> inline static bool save(const field< Cube<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00249 template<typename eT> inline static bool save(const field< Cube<eT> >& x, std::ostream& os, const file_type type, std::string& err_msg);
00250 template<typename eT> inline static bool load( field< Cube<eT> >& x, const std::string& name, const file_type type, std::string& err_msg);
00251 template<typename eT> inline static bool load( field< Cube<eT> >& x, std::istream& is, const file_type type, std::string& err_msg);
00252
00253 inline static bool save(const field< std::string >& x, const std::string& name, const file_type type, std::string& err_msg);
00254 inline static bool save(const field< std::string >& x, std::ostream& os, const file_type type, std::string& err_msg);
00255 inline static bool load( field< std::string >& x, const std::string& name, const file_type type, std::string& err_msg);
00256 inline static bool load( field< std::string >& x, std::istream& is, const file_type type, std::string& err_msg);
00257
00258 };
00259
00260