Mercurial > hg > octave-lyh
diff src/ov-re-sparse.cc @ 7193:cbdee3da62bd
[project @ 2007-11-26 22:20:25 by dbateman]
author | dbateman |
---|---|
date | Mon, 26 Nov 2007 22:20:25 +0000 |
parents | a1dbe9d80eee |
children | 8c32f95c2639 |
line wrap: on
line diff
--- a/src/ov-re-sparse.cc +++ b/src/ov-re-sparse.cc @@ -67,20 +67,23 @@ { octave_base_value *retval = 0; - // Don't use numel, since it can overflow for very large matrices - // Note that for the second test, this means it becomes approximative - // since it involves a cast to double to avoid issues of overflow - if (matrix.rows () == 1 && matrix.cols () == 1) + if (Vsparse_auto_mutate) { - // Const copy of the matrix, so the right version of () operator used - const SparseMatrix tmp (matrix); + // Don't use numel, since it can overflow for very large matrices + // Note that for the second test, this means it becomes approximative + // since it involves a cast to double to avoid issues of overflow + if (matrix.rows () == 1 && matrix.cols () == 1) + { + // Const copy of the matrix, so the right version of () operator used + const SparseMatrix tmp (matrix); - retval = new octave_scalar (tmp (0)); + retval = new octave_scalar (tmp (0)); + } + else if (matrix.cols () > 0 && matrix.rows () > 0 && + double (matrix.byte_size ()) > double (matrix.rows ()) * + double (matrix.cols ()) * sizeof (double)) + retval = new octave_matrix (matrix.matrix_value ()); } - else if (matrix.cols () > 0 && matrix.rows () > 0 && - double (matrix.byte_size ()) > double (matrix.rows ()) * - double (matrix.cols ()) * sizeof (double)) - retval = new octave_matrix (matrix.matrix_value ()); return retval; }