diff options
-rw-r--r-- | base/time/time.h | 30 | ||||
-rw-r--r-- | base/time/time_unittest.cc | 72 | ||||
-rw-r--r-- | content/browser/dom_storage/dom_storage_area.cc | 2 |
3 files changed, 83 insertions, 21 deletions
diff --git a/base/time/time.h b/base/time/time.h index 6d61861..b18c0b2 100644 --- a/base/time/time.h +++ b/base/time/time.h @@ -158,34 +158,30 @@ class BASE_EXPORT TimeDelta { return TimeDelta(-delta_); } - // Computations with ints, note that we only allow multiplicative operations - // with ints, and additive operations with other deltas. - TimeDelta operator*(int64 a) const { + // Computations with numeric types. + template<typename T> + TimeDelta operator*(T a) const { return TimeDelta(delta_ * a); } - TimeDelta operator/(int64 a) const { + template<typename T> + TimeDelta operator/(T a) const { return TimeDelta(delta_ / a); } - TimeDelta& operator*=(int64 a) { + template<typename T> + TimeDelta& operator*=(T a) { delta_ *= a; return *this; } - TimeDelta& operator/=(int64 a) { + template<typename T> + TimeDelta& operator/=(T a) { delta_ /= a; return *this; } + int64 operator/(TimeDelta a) const { return delta_ / a.delta_; } - // Multiplicative computations with floats. - TimeDelta multiply_by(double a) const { - return TimeDelta(delta_ * a); - } - TimeDelta divide_by(double a) const { - return TimeDelta(delta_ / a); - } - // Defined below because it depends on the definition of the other classes. Time operator+(Time t) const; TimeTicks operator+(TimeTicks t) const; @@ -213,7 +209,6 @@ class BASE_EXPORT TimeDelta { private: friend class Time; friend class TimeTicks; - friend TimeDelta operator*(int64 a, TimeDelta td); // Constructs a delta given the duration in microseconds. This is private // to avoid confusion by callers with an integer constructor. Use @@ -225,8 +220,9 @@ class BASE_EXPORT TimeDelta { int64 delta_; }; -inline TimeDelta operator*(int64 a, TimeDelta td) { - return TimeDelta(a * td.delta_); +template<typename T> +inline TimeDelta operator*(T a, TimeDelta td) { + return td * a; } // For logging use only. diff --git a/base/time/time_unittest.cc b/base/time/time_unittest.cc index 6387ec7..a96787c 100644 --- a/base/time/time_unittest.cc +++ b/base/time/time_unittest.cc @@ -868,12 +868,78 @@ TEST(TimeDelta, Magnitude) { } -TEST(TimeDelta, multiply_by) { +TEST(TimeDelta, NumericOperators) { double d = 0.5; EXPECT_EQ(TimeDelta::FromMilliseconds(500), - TimeDelta::FromMilliseconds(1000).multiply_by(d)); + TimeDelta::FromMilliseconds(1000) * d); EXPECT_EQ(TimeDelta::FromMilliseconds(2000), - TimeDelta::FromMilliseconds(1000).divide_by(d)); + TimeDelta::FromMilliseconds(1000) / d); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) *= d); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) /= d); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + d * TimeDelta::FromMilliseconds(1000)); + + float f = 0.5; + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) * f); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) / f); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) *= f); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) /= f); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + f * TimeDelta::FromMilliseconds(1000)); + + + int i = 2; + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) * i); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) / i); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) *= i); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) /= i); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + i * TimeDelta::FromMilliseconds(1000)); + + int64_t i64 = 2; + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) * i64); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) / i64); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) *= i64); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) /= i64); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + i64 * TimeDelta::FromMilliseconds(1000)); + + + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) * 0.5); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) / 0.5); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) *= 0.5); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) /= 0.5); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + 0.5 * TimeDelta::FromMilliseconds(1000)); + + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) * 2); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) / 2); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + TimeDelta::FromMilliseconds(1000) *= 2); + EXPECT_EQ(TimeDelta::FromMilliseconds(500), + TimeDelta::FromMilliseconds(1000) /= 2); + EXPECT_EQ(TimeDelta::FromMilliseconds(2000), + 2 * TimeDelta::FromMilliseconds(1000)); } TEST(TimeDeltaLogging, DCheckEqCompiles) { diff --git a/content/browser/dom_storage/dom_storage_area.cc b/content/browser/dom_storage/dom_storage_area.cc index a2611eb..9ff7bfb 100644 --- a/content/browser/dom_storage/dom_storage_area.cc +++ b/content/browser/dom_storage/dom_storage_area.cc @@ -48,7 +48,7 @@ DOMStorageArea::RateLimiter::RateLimiter(size_t desired_rate, } base::TimeDelta DOMStorageArea::RateLimiter::ComputeTimeNeeded() const { - return time_quantum_.multiply_by(samples_ / rate_); + return time_quantum_ * (samples_ / rate_); } base::TimeDelta DOMStorageArea::RateLimiter::ComputeDelayNeeded( |