# HG changeset patch # User Jaroslav Hajek # Date 1232952544 -3600 # Node ID 0131fa223dbc9dffaea9e27e367d865c41ad516c # Parent 79845b1793cf079861840b800a51b1b399b2dd63 make length invariant in range-scalar ops diff -r 79845b1793cf -r 0131fa223dbc liboctave/Range.cc --- a/liboctave/Range.cc Sun Jan 25 08:04:56 2009 +0100 +++ b/liboctave/Range.cc Mon Jan 26 07:49:04 2009 +0100 @@ -291,37 +291,37 @@ Range operator - (const Range& r) { - return Range (-r.base (), -r.limit (), -r.inc ()); + return Range (-r.base (), -r.inc (), r.nelem ()); } Range operator + (double x, const Range& r) { - return Range (x + r.base (), x + r.limit (), r.inc ()); + return Range (x + r.base (), r.inc (), r.nelem ()); } Range operator + (const Range& r, double x) { - return Range (r.base () + x, r.limit () + x, r.inc ()); + return Range (r.base () + x, r.inc (), r.nelem ()); } Range operator - (double x, const Range& r) { - return Range (x - r.base (), x - r.limit (), -r.inc ()); + return Range (x - r.base (), -r.inc (), r.nelem ()); } Range operator - (const Range& r, double x) { - return Range (r.base () - x, r.limit () - x, r.inc ()); + return Range (r.base () - x, r.inc (), r.nelem ()); } Range operator * (double x, const Range& r) { - return Range (x * r.base (), x * r.limit (), x * r.inc ()); + return Range (x * r.base (), x * r.inc (), r.nelem ()); } Range operator * (const Range& r, double x) { - return Range (r.base () * x, r.limit () * x, r.inc () * x); + return Range (r.base () * x, r.inc () * x, r.nelem ()); } diff -r 79845b1793cf -r 0131fa223dbc liboctave/Range.h --- a/liboctave/Range.h Sun Jan 25 08:04:56 2009 +0100 +++ b/liboctave/Range.h Mon Jan 26 07:49:04 2009 +0100 @@ -50,6 +50,11 @@ : rng_base (b), rng_limit (l), rng_inc (i), rng_nelem (nelem_internal ()), cache () { } + // For operators' usage (to preserve element count). + Range (double b, double i, octave_idx_type n) + : rng_base (b), rng_limit (b + n * i), rng_inc (i), + rng_nelem (n), cache () { } + double base (void) const { return rng_base; } double limit (void) const { return rng_limit; } double inc (void) const { return rng_inc; }