Mark QElapsedTimer functions as Q_DECL_NOTHROW

All functions in QElapsedTimer are marked Q_DECL_NOTHROW. This code
is often introduced in many places to deal with timeouts and doesn't
need exception handlers. In particular, it's used in QMutex locking.

In addition, mark QDateTime::currentMSecsSinceEpoch as nothrow, as it
can't throw exceptions either and it is needed by the generic
QElapsedTimer.

Q{Date,Time}::current{Date,Time} operate on local time and run into at
least one cancellation point, which we must consider throwing. And
returning a QDateTime allocates memory.

Change-Id: Id776c5ec831fc06d7419a9ff5442d9b35cff1a22
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
Thiago Macieira 2012-08-06 16:27:18 +02:00 committed by Qt by Nokia
parent 44e638f069
commit 6a8537356b
8 changed files with 63 additions and 63 deletions

View File

@ -3028,7 +3028,7 @@ QDateTime QDateTime::currentDateTimeUtc()
return QDateTime(d, t, Qt::UTC);
}
qint64 QDateTime::currentMSecsSinceEpoch()
qint64 QDateTime::currentMSecsSinceEpoch() Q_DECL_NOTHROW
{
QDate d;
QTime t;
@ -3139,7 +3139,7 @@ QDateTime QDateTime::currentDateTimeUtc()
return dt;
}
qint64 QDateTime::currentMSecsSinceEpoch()
qint64 QDateTime::currentMSecsSinceEpoch() Q_DECL_NOTHROW
{
// posix compliant system
// we have milliseconds

View File

@ -259,7 +259,7 @@ public:
#endif
static QDateTime fromTime_t(uint secsSince1Jan1970UTC);
static QDateTime fromMSecsSinceEpoch(qint64 msecs);
static qint64 currentMSecsSinceEpoch();
static qint64 currentMSecsSinceEpoch() Q_DECL_NOTHROW;
private:
friend class QDateTimePrivate;

View File

@ -224,7 +224,7 @@ static const qint64 invalidData = Q_INT64_C(0x8000000000000000);
\sa isValid(), start(), restart()
*/
void QElapsedTimer::invalidate()
void QElapsedTimer::invalidate() Q_DECL_NOTHROW
{
t1 = t2 = invalidData;
}
@ -235,7 +235,7 @@ void QElapsedTimer::invalidate()
\sa invalidate(), start(), restart()
*/
bool QElapsedTimer::isValid() const
bool QElapsedTimer::isValid() const Q_DECL_NOTHROW
{
return t1 != invalidData && t2 != invalidData;
}
@ -248,7 +248,7 @@ bool QElapsedTimer::isValid() const
\sa elapsed()
*/
bool QElapsedTimer::hasExpired(qint64 timeout) const
bool QElapsedTimer::hasExpired(qint64 timeout) const Q_DECL_NOTHROW
{
// if timeout is -1, quint64(timeout) is LLINT_MAX, so this will be
// considered as never expired

View File

@ -59,28 +59,28 @@ public:
MachAbsoluteTime,
PerformanceCounter
};
static ClockType clockType();
static bool isMonotonic();
static ClockType clockType() Q_DECL_NOTHROW;
static bool isMonotonic() Q_DECL_NOTHROW;
void start();
qint64 restart();
void invalidate();
bool isValid() const;
void start() Q_DECL_NOTHROW;
qint64 restart() Q_DECL_NOTHROW;
void invalidate() Q_DECL_NOTHROW;
bool isValid() const Q_DECL_NOTHROW;
qint64 nsecsElapsed() const;
qint64 elapsed() const;
bool hasExpired(qint64 timeout) const;
qint64 nsecsElapsed() const Q_DECL_NOTHROW;
qint64 elapsed() const Q_DECL_NOTHROW;
bool hasExpired(qint64 timeout) const Q_DECL_NOTHROW;
qint64 msecsSinceReference() const;
qint64 msecsTo(const QElapsedTimer &other) const;
qint64 secsTo(const QElapsedTimer &other) const;
qint64 msecsSinceReference() const Q_DECL_NOTHROW;
qint64 msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW;
qint64 secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW;
bool operator==(const QElapsedTimer &other) const
bool operator==(const QElapsedTimer &other) const Q_DECL_NOTHROW
{ return t1 == other.t1 && t2 == other.t2; }
bool operator!=(const QElapsedTimer &other) const
bool operator!=(const QElapsedTimer &other) const Q_DECL_NOTHROW
{ return !(*this == other); }
friend bool Q_CORE_EXPORT operator<(const QElapsedTimer &v1, const QElapsedTimer &v2);
friend bool Q_CORE_EXPORT operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW;
private:
qint64 t1;

View File

@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
\sa isMonotonic()
*/
QElapsedTimer::ClockType QElapsedTimer::clockType()
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
{
return SystemTime;
}
@ -61,7 +61,7 @@ QElapsedTimer::ClockType QElapsedTimer::clockType()
\sa clockType(), QElapsedTimer::ClockType
*/
bool QElapsedTimer::isMonotonic()
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
{
return false;
}
@ -76,7 +76,7 @@ bool QElapsedTimer::isMonotonic()
\sa restart(), invalidate(), elapsed()
*/
void QElapsedTimer::start()
void QElapsedTimer::start() Q_DECL_NOTHROW
{
restart();
}
@ -95,7 +95,7 @@ void QElapsedTimer::start()
\sa start(), invalidate(), elapsed()
*/
qint64 QElapsedTimer::restart()
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
{
qint64 old = t1;
t1 = QDateTime::currentMSecsSinceEpoch();
@ -114,7 +114,7 @@ qint64 QElapsedTimer::restart()
\sa start(), restart(), hasExpired(), invalidate()
*/
qint64 QElapsedTimer::nsecsElapsed() const
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
{
return elapsed() * 1000000;
}
@ -126,7 +126,7 @@ qint64 QElapsedTimer::nsecsElapsed() const
\sa start(), restart(), hasExpired(), invalidate()
*/
qint64 QElapsedTimer::elapsed() const
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
{
return QDateTime::currentMSecsSinceEpoch() - t1;
}
@ -142,7 +142,7 @@ qint64 QElapsedTimer::elapsed() const
\sa clockType(), elapsed()
*/
qint64 QElapsedTimer::msecsSinceReference() const
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
{
return t1;
}
@ -157,7 +157,7 @@ qint64 QElapsedTimer::msecsSinceReference() const
\sa secsTo(), elapsed()
*/
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
qint64 diff = other.t1 - t1;
return diff;
@ -172,7 +172,7 @@ qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
\sa msecsTo(), elapsed()
*/
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
return msecsTo(other) / 1000;
}
@ -186,7 +186,7 @@ qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
and the other isn't. However, two invalid timers are equal and thus this
function will return false.
*/
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
{
return v1.t1 < v2.t1;
}

View File

@ -47,12 +47,12 @@
QT_BEGIN_NAMESPACE
QElapsedTimer::ClockType QElapsedTimer::clockType()
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
{
return MachAbsoluteTime;
}
bool QElapsedTimer::isMonotonic()
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
{
return true;
}
@ -71,7 +71,7 @@ static qint64 absoluteToMSecs(qint64 cpuTime)
return absoluteToNSecs(cpuTime) / 1000000;
}
timeval qt_gettime()
timeval qt_gettime() Q_DECL_NOTHROW
{
timeval tv;
@ -82,13 +82,13 @@ timeval qt_gettime()
return tv;
}
void QElapsedTimer::start()
void QElapsedTimer::start() Q_DECL_NOTHROW
{
t1 = mach_absolute_time();
t2 = 0;
}
qint64 QElapsedTimer::restart()
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
{
qint64 old = t1;
t1 = mach_absolute_time();
@ -97,34 +97,34 @@ qint64 QElapsedTimer::restart()
return absoluteToMSecs(t1 - old);
}
qint64 QElapsedTimer::nsecsElapsed() const
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
{
uint64_t cpu_time = mach_absolute_time();
return absoluteToNSecs(cpu_time - t1);
}
qint64 QElapsedTimer::elapsed() const
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
{
uint64_t cpu_time = mach_absolute_time();
return absoluteToMSecs(cpu_time - t1);
}
qint64 QElapsedTimer::msecsSinceReference() const
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
{
return absoluteToMSecs(t1);
}
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
return absoluteToMSecs(other.t1 - t1);
}
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
return msecsTo(other) / 1000;
}
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
{
return v1.t1 < v2.t1;
}

View File

@ -102,13 +102,13 @@ static inline qint64 fractionAdjustment()
}
}
bool QElapsedTimer::isMonotonic()
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
{
unixCheckClockType();
return monotonicClockAvailable;
}
QElapsedTimer::ClockType QElapsedTimer::clockType()
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
{
unixCheckClockType();
return monotonicClockAvailable ? MonotonicClock : SystemTime;
@ -134,7 +134,7 @@ static inline void do_gettime(qint64 *sec, qint64 *frac)
}
// used in qcore_unix.cpp and qeventdispatcher_unix.cpp
timeval qt_gettime()
timeval qt_gettime() Q_DECL_NOTHROW
{
qint64 sec, frac;
do_gettime(&sec, &frac);
@ -157,17 +157,17 @@ static qint64 elapsedAndRestart(qint64 sec, qint64 frac,
return sec * Q_INT64_C(1000) + frac / fractionAdjustment();
}
void QElapsedTimer::start()
void QElapsedTimer::start() Q_DECL_NOTHROW
{
do_gettime(&t1, &t2);
}
qint64 QElapsedTimer::restart()
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
{
return elapsedAndRestart(t1, t2, &t1, &t2);
}
qint64 QElapsedTimer::nsecsElapsed() const
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
{
qint64 sec, frac;
do_gettime(&sec, &frac);
@ -178,30 +178,30 @@ qint64 QElapsedTimer::nsecsElapsed() const
return sec * Q_INT64_C(1000000000) + frac;
}
qint64 QElapsedTimer::elapsed() const
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
{
qint64 sec, frac;
return elapsedAndRestart(t1, t2, &sec, &frac);
}
qint64 QElapsedTimer::msecsSinceReference() const
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
{
return t1 * Q_INT64_C(1000) + t2 / fractionAdjustment();
}
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
qint64 secs = other.t1 - t1;
qint64 fraction = other.t2 - t2;
return secs * Q_INT64_C(1000) + fraction / fractionAdjustment();
}
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
return other.t1 - t1;
}
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
{
return v1.t1 < v2.t1 || (v1.t1 == v2.t1 && v1.t2 < v2.t2);
}

View File

@ -125,7 +125,7 @@ int qt_msectime()
return ticksToNanoseconds(getTickCount()) / 1000000;
}
QElapsedTimer::ClockType QElapsedTimer::clockType()
QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW
{
resolveLibs();
@ -135,18 +135,18 @@ QElapsedTimer::ClockType QElapsedTimer::clockType()
return TickCounter;
}
bool QElapsedTimer::isMonotonic()
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
{
return true;
}
void QElapsedTimer::start()
void QElapsedTimer::start() Q_DECL_NOTHROW
{
t1 = getTickCount();
t2 = 0;
}
qint64 QElapsedTimer::restart()
qint64 QElapsedTimer::restart() Q_DECL_NOTHROW
{
qint64 oldt1 = t1;
t1 = getTickCount();
@ -154,35 +154,35 @@ qint64 QElapsedTimer::restart()
return ticksToNanoseconds(t1 - oldt1) / 1000000;
}
qint64 QElapsedTimer::nsecsElapsed() const
qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
{
qint64 elapsed = getTickCount() - t1;
return ticksToNanoseconds(elapsed);
}
qint64 QElapsedTimer::elapsed() const
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
{
qint64 elapsed = getTickCount() - t1;
return ticksToNanoseconds(elapsed) / 1000000;
}
qint64 QElapsedTimer::msecsSinceReference() const
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
{
return ticksToNanoseconds(t1) / 1000000;
}
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
qint64 difference = other.t1 - t1;
return ticksToNanoseconds(difference) / 1000000;
}
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
return msecsTo(other) / 1000;
}
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2)
bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) Q_DECL_NOTHROW
{
return (v1.t1 - v2.t1) < 0;
}