summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-10-07 07:55:11 (GMT)
committerKent Hansen <khansen@trolltech.com>2009-10-07 07:55:11 (GMT)
commit087b624c616bc1b3dbe850a74d0737fffc08bec2 (patch)
treeb362c857f8dff3742277e2d8d5af604432d0f988
parent8b7e766aa42739df8998ec9c1e94087b965ac87b (diff)
downloadQt-087b624c616bc1b3dbe850a74d0737fffc08bec2.zip
Qt-087b624c616bc1b3dbe850a74d0737fffc08bec2.tar.gz
Qt-087b624c616bc1b3dbe850a74d0737fffc08bec2.tar.bz2
implement qHash function for QScriptString
Reviewed-by: Olivier Goffart
-rw-r--r--src/script/api/qscriptstring.cpp8
-rw-r--r--src/script/api/qscriptstring.h2
-rw-r--r--src/script/api/qscriptstring_p.h7
-rw-r--r--tests/auto/qscriptstring/tst_qscriptstring.cpp17
4 files changed, 34 insertions, 0 deletions
diff --git a/src/script/api/qscriptstring.cpp b/src/script/api/qscriptstring.cpp
index 65bd818..c2362da 100644
--- a/src/script/api/qscriptstring.cpp
+++ b/src/script/api/qscriptstring.cpp
@@ -195,4 +195,12 @@ QScriptString::operator QString() const
return toString();
}
+uint qHash(const QScriptString &key)
+{
+ QScriptStringPrivate *d = QScriptStringPrivate::get(key);
+ if (!d)
+ return 0;
+ return qHash(d->identifier.ustring().rep());
+}
+
QT_END_NAMESPACE
diff --git a/src/script/api/qscriptstring.h b/src/script/api/qscriptstring.h
index e0a808e..40d156c 100644
--- a/src/script/api/qscriptstring.h
+++ b/src/script/api/qscriptstring.h
@@ -76,6 +76,8 @@ private:
Q_DECLARE_PRIVATE(QScriptString)
};
+Q_SCRIPT_EXPORT uint qHash(const QScriptString &key);
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/script/api/qscriptstring_p.h b/src/script/api/qscriptstring_p.h
index 25ce702..d3bb47d 100644
--- a/src/script/api/qscriptstring_p.h
+++ b/src/script/api/qscriptstring_p.h
@@ -73,6 +73,8 @@ public:
inline ~QScriptStringPrivate();
static inline void init(QScriptString &q, QScriptStringPrivate *d);
+ static inline QScriptStringPrivate *get(const QScriptString &q);
+
inline void detachFromEngine();
QBasicAtomicInt ref;
@@ -101,6 +103,11 @@ inline void QScriptStringPrivate::init(QScriptString &q, QScriptStringPrivate *d
q.d_ptr = d;
}
+inline QScriptStringPrivate *QScriptStringPrivate::get(const QScriptString &q)
+{
+ return const_cast<QScriptStringPrivate*>(q.d_func());
+}
+
inline void QScriptStringPrivate::detachFromEngine()
{
engine = 0;
diff --git a/tests/auto/qscriptstring/tst_qscriptstring.cpp b/tests/auto/qscriptstring/tst_qscriptstring.cpp
index 0968b61..e1a4bc1 100644
--- a/tests/auto/qscriptstring/tst_qscriptstring.cpp
+++ b/tests/auto/qscriptstring/tst_qscriptstring.cpp
@@ -58,6 +58,7 @@ public:
private slots:
void test();
+ void hash();
};
tst_QScriptString::tst_QScriptString()
@@ -138,5 +139,21 @@ void tst_QScriptString::test()
}
}
+void tst_QScriptString::hash()
+{
+ QScriptEngine engine;
+ QHash<QScriptString, int> stringToInt;
+ QScriptString foo = engine.toStringHandle("foo");
+ QScriptString bar = engine.toStringHandle("bar");
+ QVERIFY(!stringToInt.contains(foo));
+ for (int i = 0; i < 1000000; ++i)
+ stringToInt.insert(foo, 123);
+ QCOMPARE(stringToInt.value(foo), 123);
+ QVERIFY(!stringToInt.contains(bar));
+ stringToInt.insert(bar, 456);
+ QCOMPARE(stringToInt.value(bar), 456);
+ QCOMPARE(stringToInt.value(foo), 123);
+}
+
QTEST_MAIN(tst_QScriptString)
#include "tst_qscriptstring.moc"