From 087b624c616bc1b3dbe850a74d0737fffc08bec2 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Wed, 7 Oct 2009 09:55:11 +0200 Subject: implement qHash function for QScriptString Reviewed-by: Olivier Goffart --- src/script/api/qscriptstring.cpp | 8 ++++++++ src/script/api/qscriptstring.h | 2 ++ src/script/api/qscriptstring_p.h | 7 +++++++ tests/auto/qscriptstring/tst_qscriptstring.cpp | 17 +++++++++++++++++ 4 files changed, 34 insertions(+) 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(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 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" -- cgit v0.12