зеркало из https://github.com/mozilla/pjs.git
Bug 486991. Add useful operators to TimeStamp/TimeDuration. r=bsmedberg
This commit is contained in:
Родитель
e8b3db60b3
Коммит
67280a9bfa
|
@ -59,17 +59,38 @@ class TimeDuration {
|
||||||
public:
|
public:
|
||||||
// The default duration is 0.
|
// The default duration is 0.
|
||||||
TimeDuration() : mValue(0) {}
|
TimeDuration() : mValue(0) {}
|
||||||
|
// Allow construction using '0' as the initial value, for readability,
|
||||||
|
// but no other numbers (so we don't have any implicit unit conversions).
|
||||||
|
struct _SomethingVeryRandomHere;
|
||||||
|
TimeDuration(_SomethingVeryRandomHere* aZero) : mValue(0) {
|
||||||
|
NS_ASSERTION(!aZero, "Who's playing funny games here?");
|
||||||
|
}
|
||||||
// Default copy-constructor and assignment are OK
|
// Default copy-constructor and assignment are OK
|
||||||
|
|
||||||
double ToSeconds() const { return double(mValue)/PR_TicksPerSecond(); }
|
double ToSeconds() const { return double(mValue)/PR_TicksPerSecond(); }
|
||||||
|
|
||||||
static TimeDuration FromSeconds(PRInt32 aSeconds) {
|
static TimeDuration FromSeconds(PRInt32 aSeconds) {
|
||||||
// No overflow is possible here
|
// No overflow is possible here
|
||||||
return TimeDuration(PRInt64(aSeconds)*PR_TicksPerSecond());
|
return TimeDuration::FromTicks(PRInt64(aSeconds)*PR_TicksPerSecond());
|
||||||
}
|
}
|
||||||
static TimeDuration FromMilliseconds(PRInt32 aMilliseconds) {
|
static TimeDuration FromMilliseconds(PRInt32 aMilliseconds) {
|
||||||
// No overflow is possible here
|
// No overflow is possible here
|
||||||
return TimeDuration(PRInt64(aMilliseconds)*PR_TicksPerSecond()/1000);
|
return TimeDuration::FromTicks(PRInt64(aMilliseconds)*PR_TicksPerSecond()/1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeDuration operator+(const TimeDuration& aOther) const {
|
||||||
|
return TimeDuration::FromTicks(mValue + aOther.mValue);
|
||||||
|
}
|
||||||
|
TimeDuration operator-(const TimeDuration& aOther) const {
|
||||||
|
return TimeDuration::FromTicks(mValue - aOther.mValue);
|
||||||
|
}
|
||||||
|
TimeDuration& operator+=(const TimeDuration& aOther) {
|
||||||
|
mValue += aOther.mValue;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
TimeDuration& operator-=(const TimeDuration& aOther) {
|
||||||
|
mValue -= aOther.mValue;
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
PRBool operator<(const TimeDuration& aOther) const {
|
PRBool operator<(const TimeDuration& aOther) const {
|
||||||
|
@ -87,7 +108,6 @@ public:
|
||||||
|
|
||||||
// We could define additional operators here:
|
// We could define additional operators here:
|
||||||
// -- convert to/from other time units
|
// -- convert to/from other time units
|
||||||
// -- add/subtract durations
|
|
||||||
// -- scale duration by a float
|
// -- scale duration by a float
|
||||||
// but let's do that on demand.
|
// but let's do that on demand.
|
||||||
// Comparing durations for equality should be discouraged.
|
// Comparing durations for equality should be discouraged.
|
||||||
|
@ -95,7 +115,11 @@ public:
|
||||||
private:
|
private:
|
||||||
friend class TimeStamp;
|
friend class TimeStamp;
|
||||||
|
|
||||||
TimeDuration(PRInt64 aTicks) : mValue(aTicks) {}
|
static TimeDuration FromTicks(PRInt64 aTicks) {
|
||||||
|
TimeDuration t;
|
||||||
|
t.mValue = aTicks;
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
// Duration in PRIntervalTime units
|
// Duration in PRIntervalTime units
|
||||||
PRInt64 mValue;
|
PRInt64 mValue;
|
||||||
|
@ -145,7 +169,26 @@ public:
|
||||||
TimeDuration operator-(const TimeStamp& aOther) const {
|
TimeDuration operator-(const TimeStamp& aOther) const {
|
||||||
NS_ASSERTION(!IsNull(), "Cannot compute with a null value");
|
NS_ASSERTION(!IsNull(), "Cannot compute with a null value");
|
||||||
NS_ASSERTION(!aOther.IsNull(), "Cannot compute with aOther null value");
|
NS_ASSERTION(!aOther.IsNull(), "Cannot compute with aOther null value");
|
||||||
return TimeDuration(mValue - aOther.mValue);
|
return TimeDuration::FromTicks(mValue - aOther.mValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeStamp operator+(const TimeDuration& aOther) const {
|
||||||
|
NS_ASSERTION(!IsNull(), "Cannot compute with a null value");
|
||||||
|
return TimeStamp(mValue + aOther.mValue);
|
||||||
|
}
|
||||||
|
TimeStamp operator-(const TimeDuration& aOther) const {
|
||||||
|
NS_ASSERTION(!IsNull(), "Cannot compute with a null value");
|
||||||
|
return TimeStamp(mValue - aOther.mValue);
|
||||||
|
}
|
||||||
|
TimeStamp& operator+=(const TimeDuration& aOther) {
|
||||||
|
NS_ASSERTION(!IsNull(), "Cannot compute with a null value");
|
||||||
|
mValue += aOther.mValue;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
TimeStamp& operator-=(const TimeDuration& aOther) {
|
||||||
|
NS_ASSERTION(!IsNull(), "Cannot compute with a null value");
|
||||||
|
mValue -= aOther.mValue;
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
PRBool operator<(const TimeStamp& aOther) const {
|
PRBool operator<(const TimeStamp& aOther) const {
|
||||||
|
@ -169,9 +212,6 @@ public:
|
||||||
return mValue > aOther.mValue;
|
return mValue > aOther.mValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We could define additional operators here:
|
|
||||||
// -- add a TimeDuration to a TimeStamp to get a TimeStamp
|
|
||||||
// but let's do that on-demand.
|
|
||||||
// Comparing TimeStamps for equality should be discouraged. Adding
|
// Comparing TimeStamps for equality should be discouraged. Adding
|
||||||
// two TimeStamps, or scaling TimeStamps, is nonsense and must never
|
// two TimeStamps, or scaling TimeStamps, is nonsense and must never
|
||||||
// be allowed.
|
// be allowed.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче