Mercurial > octave
changeset 27568:e78b6e7f743c
Store constant row vectors for ones(), zeros(), pi(), e() as Ranges for compactness.
* data.cc (fill_matrix (const octave_value_list& args, int val, const char *fcn),
fill_matrix (const octave_value_list& args, double val, float fval, const char *fcn),
fill_matrix (const octave_value_list& args, double val, const char *fcn)): Change
3 overloads of fill_matrix to store 2-D row vector return values as ranges to
save memory. Can only store finite values (no Inf, -Inf, NaN, or NA) in Ranges.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 26 Oct 2019 19:00:54 -0700 |
parents | 51c2e46e9a36 |
children | 29ccef7e5295 |
files | libinterp/corefcn/data.cc |
diffstat | 1 files changed, 10 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc Sat Oct 26 05:56:52 2019 -0700 +++ b/libinterp/corefcn/data.cc Sat Oct 26 19:00:54 2019 -0700 @@ -4016,8 +4016,8 @@ case oct_data_conv::dt_double: { - if (val == 1 && dims.ndims () == 2 && dims(0) == 1) - retval = Range (1.0, 0.0, dims(1)); // packed form + if (dims.ndims () == 2 && dims(0) == 1) + retval = Range (static_cast<double> (val), 0.0, dims(1)); else retval = NDArray (dims, val); } @@ -4088,7 +4088,10 @@ break; case oct_data_conv::dt_double: - retval = NDArray (dims, val); + if (dims.ndims () == 2 && dims(0) == 1 && octave::math::isfinite (val)) + retval = Range (val, 0.0, dims(1)); // Packed form + else + retval = NDArray (dims, val); break; default: @@ -4151,7 +4154,10 @@ break; case oct_data_conv::dt_double: - retval = NDArray (dims, val); + if (dims.ndims () == 2 && dims(0) == 1 && octave::math::isfinite (val)) + retval = Range (val, 0.0, dims(1)); // Packed form + else + retval = NDArray (dims, val); break; default: