From daa5deedf32d9bce60c30020efd8efc02cf37b1c Mon Sep 17 00:00:00 2001 From: conrad Date: Wed, 22 Jan 2025 23:50:27 +1000 Subject: [PATCH] explicitly handle another corner case --- include/armadillo_bits/op_reshape_meat.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/armadillo_bits/op_reshape_meat.hpp b/include/armadillo_bits/op_reshape_meat.hpp index 0b207d24..5dd6810c 100644 --- a/include/armadillo_bits/op_reshape_meat.hpp +++ b/include/armadillo_bits/op_reshape_meat.hpp @@ -101,11 +101,12 @@ op_reshape::apply_mat_inplace(Mat& A, const uword new_n_rows, const uword ne if(A.is_empty()) { A.zeros(new_n_rows, new_n_cols); return; } + const bool is_into_empty = ( (new_n_cols == uword(0)) || (new_n_rows == uword(0)) ); const bool is_into_colvec = ( (new_n_cols == uword(1)) && (new_n_rows == A.n_elem) ); const bool is_into_rowvec = ( (new_n_rows == uword(1)) && (new_n_cols == A.n_elem) ); const bool is_rowcol_swap = ( (new_n_cols == A.n_rows) && (new_n_rows == A.n_cols) ); - if(is_into_colvec || is_into_rowvec || is_rowcol_swap) { A.set_size(new_n_rows, new_n_cols); return; } + if(is_into_empty || is_into_colvec || is_into_rowvec || is_rowcol_swap) { A.set_size(new_n_rows, new_n_cols); return; } Mat B(new_n_rows, new_n_cols, arma_nozeros_indicator()); @@ -231,11 +232,12 @@ op_reshape::apply_cube_inplace(Cube& A, const uword new_n_rows, const uword if(A.is_empty()) { A.zeros(new_n_rows, new_n_cols, new_n_slices); return; } + const bool is_into_empty = ( (new_n_cols == uword(0)) || (new_n_rows == uword(0)) || (new_n_slices == uword(0) ) ); const bool is_into_colvec = ( (new_n_cols == uword(1)) && (new_n_rows == A.n_elem) && (new_n_slices == uword(1) ) ); const bool is_into_rowvec = ( (new_n_rows == uword(1)) && (new_n_cols == A.n_elem) && (new_n_slices == uword(1) ) ); const bool is_rowcol_swap = ( (new_n_cols == A.n_rows) && (new_n_rows == A.n_cols) && (new_n_slices == A.n_slices) ); - if(is_into_colvec || is_into_rowvec || is_rowcol_swap) { A.set_size(new_n_rows, new_n_cols, new_n_slices); return; } + if(is_into_empty || is_into_colvec || is_into_rowvec || is_rowcol_swap) { A.set_size(new_n_rows, new_n_cols, new_n_slices); return; } Cube B(new_n_rows, new_n_cols, new_n_slices, arma_nozeros_indicator());