diff libinterp/octave-value/ov-range.cc @ 30858:fc3bd70cd1be stable

eliminate range<T>::make_constant function Overloading ranges as a way to create constant arrays adds complexity to the range class for limited benefit. It is currently only used for double-valued ranges and only provides constant row vectors. If this optimization is determined to be useful, it would probably be best to provide a data type that allows N-d constant arrays. The legacy range class was revived in a previous changeset so that constant ranges (increment == 0) can be loaded from existing data files and converted to ordinary arrays automatically. * Range.h (range<T>::make_constant): Delete. Remove all uses.
author John W. Eaton <jwe@octave.org>
date Tue, 22 Mar 2022 00:01:53 -0400
parents 95725e6ad9c1
children eba0a86471b9
line wrap: on
line diff
--- a/libinterp/octave-value/ov-range.cc	Mon Mar 21 23:58:35 2022 -0400
+++ b/libinterp/octave-value/ov-range.cc	Tue Mar 22 00:01:53 2022 -0400
@@ -766,13 +766,7 @@
   if (! is)
     error ("load: failed to load range constant");
 
-  if (inc != T (0))
-    r = octave::range<T> (base, inc, limit, rev);
-  else
-    {
-      octave_idx_type numel = static_cast<octave_idx_type> (limit);
-      r = octave::range<T>::make_constant (base, numel, rev);
-    }
+  r = octave::range<T> (base, inc, limit, rev);
 
   return true;
 }
@@ -946,13 +940,8 @@
       if (swap)
         swap_bytes<sizeof (bool)> (&rev);
     }
-  if (inc != T (0))
-    r = octave::range<T> (bas, inc, lim, rev);
-  else
-    {
-      octave_idx_type numel = static_cast<octave_idx_type> (lim);
-      r = octave::range<T>::make_constant (bas, numel, rev);
-    }
+
+  r = octave::range<T> (bas, inc, lim, rev);
 
   return true;
 }
@@ -1280,13 +1269,7 @@
 
       bool rev = with_reverse ? static_cast<bool> (rangevals[3]) : false;
 
-      if (rangevals[2] != T (0))
-        r = octave::range<T> (rangevals[0], rangevals[2], rangevals[1], rev);
-      else
-        {
-          octave_idx_type numel = static_cast<octave_idx_type> (rangevals[1]);
-          r = octave::range<T>::make_constant (rangevals[0], numel, rev);
-        }
+      r = octave::range<T> (rangevals[0], rangevals[2], rangevals[1], rev);
     }
 
   H5Tclose (range_type);