diff options
author | Max Horn | 2010-01-06 12:15:05 +0000 |
---|---|---|
committer | Max Horn | 2010-01-06 12:15:05 +0000 |
commit | 1c6ccf8000c8eb34e4ae3d68312a23261f87862c (patch) | |
tree | bf4bc59de8797536a2a91d985d0fbfde44fcaffe /sound | |
parent | 5b635fd610a2d1f895adadbb43af3a76a36f1fd0 (diff) | |
download | scummvm-rg350-1c6ccf8000c8eb34e4ae3d68312a23261f87862c.tar.gz scummvm-rg350-1c6ccf8000c8eb34e4ae3d68312a23261f87862c.tar.bz2 scummvm-rg350-1c6ccf8000c8eb34e4ae3d68312a23261f87862c.zip |
Add more comparision operators to Timestamp
svn-id: r47071
Diffstat (limited to 'sound')
-rw-r--r-- | sound/timestamp.cpp | 34 | ||||
-rw-r--r-- | sound/timestamp.h | 13 |
2 files changed, 39 insertions, 8 deletions
diff --git a/sound/timestamp.cpp b/sound/timestamp.cpp index 3d9178da2b..9d95fbe556 100644 --- a/sound/timestamp.cpp +++ b/sound/timestamp.cpp @@ -72,12 +72,40 @@ Timestamp Timestamp::convertToFramerate(int newFramerate) const { } bool Timestamp::operator==(const Timestamp &ts) const { - return (ts._secs == _secs) && - (ts._numberOfFrames * _framerate == _numberOfFrames * ts._framerate); + return cmp(ts) == 0; } bool Timestamp::operator!=(const Timestamp &ts) const { - return !(*this == ts); + return cmp(ts) != 0; +} + +bool Timestamp::operator<(const Timestamp &ts) const { + return cmp(ts) < 0; +} + +bool Timestamp::operator<=(const Timestamp &ts) const { + return cmp(ts) <= 0; +} + +bool Timestamp::operator>(const Timestamp &ts) const { + return cmp(ts) > 0; +} + +bool Timestamp::operator>=(const Timestamp &ts) const { + return cmp(ts) >= 0; +} + +int Timestamp::cmp(const Timestamp &ts) const { + int delta = _secs - ts._secs; + if (!delta) { + const uint g = gcd(_framerate, ts._framerate); + const uint p = _framerate / g; + const uint q = ts._framerate / g; + + delta = (_numberOfFrames * q - ts._numberOfFrames * p); + } + + return delta; } diff --git a/sound/timestamp.h b/sound/timestamp.h index 2e8689a81d..2d4f3db693 100644 --- a/sound/timestamp.h +++ b/sound/timestamp.h @@ -90,12 +90,11 @@ public: * as equal even if they use different framerates. */ bool operator==(const Timestamp &ts) const; - bool operator!=(const Timestamp &ts) const; -// bool operator<(const Timestamp &ts) const; -// bool operator<=(const Timestamp &ts) const; -// bool operator>(const Timestamp &ts) const; -// bool operator>=(const Timestamp &ts) const; + bool operator<(const Timestamp &ts) const; + bool operator<=(const Timestamp &ts) const; + bool operator>(const Timestamp &ts) const; + bool operator>=(const Timestamp &ts) const; /** * Returns a new timestamp, which corresponds to the time encoded @@ -129,6 +128,10 @@ public: /** Return the framerate used by this timestamp. */ int getFramerate() const { return _framerate / _framerateFactor; } + +protected: + + int cmp(const Timestamp &ts) const; }; |