mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-02 14:51:40 +00:00
Add more comparision operators to Timestamp
svn-id: r47071
This commit is contained in:
parent
5b635fd610
commit
1c6ccf8000
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -103,6 +103,40 @@ class TimestampTestSuite : public CxxTest::TestSuite
|
||||
}
|
||||
|
||||
|
||||
void test_compare() {
|
||||
const Audio::Timestamp a = Audio::Timestamp(60, 1000);
|
||||
Audio::Timestamp b = Audio::Timestamp(60, 60);
|
||||
Audio::Timestamp c = Audio::Timestamp(60, 44100);
|
||||
|
||||
TS_ASSERT(a <= b);
|
||||
TS_ASSERT(b <= c);
|
||||
TS_ASSERT(a <= c);
|
||||
|
||||
TS_ASSERT(b >= a);
|
||||
TS_ASSERT(c >= b);
|
||||
TS_ASSERT(c >= a);
|
||||
|
||||
b = b.addFrames(60 / 12);
|
||||
c = c.addFrames(44100 / 10);
|
||||
|
||||
TS_ASSERT(a < b);
|
||||
TS_ASSERT(b < c);
|
||||
TS_ASSERT(a < c);
|
||||
|
||||
TS_ASSERT(b > a);
|
||||
TS_ASSERT(c > b);
|
||||
TS_ASSERT(c > a);
|
||||
|
||||
TS_ASSERT(a <= b);
|
||||
TS_ASSERT(b <= c);
|
||||
TS_ASSERT(a <= c);
|
||||
|
||||
TS_ASSERT(b >= a);
|
||||
TS_ASSERT(c >= b);
|
||||
TS_ASSERT(c >= a);
|
||||
}
|
||||
|
||||
|
||||
void test_framerate() {
|
||||
const Audio::Timestamp a = Audio::Timestamp(500, 1000);
|
||||
const Audio::Timestamp b = Audio::Timestamp(500, 67);
|
||||
|
Loading…
x
Reference in New Issue
Block a user