summaryrefslogtreecommitdiff
path: root/src/positioning/qdoublevector2d_p.h
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@digia.com>2013-11-14 16:01:26 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-20 11:22:40 +0100
commit9e1a01b2050cf844027df670cedeab1423a10db8 (patch)
tree8c6aa842383a245c8d0db7589bd39e54363280f4 /src/positioning/qdoublevector2d_p.h
parentb066db2208c976a66f08fbae33e37de94da9c89b (diff)
downloadqtlocation-9e1a01b2050cf844027df670cedeab1423a10db8.tar.gz
Add constexpr to Vector classes
This turns code like QDoublVector2D(1,1) into a compile-time expression when using a C++11 compiler. Since these classes are private some member functions were converted into inlines to make maximum use of constexpr. Keyword inline was added where function declaration was not exhibiting the keyword but the declaration was using it. Under certain circumstances this can prevent potential export/import issues on some compilers. Change-Id: I1b35b03942c5939fbafe2819fc875ef96eacaf02 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/positioning/qdoublevector2d_p.h')
-rw-r--r--src/positioning/qdoublevector2d_p.h103
1 files changed, 58 insertions, 45 deletions
diff --git a/src/positioning/qdoublevector2d_p.h b/src/positioning/qdoublevector2d_p.h
index 74a0fb18..760100c2 100644
--- a/src/positioning/qdoublevector2d_p.h
+++ b/src/positioning/qdoublevector2d_p.h
@@ -68,52 +68,52 @@ class QDoubleVector3D;
class Q_POSITIONING_EXPORT_PRIVATE QDoubleVector2D
{
public:
- QDoubleVector2D();
- QDoubleVector2D(double xpos, double ypos);
- explicit QDoubleVector2D(const QPointF &p);
+ Q_DECL_CONSTEXPR inline QDoubleVector2D();
+ Q_DECL_CONSTEXPR inline QDoubleVector2D(double xpos, double ypos);
+ Q_DECL_CONSTEXPR explicit inline QDoubleVector2D(const QPointF &p);
explicit QDoubleVector2D(const QDoubleVector3D &vector);
#ifdef QT_BUILD_LOCATION_LIB
- explicit QDoubleVector2D(const QVector2D &vector) : xp(vector.x()), yp(vector.y()) {}
- operator QVector2D() const { return QVector2D(xp, yp); }
+ Q_DECL_CONSTEXPR explicit inline QDoubleVector2D(const QVector2D &vector) : xp(vector.x()), yp(vector.y()) {}
+ Q_DECL_CONSTEXPR inline operator QVector2D() const { return QVector2D(xp, yp); }
#endif
- inline double manhattanLength() const;
- bool isNull() const;
+ Q_DECL_CONSTEXPR inline double manhattanLength() const;
+ inline bool isNull() const;
- double x() const;
- double y() const;
+ Q_DECL_CONSTEXPR inline double x() const;
+ Q_DECL_CONSTEXPR inline double y() const;
- void setX(double x);
- void setY(double y);
+ inline void setX(double x);
+ inline void setY(double y);
double length() const;
- double lengthSquared() const;
+ Q_DECL_CONSTEXPR inline double lengthSquared() const;
QDoubleVector2D normalized() const;
void normalize();
- QDoubleVector2D &operator+=(const QDoubleVector2D &vector);
- QDoubleVector2D &operator-=(const QDoubleVector2D &vector);
- QDoubleVector2D &operator*=(double factor);
- QDoubleVector2D &operator*=(const QDoubleVector2D &vector);
- QDoubleVector2D &operator/=(double divisor);
+ inline QDoubleVector2D &operator+=(const QDoubleVector2D &vector);
+ inline QDoubleVector2D &operator-=(const QDoubleVector2D &vector);
+ inline QDoubleVector2D &operator*=(double factor);
+ inline QDoubleVector2D &operator*=(const QDoubleVector2D &vector);
+ inline QDoubleVector2D &operator/=(double divisor);
- static double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ Q_DECL_CONSTEXPR static inline double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
- friend inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
- friend inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
- friend inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
- friend inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
- friend inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector);
- friend inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor);
- friend inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
- friend inline const QDoubleVector2D operator-(const QDoubleVector2D &vector);
- friend inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor);
+ friend Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ friend Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &vector);
+ friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor);
- friend inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
+ friend Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
QDoubleVector3D toVector3D() const;
- QPointF toPointF() const;
+ Q_DECL_CONSTEXPR inline QPointF toPointF() const;
private:
double xp, yp;
@@ -123,13 +123,13 @@ private:
Q_DECLARE_TYPEINFO(QDoubleVector2D, Q_MOVABLE_TYPE);
-inline QDoubleVector2D::QDoubleVector2D() : xp(0.0), yp(0.0) {}
+Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D() : xp(0.0), yp(0.0) {}
-inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {}
+Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {}
-inline QDoubleVector2D::QDoubleVector2D(const QPointF &p) : xp(p.x()), yp(p.y()) { }
+Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(const QPointF &p) : xp(p.x()), yp(p.y()) { }
-inline double QDoubleVector2D::manhattanLength() const
+Q_DECL_CONSTEXPR inline double QDoubleVector2D::manhattanLength() const
{
return qAbs(x())+qAbs(y());
}
@@ -139,12 +139,15 @@ inline bool QDoubleVector2D::isNull() const
return qIsNull(xp) && qIsNull(yp);
}
-inline double QDoubleVector2D::x() const { return double(xp); }
-inline double QDoubleVector2D::y() const { return double(yp); }
+Q_DECL_CONSTEXPR inline double QDoubleVector2D::x() const { return xp; }
+Q_DECL_CONSTEXPR inline double QDoubleVector2D::y() const { return yp; }
inline void QDoubleVector2D::setX(double aX) { xp = aX; }
inline void QDoubleVector2D::setY(double aY) { yp = aY; }
+Q_DECL_CONSTEXPR inline double QDoubleVector2D::lengthSquared() const
+{ return xp * xp + yp * yp; }
+
inline QDoubleVector2D &QDoubleVector2D::operator+=(const QDoubleVector2D &vector)
{
xp += vector.xp;
@@ -180,56 +183,66 @@ inline QDoubleVector2D &QDoubleVector2D::operator/=(double divisor)
return *this;
}
-inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+Q_DECL_CONSTEXPR inline double QDoubleVector2D::dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+{
+ return v1.xp * v2.xp + v1.yp * v2.yp;
+}
+
+Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
{
return v1.xp == v2.xp && v1.yp == v2.yp;
}
-inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
{
return v1.xp != v2.xp || v1.yp != v2.yp;
}
-inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
{
return QDoubleVector2D(v1.xp + v2.xp, v1.yp + v2.yp);
}
-inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
{
return QDoubleVector2D(v1.xp - v2.xp, v1.yp - v2.yp);
}
-inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector)
{
return QDoubleVector2D(vector.xp * factor, vector.yp * factor);
}
-inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor)
{
return QDoubleVector2D(vector.xp * factor, vector.yp * factor);
}
-inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
{
return QDoubleVector2D(v1.xp * v2.xp, v1.yp * v2.yp);
}
-inline const QDoubleVector2D operator-(const QDoubleVector2D &vector)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &vector)
{
return QDoubleVector2D(-vector.xp, -vector.yp);
}
-inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor)
+Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor)
{
return QDoubleVector2D(vector.xp / divisor, vector.yp / divisor);
}
-inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
+Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
{
return qFuzzyCompare(v1.xp, v2.xp) && qFuzzyCompare(v1.yp, v2.yp);
}
+Q_DECL_CONSTEXPR inline QPointF QDoubleVector2D::toPointF() const
+{
+ return QPointF(qreal(xp), qreal(yp));
+}
+
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug dbg, const QDoubleVector2D &vector);
#endif