diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2012-02-17 12:02:14 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-22 00:07:31 +0100 |
commit | f3141c58badbd2da9eb42021e9704742c3e52a9b (patch) | |
tree | b8b45bc1639ddeceac9d2fb326944a895794bd6b /src/corelib/tools/qsize.h | |
parent | 4c577aead97abb4e22fedcf57cb9aea6c5bfa623 (diff) |
QtCore: add constexpr to geometric classes
This turns code like QPoint(12, 12) into a compile-time
expression, under a C++11 compiler, and allows to define
arrays of these types that end up in read-only memory,
just like PODs would.
Some constructors and QLine::pointAt() needed to be
adjusted to fit into the empty-body/only-return-expression
requirement for constexpr constructors/functions.
Change-Id: Id11ee2752c948930c3e40a91d1f6d7c97db7a373
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qsize.h')
-rw-r--r-- | src/corelib/tools/qsize.h | 139 |
1 files changed, 66 insertions, 73 deletions
diff --git a/src/corelib/tools/qsize.h b/src/corelib/tools/qsize.h index fece0ac943..88af9e876b 100644 --- a/src/corelib/tools/qsize.h +++ b/src/corelib/tools/qsize.h @@ -52,27 +52,27 @@ QT_BEGIN_NAMESPACE class Q_CORE_EXPORT QSize { public: - QSize(); - QSize(int w, int h); + Q_DECL_CONSTEXPR QSize(); + Q_DECL_CONSTEXPR QSize(int w, int h); - bool isNull() const; - bool isEmpty() const; - bool isValid() const; + Q_DECL_CONSTEXPR bool isNull() const; + Q_DECL_CONSTEXPR bool isEmpty() const; + Q_DECL_CONSTEXPR bool isValid() const; - int width() const; - int height() const; + Q_DECL_CONSTEXPR int width() const; + Q_DECL_CONSTEXPR int height() const; void setWidth(int w); void setHeight(int h); void transpose(); - QSize transposed() const; + Q_DECL_CONSTEXPR QSize transposed() const; void scale(int w, int h, Qt::AspectRatioMode mode); void scale(const QSize &s, Qt::AspectRatioMode mode); QSize scaled(int w, int h, Qt::AspectRatioMode mode) const; QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const; - QSize expandedTo(const QSize &) const; - QSize boundedTo(const QSize &) const; + Q_DECL_CONSTEXPR QSize expandedTo(const QSize &) const; + Q_DECL_CONSTEXPR QSize boundedTo(const QSize &) const; int &rwidth(); int &rheight(); @@ -82,12 +82,12 @@ public: QSize &operator*=(qreal c); QSize &operator/=(qreal c); - friend inline bool operator==(const QSize &, const QSize &); - friend inline bool operator!=(const QSize &, const QSize &); - friend inline const QSize operator+(const QSize &, const QSize &); - friend inline const QSize operator-(const QSize &, const QSize &); - friend inline const QSize operator*(const QSize &, qreal); - friend inline const QSize operator*(qreal, const QSize &); + friend inline Q_DECL_CONSTEXPR bool operator==(const QSize &, const QSize &); + friend inline Q_DECL_CONSTEXPR bool operator!=(const QSize &, const QSize &); + friend inline Q_DECL_CONSTEXPR const QSize operator+(const QSize &, const QSize &); + friend inline Q_DECL_CONSTEXPR const QSize operator-(const QSize &, const QSize &); + friend inline Q_DECL_CONSTEXPR const QSize operator*(const QSize &, qreal); + friend inline Q_DECL_CONSTEXPR const QSize operator*(qreal, const QSize &); friend inline const QSize operator/(const QSize &, qreal); private: @@ -110,25 +110,23 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QSize &); QSize inline functions *****************************************************************************/ -inline QSize::QSize() -{ wd = ht = -1; } +Q_DECL_CONSTEXPR inline QSize::QSize() : wd(-1), ht(-1) {} -inline QSize::QSize(int w, int h) -{ wd = w; ht = h; } +Q_DECL_CONSTEXPR inline QSize::QSize(int w, int h) : wd(w), ht(h) {} -inline bool QSize::isNull() const +Q_DECL_CONSTEXPR inline bool QSize::isNull() const { return wd==0 && ht==0; } -inline bool QSize::isEmpty() const +Q_DECL_CONSTEXPR inline bool QSize::isEmpty() const { return wd<1 || ht<1; } -inline bool QSize::isValid() const +Q_DECL_CONSTEXPR inline bool QSize::isValid() const { return wd>=0 && ht>=0; } -inline int QSize::width() const +Q_DECL_CONSTEXPR inline int QSize::width() const { return wd; } -inline int QSize::height() const +Q_DECL_CONSTEXPR inline int QSize::height() const { return ht; } inline void QSize::setWidth(int w) @@ -137,7 +135,7 @@ inline void QSize::setWidth(int w) inline void QSize::setHeight(int h) { ht = h; } -inline QSize QSize::transposed() const +Q_DECL_CONSTEXPR inline QSize QSize::transposed() const { return QSize(ht, wd); } inline void QSize::scale(int w, int h, Qt::AspectRatioMode mode) @@ -164,22 +162,22 @@ inline QSize &QSize::operator-=(const QSize &s) inline QSize &QSize::operator*=(qreal c) { wd = qRound(wd*c); ht = qRound(ht*c); return *this; } -inline bool operator==(const QSize &s1, const QSize &s2) +Q_DECL_CONSTEXPR inline bool operator==(const QSize &s1, const QSize &s2) { return s1.wd == s2.wd && s1.ht == s2.ht; } -inline bool operator!=(const QSize &s1, const QSize &s2) +Q_DECL_CONSTEXPR inline bool operator!=(const QSize &s1, const QSize &s2) { return s1.wd != s2.wd || s1.ht != s2.ht; } -inline const QSize operator+(const QSize & s1, const QSize & s2) +Q_DECL_CONSTEXPR inline const QSize operator+(const QSize & s1, const QSize & s2) { return QSize(s1.wd+s2.wd, s1.ht+s2.ht); } -inline const QSize operator-(const QSize &s1, const QSize &s2) +Q_DECL_CONSTEXPR inline const QSize operator-(const QSize &s1, const QSize &s2) { return QSize(s1.wd-s2.wd, s1.ht-s2.ht); } -inline const QSize operator*(const QSize &s, qreal c) +Q_DECL_CONSTEXPR inline const QSize operator*(const QSize &s, qreal c) { return QSize(qRound(s.wd*c), qRound(s.ht*c)); } -inline const QSize operator*(qreal c, const QSize &s) +Q_DECL_CONSTEXPR inline const QSize operator*(qreal c, const QSize &s) { return QSize(qRound(s.wd*c), qRound(s.ht*c)); } inline QSize &QSize::operator/=(qreal c) @@ -195,12 +193,12 @@ inline const QSize operator/(const QSize &s, qreal c) return QSize(qRound(s.wd/c), qRound(s.ht/c)); } -inline QSize QSize::expandedTo(const QSize & otherSize) const +Q_DECL_CONSTEXPR inline QSize QSize::expandedTo(const QSize & otherSize) const { return QSize(qMax(wd,otherSize.wd), qMax(ht,otherSize.ht)); } -inline QSize QSize::boundedTo(const QSize & otherSize) const +Q_DECL_CONSTEXPR inline QSize QSize::boundedTo(const QSize & otherSize) const { return QSize(qMin(wd,otherSize.wd), qMin(ht,otherSize.ht)); } @@ -213,28 +211,28 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QSize &); class Q_CORE_EXPORT QSizeF { public: - QSizeF(); - QSizeF(const QSize &sz); - QSizeF(qreal w, qreal h); + Q_DECL_CONSTEXPR QSizeF(); + Q_DECL_CONSTEXPR QSizeF(const QSize &sz); + Q_DECL_CONSTEXPR QSizeF(qreal w, qreal h); bool isNull() const; - bool isEmpty() const; - bool isValid() const; + Q_DECL_CONSTEXPR bool isEmpty() const; + Q_DECL_CONSTEXPR bool isValid() const; - qreal width() const; - qreal height() const; + Q_DECL_CONSTEXPR qreal width() const; + Q_DECL_CONSTEXPR qreal height() const; void setWidth(qreal w); void setHeight(qreal h); void transpose(); - QSizeF transposed() const; + Q_DECL_CONSTEXPR QSizeF transposed() const; void scale(qreal w, qreal h, Qt::AspectRatioMode mode); void scale(const QSizeF &s, Qt::AspectRatioMode mode); QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const; QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const; - QSizeF expandedTo(const QSizeF &) const; - QSizeF boundedTo(const QSizeF &) const; + Q_DECL_CONSTEXPR QSizeF expandedTo(const QSizeF &) const; + Q_DECL_CONSTEXPR QSizeF boundedTo(const QSizeF &) const; qreal &rwidth(); qreal &rheight(); @@ -244,15 +242,15 @@ public: QSizeF &operator*=(qreal c); QSizeF &operator/=(qreal c); - friend inline bool operator==(const QSizeF &, const QSizeF &); - friend inline bool operator!=(const QSizeF &, const QSizeF &); - friend inline const QSizeF operator+(const QSizeF &, const QSizeF &); - friend inline const QSizeF operator-(const QSizeF &, const QSizeF &); - friend inline const QSizeF operator*(const QSizeF &, qreal); - friend inline const QSizeF operator*(qreal, const QSizeF &); + friend Q_DECL_CONSTEXPR inline bool operator==(const QSizeF &, const QSizeF &); + friend Q_DECL_CONSTEXPR inline bool operator!=(const QSizeF &, const QSizeF &); + friend Q_DECL_CONSTEXPR inline const QSizeF operator+(const QSizeF &, const QSizeF &); + friend Q_DECL_CONSTEXPR inline const QSizeF operator-(const QSizeF &, const QSizeF &); + friend Q_DECL_CONSTEXPR inline const QSizeF operator*(const QSizeF &, qreal); + friend Q_DECL_CONSTEXPR inline const QSizeF operator*(qreal, const QSizeF &); friend inline const QSizeF operator/(const QSizeF &, qreal); - inline QSize toSize() const; + Q_DECL_CONSTEXPR inline QSize toSize() const; private: qreal wd; @@ -275,30 +273,25 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QSizeF &); QSizeF inline functions *****************************************************************************/ -inline QSizeF::QSizeF() -{ wd = ht = -1.; } +Q_DECL_CONSTEXPR inline QSizeF::QSizeF() : wd(-1.), ht(-1.) {} -inline QSizeF::QSizeF(const QSize &sz) - : wd(sz.width()), ht(sz.height()) -{ -} +Q_DECL_CONSTEXPR inline QSizeF::QSizeF(const QSize &sz) : wd(sz.width()), ht(sz.height()) {} -inline QSizeF::QSizeF(qreal w, qreal h) -{ wd = w; ht = h; } +Q_DECL_CONSTEXPR inline QSizeF::QSizeF(qreal w, qreal h) : wd(w), ht(h) {} inline bool QSizeF::isNull() const { return qIsNull(wd) && qIsNull(ht); } -inline bool QSizeF::isEmpty() const +Q_DECL_CONSTEXPR inline bool QSizeF::isEmpty() const { return wd <= 0. || ht <= 0.; } -inline bool QSizeF::isValid() const +Q_DECL_CONSTEXPR inline bool QSizeF::isValid() const { return wd >= 0. && ht >= 0.; } -inline qreal QSizeF::width() const +Q_DECL_CONSTEXPR inline qreal QSizeF::width() const { return wd; } -inline qreal QSizeF::height() const +Q_DECL_CONSTEXPR inline qreal QSizeF::height() const { return ht; } inline void QSizeF::setWidth(qreal w) @@ -307,7 +300,7 @@ inline void QSizeF::setWidth(qreal w) inline void QSizeF::setHeight(qreal h) { ht = h; } -inline QSizeF QSizeF::transposed() const +Q_DECL_CONSTEXPR inline QSizeF QSizeF::transposed() const { return QSizeF(ht, wd); } inline void QSizeF::scale(qreal w, qreal h, Qt::AspectRatioMode mode) @@ -334,22 +327,22 @@ inline QSizeF &QSizeF::operator-=(const QSizeF &s) inline QSizeF &QSizeF::operator*=(qreal c) { wd *= c; ht *= c; return *this; } -inline bool operator==(const QSizeF &s1, const QSizeF &s2) +Q_DECL_CONSTEXPR inline bool operator==(const QSizeF &s1, const QSizeF &s2) { return qFuzzyCompare(s1.wd, s2.wd) && qFuzzyCompare(s1.ht, s2.ht); } -inline bool operator!=(const QSizeF &s1, const QSizeF &s2) +Q_DECL_CONSTEXPR inline bool operator!=(const QSizeF &s1, const QSizeF &s2) { return !qFuzzyCompare(s1.wd, s2.wd) || !qFuzzyCompare(s1.ht, s2.ht); } -inline const QSizeF operator+(const QSizeF & s1, const QSizeF & s2) +Q_DECL_CONSTEXPR inline const QSizeF operator+(const QSizeF & s1, const QSizeF & s2) { return QSizeF(s1.wd+s2.wd, s1.ht+s2.ht); } -inline const QSizeF operator-(const QSizeF &s1, const QSizeF &s2) +Q_DECL_CONSTEXPR inline const QSizeF operator-(const QSizeF &s1, const QSizeF &s2) { return QSizeF(s1.wd-s2.wd, s1.ht-s2.ht); } -inline const QSizeF operator*(const QSizeF &s, qreal c) +Q_DECL_CONSTEXPR inline const QSizeF operator*(const QSizeF &s, qreal c) { return QSizeF(s.wd*c, s.ht*c); } -inline const QSizeF operator*(qreal c, const QSizeF &s) +Q_DECL_CONSTEXPR inline const QSizeF operator*(qreal c, const QSizeF &s) { return QSizeF(s.wd*c, s.ht*c); } inline QSizeF &QSizeF::operator/=(qreal c) @@ -365,17 +358,17 @@ inline const QSizeF operator/(const QSizeF &s, qreal c) return QSizeF(s.wd/c, s.ht/c); } -inline QSizeF QSizeF::expandedTo(const QSizeF & otherSize) const +Q_DECL_CONSTEXPR inline QSizeF QSizeF::expandedTo(const QSizeF & otherSize) const { return QSizeF(qMax(wd,otherSize.wd), qMax(ht,otherSize.ht)); } -inline QSizeF QSizeF::boundedTo(const QSizeF & otherSize) const +Q_DECL_CONSTEXPR inline QSizeF QSizeF::boundedTo(const QSizeF & otherSize) const { return QSizeF(qMin(wd,otherSize.wd), qMin(ht,otherSize.ht)); } -inline QSize QSizeF::toSize() const +Q_DECL_CONSTEXPR inline QSize QSizeF::toSize() const { return QSize(qRound(wd), qRound(ht)); } |