Mercurial > jwe > octave
changeset 30413:b9701804901d
maint: Merge stable to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 30 Nov 2021 11:05:05 -0500 |
parents | aa6036ced2b3 (current diff) 597275db9c7f (diff) |
children | 6b17822663f8 |
files | |
diffstat | 1 files changed, 27 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/Range.cc Tue Nov 30 16:08:42 2021 +0100 +++ b/liboctave/array/Range.cc Tue Nov 30 11:05:05 2021 -0500 @@ -254,20 +254,25 @@ template <typename T> void - xinit (octave_int<T> base, octave_int<T> limit, octave_int<T> inc, - octave_int<T>& final_val, octave_idx_type& nel) + xinit (const octave_int<T>& base, const octave_int<T>& limit, + const octave_int<T>& inc, octave_int<T>& final_val, + octave_idx_type& nel) { - // We need an integer division that is truncating decimals instead of - // rounding. So, use underlying C++ types instead of octave_int<T>. - // FIXME: The numerator might underflow or overflow. Add checks for that. - nel = ((inc == octave_int<T> (0) - || (limit > base && inc < octave_int<T> (0)) - || (limit < base && inc > octave_int<T> (0))) - ? 0 - : (limit.value () - base.value () + inc.value ()) / inc.value ()); + // We need an integer division that is truncating decimals instead + // of rounding. So, use underlying C++ types instead of + // octave_int<T>. + + // FIXME: The numerator might underflow or overflow. Add checks for + // that. - final_val = base + (nel - 1) * inc; - } + nel = ((inc == octave_int<T> (0) + || (limit > base && inc < octave_int<T> (0)) + || (limit < base && inc > octave_int<T> (0))) + ? 0 + : (limit.value () - base.value () + inc.value ()) / inc.value ()); + + final_val = base + (nel - 1) * inc; + } template <typename T> bool @@ -294,70 +299,70 @@ void range<double>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<float>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_int8>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_int16>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_int32>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_int64>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_uint8>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_uint16>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_uint32>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <> void range<octave_uint64>::init (void) { - return xinit (m_base, m_limit, m_increment, m_final, m_numel); + xinit (m_base, m_limit, m_increment, m_final, m_numel); } template <>