summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qsize.h
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2012-02-17 12:02:14 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-22 00:07:31 +0100
commitf3141c58badbd2da9eb42021e9704742c3e52a9b (patch)
treeb8b45bc1639ddeceac9d2fb326944a895794bd6b /src/corelib/tools/qsize.h
parent4c577aead97abb4e22fedcf57cb9aea6c5bfa623 (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.h139
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));
}