Chris@49: // Copyright (C) 2011 NICTA (www.nicta.com.au) Chris@49: // Copyright (C) 2011 Conrad Sanderson Chris@49: // Chris@49: // This Source Code Form is subject to the terms of the Mozilla Public Chris@49: // License, v. 2.0. If a copy of the MPL was not distributed with this Chris@49: // file, You can obtain one at http://mozilla.org/MPL/2.0/. Chris@49: Chris@49: Chris@49: Chris@49: //! \addtogroup op_resize Chris@49: //! @{ Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_resize::apply(Mat& actual_out, const Op& in) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: typedef typename T1::elem_type eT; Chris@49: Chris@49: const uword out_n_rows = in.aux_uword_a; Chris@49: const uword out_n_cols = in.aux_uword_b; Chris@49: Chris@49: const unwrap tmp(in.m); Chris@49: const Mat& A = tmp.M; Chris@49: Chris@49: const uword A_n_rows = A.n_rows; Chris@49: const uword A_n_cols = A.n_cols; Chris@49: Chris@49: Mat B; Chris@49: Chris@49: const bool alias = (&actual_out == &A); Chris@49: Chris@49: Mat& out = alias ? B : actual_out; Chris@49: Chris@49: out.set_size(out_n_rows, out_n_cols); Chris@49: Chris@49: if( (out_n_rows > A_n_rows) || (out_n_cols > A_n_cols) ) Chris@49: { Chris@49: out.zeros(); Chris@49: } Chris@49: Chris@49: if( (out.n_elem > 0) && (A.n_elem > 0) ) Chris@49: { Chris@49: const uword end_row = (std::min)(out_n_rows, A_n_rows) - 1; Chris@49: const uword end_col = (std::min)(out_n_cols, A_n_cols) - 1; Chris@49: Chris@49: out.submat(0, 0, end_row, end_col) = A.submat(0, 0, end_row, end_col); Chris@49: } Chris@49: Chris@49: if(alias) Chris@49: { Chris@49: actual_out.steal_mem(B); Chris@49: } Chris@49: Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: template Chris@49: inline Chris@49: void Chris@49: op_resize::apply(Cube& actual_out, const OpCube& in) Chris@49: { Chris@49: arma_extra_debug_sigprint(); Chris@49: Chris@49: typedef typename T1::elem_type eT; Chris@49: Chris@49: const uword out_n_rows = in.aux_uword_a; Chris@49: const uword out_n_cols = in.aux_uword_b; Chris@49: const uword out_n_slices = in.aux_uword_c; Chris@49: Chris@49: const unwrap_cube tmp(in.m); Chris@49: const Cube& A = tmp.M; Chris@49: Chris@49: const uword A_n_rows = A.n_rows; Chris@49: const uword A_n_cols = A.n_cols; Chris@49: const uword A_n_slices = A.n_slices; Chris@49: Chris@49: Cube B; Chris@49: Chris@49: const bool alias = (&actual_out == &A); Chris@49: Chris@49: Cube& out = alias ? B : actual_out; Chris@49: Chris@49: out.set_size(out_n_rows, out_n_cols, out_n_slices); Chris@49: Chris@49: if( (out_n_rows > A_n_rows) || (out_n_cols > A_n_cols) || (out_n_slices > A_n_slices) ) Chris@49: { Chris@49: out.zeros(); Chris@49: } Chris@49: Chris@49: if( (out.n_elem > 0) && (A.n_elem > 0) ) Chris@49: { Chris@49: const uword end_row = (std::min)(out_n_rows, A_n_rows) - 1; Chris@49: const uword end_col = (std::min)(out_n_cols, A_n_cols) - 1; Chris@49: const uword end_slice = (std::min)(out_n_slices, A_n_slices) - 1; Chris@49: Chris@49: out.subcube(0, 0, 0, end_row, end_col, end_slice) = A.subcube(0, 0, 0, end_row, end_col, end_slice); Chris@49: } Chris@49: Chris@49: if(alias) Chris@49: { Chris@49: actual_out.steal_mem(B); Chris@49: } Chris@49: Chris@49: } Chris@49: Chris@49: Chris@49: Chris@49: //! @}