inline void arma_ostream::print(std::ostream& o, const subview_field<oT>& x) { arma_extra_debug_sigprint(); const arma_ostream_state stream_state(o); const std::streamsize cell_width = o.width(); const uword x_n_rows = x.n_rows; const uword x_n_cols = x.n_cols; const uword x_n_slices = x.n_slices; if(x_n_slices == 1) { for(uword col=0; col<x_n_cols; ++col) { o << "[field column " << col << ']' << '\n'; for(uword row=0; row<x_n_rows; ++row) { o.width(cell_width); o << x.at(row,col) << '\n'; } o << '\n'; } } else { for(uword slice=0; slice<x_n_slices; ++slice) { o << "[field slice " << slice << ']' << '\n'; for(uword col=0; col<x_n_cols; ++col) { o << "[field column " << col << ']' << '\n'; for(uword row=0; row<x_n_rows; ++row) { o.width(cell_width); o << x.at(row,col,slice) << '\n'; } o << '\n'; } o << '\n'; } } o.flush(); stream_state.restore(o); }
inline void arma_ostream::print(std::ostream& o, const subview_field<oT>& x) { arma_extra_debug_sigprint(); const arma_ostream_state stream_state(o); const std::streamsize cell_width = o.width(); const u32 x_n_rows = x.n_rows; const u32 x_n_cols = x.n_cols; for(u32 col=0; col<x_n_cols; ++col) { o << "[field column " << col << ']' << '\n'; for(u32 row=0; row<x_n_rows; ++row) { o.width(cell_width); o << x.at(row,col) << '\n'; } o << '\n'; } o.flush(); stream_state.restore(o); }
inline void subview_field<oT>::extract(field<oT>& actual_out, const subview_field<oT>& in) { arma_extra_debug_sigprint(); // const bool alias = (&actual_out == &in.f); field<oT>* tmp = (alias) ? new field<oT> : 0; field<oT>& out = (alias) ? (*tmp) : actual_out; // const uword n_rows = in.n_rows; const uword n_cols = in.n_cols; const uword n_slices = in.n_slices; out.set_size(n_rows, n_cols, n_slices); arma_extra_debug_print(arma_boost::format("out.n_rows = %d out.n_cols = %d out.n_slices = %d in.m.n_rows = %d in.m.n_cols = %d in.m.n_slices = %d") % out.n_rows % out.n_cols % out.n_slices % in.f.n_rows % in.f.n_cols % in.f.n_slices); if(n_slices == 1) { for(uword col = 0; col < n_cols; ++col) for(uword row = 0; row < n_rows; ++row) { out.at(row,col) = in.at(row,col); } } else { for(uword slice = 0; slice < n_slices; ++slice) for(uword col = 0; col < n_cols; ++col ) for(uword row = 0; row < n_rows; ++row ) { out.at(row,col,slice) = in.at(row,col,slice); } } if(alias) { actual_out = out; delete tmp; } }