changeset 4810:72a6d410a14a

[project @ 2004-03-03 18:49:39 by jwe]
author jwe
date Wed, 03 Mar 2004 18:49:39 +0000
parents b60be7678bdc
children 198f3712c692
files liboctave/ChangeLog liboctave/Range.cc liboctave/Range.h
diffstat 3 files changed, 21 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/ChangeLog	Tue Mar 02 17:40:08 2004 +0000
+++ b/liboctave/ChangeLog	Wed Mar 03 18:49:39 2004 +0000
@@ -1,4 +1,10 @@
-2004-03-02  John W. Eaton  <jwe@bevo.che.wisc.edu>
+2004-03-02  Paul Kienzle  <pkienzle@users.sf.net>
+
+	* Range.cc (Range::matrix_value): Cache result.
+	(Range::sort): Clear cache.
+	* Range.h (Range::cache): New data member.
+	(Range::set_base, Range::set_limit, Range::set_inc): Clear cache.
+	(Range::print_range): Delete.
 
 2004-03-02  David Bateman  <dbateman@free.fr>
  
--- a/liboctave/Range.cc	Tue Mar 02 17:40:08 2004 +0000
+++ b/liboctave/Range.cc	Wed Mar 03 18:49:39 2004 +0000
@@ -35,7 +35,6 @@
 #include <iostream>
 
 #include "Range.h"
-#include "dMatrix.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 
@@ -53,15 +52,13 @@
 Matrix
 Range::matrix_value (void) const
 {
-  Matrix retval;
-
-  if (rng_nelem > 0)
+  if (rng_nelem > 0 && cache.rows() == 0)
     {
-      retval.resize (1, rng_nelem);
+      cache.resize (1, rng_nelem);
       double b = rng_base;
       double increment = rng_inc;
       for (int i = 0; i < rng_nelem; i++)
-	retval(i) = b + i * increment;
+	cache(i) = b + i * increment;
 
       // On some machines (x86 with extended precision floating point
       // arithmetic, for example) it is possible that we can overshoot
@@ -69,14 +66,15 @@
       // we were very careful in our calculation of the number of
       // elements.
 
-      if ((rng_inc > 0 && retval(rng_nelem-1) > rng_limit)
-	  || (rng_inc < 0 && retval(rng_nelem-1) < rng_limit))
-	retval(rng_nelem-1) = rng_limit;
+      if ((rng_inc > 0 && cache(rng_nelem-1) > rng_limit)
+	  || (rng_inc < 0 && cache(rng_nelem-1) < rng_limit))
+	cache(rng_nelem-1) = rng_limit;
     }
 
-  return retval;
+  return cache;
 }
 
+
 // NOTE: max and min only return useful values if nelem > 0.
 
 double
@@ -131,18 +129,10 @@
       rng_base = min ();
       rng_limit = tmp;
       rng_inc = -rng_inc;
+      cache.resize (0,0);
     }
 }
 
-void
-Range::print_range (void)
-{
-  std::cerr << "Range: rng_base = " << rng_base
-	    << " rng_limit " << rng_limit
-	    << " rng_inc " << rng_inc
-	    << " rng_nelem " << rng_nelem << "\n";
-}
-
 std::ostream&
 operator << (std::ostream& os, const Range& a)
 {
--- a/liboctave/Range.h	Tue Mar 02 17:40:08 2004 +0000
+++ b/liboctave/Range.h	Wed Mar 03 18:49:39 2004 +0000
@@ -28,8 +28,7 @@
 #endif
 
 #include <iostream>
-
-class Matrix;
+#include "dMatrix.h"
 
 class
 Range
@@ -65,9 +64,9 @@
 
   void sort (void);
 
-  void set_base (double b) { rng_base = b;  }
-  void set_limit (double l) { rng_limit = l; }
-  void set_inc (double i) { rng_inc = i;   }
+  void set_base (double b) { rng_base = b; cache.resize (0,0); }
+  void set_limit (double l) { rng_limit = l; cache.resize (0,0); }
+  void set_inc (double i) { rng_inc = i; cache.resize (0,0); }
 
   friend std::ostream& operator << (std::ostream& os, const Range& r);
   friend std::istream& operator >> (std::istream& is, Range& r);
@@ -76,6 +75,7 @@
 
  private:
 
+  mutable Matrix cache;
   double rng_base;
   double rng_limit;
   double rng_inc;