# HG changeset patch # User jwe # Date 1078339779 0 # Node ID 72a6d410a14a42ff0593a75099ac8f50c2673b64 # Parent b60be7678bdc76133808eab7a0eb934c0d869a09 [project @ 2004-03-03 18:49:39 by jwe] diff -r b60be7678bdc -r 72a6d410a14a liboctave/ChangeLog --- 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 +2004-03-02 Paul Kienzle + + * 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 diff -r b60be7678bdc -r 72a6d410a14a liboctave/Range.cc --- 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 #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) { diff -r b60be7678bdc -r 72a6d410a14a liboctave/Range.h --- 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 - -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;