De-inline qHash(const QUrl&) and improve
authorThiago Macieira <thiago.macieira@intel.com>
Wed, 28 Mar 2012 21:11:12 +0000 (18:11 -0300)
committerQt by Nokia <qt-info@nokia.com>
Thu, 29 Mar 2012 23:19:59 +0000 (01:19 +0200)
Make it a friend and access the internals to have better performance.

Change-Id: I3bbf0b0faa5363278b7b3871d6b6fb5f2225a5f4
Reviewed-by: Giuseppe D'Angelo <dangelog@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/corelib/io/qurl.cpp
src/corelib/io/qurl.h

index a716369..0e897c7 100644 (file)
@@ -2567,6 +2567,27 @@ QString QUrl::errorString() const
     \internal
 */
 
+/*! \fn uint qHash(const QUrl &url)
+    \relates QHash
+
+    Returns the hash value for the \a url.
+*/
+uint qHash(const QUrl &url)
+{
+    if (!url.d)
+        return qHash(-1); // the hash of an unset port (-1)
+
+    return qHash(url.d->scheme) ^
+            qHash(url.d->userName) ^
+            qHash(url.d->password) ^
+            qHash(url.d->host) ^
+            qHash(url.d->port) ^
+            qHash(url.d->path) ^
+            qHash(url.d->query) ^
+            qHash(url.d->fragment);
+}
+
+
 // The following code has the following copyright:
 /*
    Copyright (C) Research In Motion Limited 2009. All rights reserved.
index a118a9d..5fcbbf0 100644 (file)
@@ -304,6 +304,7 @@ public:
     static QByteArray toAce(const QString &);
     static QStringList idnWhitelist();
     static void setIdnWhitelist(const QStringList &);
+    friend Q_CORE_EXPORT uint qHash(const QUrl &url);
 
 private:
     QUrlPrivate *d;
@@ -314,11 +315,6 @@ public:
     inline DataPtr &data_ptr() { return d; }
 };
 
-inline uint qHash(const QUrl &url)
-{
-    return qHash(url.toString());
-}
-
 Q_DECLARE_TYPEINFO(QUrl, Q_MOVABLE_TYPE);
 Q_DECLARE_SHARED(QUrl)
 Q_DECLARE_OPERATORS_FOR_FLAGS(QUrl::ComponentFormattingOptions)