changeset 21321:79a51b7e00b6

eliminate some copy and paste code fragments in the Range class * Range.h, Range.cc (Range::limit_internal, Range::init): New functions. (Range::Range, Range::set_base, Range::set_limit, Range::set_inc): Use them to eliminate copy and paste code fragments.
author John W. Eaton <jwe@octave.org>
date Mon, 22 Feb 2016 21:28:22 -0500
parents 241666557fec
children 909129eb77c5
files liboctave/array/Range.cc liboctave/array/Range.h
diffstat 2 files changed, 32 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/Range.cc	Mon Feb 22 08:52:36 2016 -0800
+++ b/liboctave/array/Range.cc	Mon Feb 22 21:28:22 2016 -0500
@@ -309,19 +309,8 @@
   if (rng_base != b)
     {
       rng_base = b;
-      rng_numel = numel_internal ();
 
-      double tmplimit = rng_limit;
-
-      if (rng_inc > 0)
-        tmplimit = max ();
-      else
-        tmplimit = min ();
-
-      if (tmplimit != rng_limit)
-        rng_limit = tmplimit;
-
-      clear_cache ();
+      init ();
     }
 }
 
@@ -331,19 +320,8 @@
   if (rng_limit != l)
     {
       rng_limit = l;
-      rng_numel = numel_internal ();
 
-      double tmplimit = rng_limit;
-
-      if (rng_inc > 0)
-        tmplimit = max ();
-      else
-        tmplimit = min ();
-
-      if (tmplimit != rng_limit)
-        rng_limit = tmplimit;
-
-      clear_cache ();
+      init ();
     }
 }
 
@@ -353,19 +331,8 @@
   if (rng_inc != i)
     {
       rng_inc = i;
-      rng_numel = numel_internal ();
 
-      double tmplimit = rng_limit;
-
-      if (rng_inc > 0)
-        tmplimit = max ();
-      else
-        tmplimit = min ();
-
-      if (tmplimit != rng_limit)
-        rng_limit = tmplimit;
-
-      clear_cache ();
+      init ();
     }
 }
 
@@ -593,3 +560,25 @@
 
   return retval;
 }
+
+double
+Range::limit_internal (void) const
+{
+  double tmp_limit = rng_limit;
+
+  if (rng_inc > 0)
+    tmp_limit = max ();
+  else
+    tmp_limit = min ();
+
+  return (tmp_limit != rng_limit) ? tmp_limit : rng_limit;
+}
+
+void
+Range::init (void)
+{
+  rng_numel = numel_internal ();
+  rng_limit = limit_internal ();
+
+  clear_cache ();
+}
--- a/liboctave/array/Range.h	Mon Feb 22 08:52:36 2016 -0800
+++ b/liboctave/array/Range.h	Mon Feb 22 21:28:22 2016 -0500
@@ -47,30 +47,14 @@
     : rng_base (b), rng_limit (l), rng_inc (1),
       rng_numel (numel_internal ()), cache ()
   {
-    double tmplimit = rng_limit;
-
-    if (rng_inc > 0)
-      tmplimit = max ();
-    else
-      tmplimit = min ();
-
-    if (tmplimit != rng_limit)
-      rng_limit = tmplimit;
+    rng_limit = limit_internal ();
   }
 
   Range (double b, double l, double i)
     : rng_base (b), rng_limit (l), rng_inc (i),
       rng_numel (numel_internal ()), cache ()
   {
-    double tmplimit = rng_limit;
-
-    if (rng_inc > 0)
-      tmplimit = max ();
-    else
-      tmplimit = min ();
-
-    if (tmplimit != rng_limit)
-      rng_limit = tmplimit;
+    rng_limit = limit_internal ();
   }
 
   // For operators' usage (to preserve element count).
@@ -85,15 +69,8 @@
         // Code below is only needed if the resulting range must be 100%
         // correctly constructed.  If the Range object created is only
         // a temporary one used by operators this may be unnecessary.
-        double tmplimit = rng_limit;
 
-        if (rng_inc > 0)
-          tmplimit = max ();
-        else
-          tmplimit = min ();
-
-        if (tmplimit != rng_limit)
-          rng_limit = tmplimit;
+        rng_limit = limit_internal ();
       }
   }
 
@@ -165,6 +142,10 @@
 
   octave_idx_type numel_internal (void) const;
 
+  double limit_internal (void) const;
+
+  void init (void);
+
   void clear_cache (void) const { cache.resize (0, 0); }
 
 protected: