Add qHash(QMatrix) and qHash(QTransform)
QMatrix and QTransform can be compared for equality, so qHash should be overloaded, too. [ChangeLog][QtCore][QMatrix] Added qHash(QMatrix). [ChangeLog][QtCore][QTransform] Added qHash(QTransform). Change-Id: I1ce925ebe258c9d7e35b68e5ac5c3373f1460c58 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
parent
299350f668
commit
05d1693793
@ -31,9 +31,11 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qmatrix.h"
|
||||
|
||||
#include "qdatastream.h"
|
||||
#include "qdebug.h"
|
||||
#include "qmatrix.h"
|
||||
#include "qhashfunctions.h"
|
||||
#include "qregion.h"
|
||||
#include "qpainterpath.h"
|
||||
#include "qpainterpath_p.h"
|
||||
@ -972,6 +974,26 @@ bool QMatrix::operator==(const QMatrix &m) const
|
||||
_dy == m._dy;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\since 5.6
|
||||
\relates QMatrix
|
||||
|
||||
Returns the hash value for \a key, using
|
||||
\a seed to seed the calculation.
|
||||
*/
|
||||
uint qHash(const QMatrix &key, uint seed) Q_DECL_NOTHROW
|
||||
{
|
||||
QtPrivate::QHashCombine hash;
|
||||
seed = hash(key.m11(), seed);
|
||||
seed = hash(key.m12(), seed);
|
||||
seed = hash(key.m21(), seed);
|
||||
seed = hash(key.m22(), seed);
|
||||
seed = hash(key.dx(), seed);
|
||||
seed = hash(key.dy(), seed);
|
||||
return seed;
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn bool QMatrix::operator!=(const QMatrix &matrix) const
|
||||
|
||||
|
@ -126,6 +126,8 @@ private:
|
||||
};
|
||||
Q_DECLARE_TYPEINFO(QMatrix, Q_MOVABLE_TYPE);
|
||||
|
||||
Q_GUI_EXPORT Q_DECL_CONST_FUNCTION uint qHash(const QMatrix &key, uint seed = 0) Q_DECL_NOTHROW;
|
||||
|
||||
// mathematical semantics
|
||||
inline QPoint operator*(const QPoint &p, const QMatrix &m)
|
||||
{ return m.map(p); }
|
||||
|
@ -34,6 +34,7 @@
|
||||
|
||||
#include "qdatastream.h"
|
||||
#include "qdebug.h"
|
||||
#include "qhashfunctions.h"
|
||||
#include "qmatrix.h"
|
||||
#include "qregion.h"
|
||||
#include "qpainterpath.h"
|
||||
@ -775,6 +776,29 @@ bool QTransform::operator==(const QTransform &o) const
|
||||
m_33 == o.m_33;
|
||||
}
|
||||
|
||||
/*!
|
||||
\since 5.6
|
||||
\relates QTransform
|
||||
|
||||
Returns the hash value for \a key, using
|
||||
\a seed to seed the calculation.
|
||||
*/
|
||||
uint qHash(const QTransform &key, uint seed) Q_DECL_NOTHROW
|
||||
{
|
||||
QtPrivate::QHashCombine hash;
|
||||
seed = hash(key.m11(), seed);
|
||||
seed = hash(key.m12(), seed);
|
||||
seed = hash(key.m21(), seed);
|
||||
seed = hash(key.m22(), seed);
|
||||
seed = hash(key.dx(), seed);
|
||||
seed = hash(key.dy(), seed);
|
||||
seed = hash(key.m13(), seed);
|
||||
seed = hash(key.m23(), seed);
|
||||
seed = hash(key.m33(), seed);
|
||||
return seed;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\fn bool QTransform::operator!=(const QTransform &matrix) const
|
||||
Returns \c true if this matrix is not equal to the given \a matrix,
|
||||
|
@ -180,6 +180,8 @@ private:
|
||||
};
|
||||
Q_DECLARE_TYPEINFO(QTransform, Q_MOVABLE_TYPE);
|
||||
|
||||
Q_GUI_EXPORT Q_DECL_CONST_FUNCTION uint qHash(const QTransform &key, uint seed = 0) Q_DECL_NOTHROW;
|
||||
|
||||
/******* inlines *****/
|
||||
inline QTransform::TransformationType QTransform::inline_type() const
|
||||
{
|
||||
|
@ -57,6 +57,7 @@ private slots:
|
||||
void mapRect();
|
||||
void assignments();
|
||||
void mapToPolygon();
|
||||
void qhash();
|
||||
void translate();
|
||||
void scale();
|
||||
void matrix();
|
||||
@ -361,6 +362,22 @@ void tst_QTransform::mapToPolygon()
|
||||
QVERIFY(equal);
|
||||
}
|
||||
|
||||
void tst_QTransform::qhash()
|
||||
{
|
||||
QMatrix m1;
|
||||
m1.shear(3.0, 2.0);
|
||||
m1.rotate(44);
|
||||
|
||||
QMatrix m2 = m1;
|
||||
|
||||
QTransform t1(m1);
|
||||
QTransform t2(m2);
|
||||
|
||||
// not really much to test here, so just the bare minimum:
|
||||
QCOMPARE(qHash(m1), qHash(m2));
|
||||
QCOMPARE(qHash(t1), qHash(t2));
|
||||
}
|
||||
|
||||
|
||||
void tst_QTransform::translate()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user