Remove qhash_faster.
It's not faster under _any_ metric than the new algorithm, and it loses a lot of spread which is a bad thing. Change-Id: Ic87258f1c887822ffea1cb1517355564fabc3c26 Reviewed-by: João Abecasis <joao.abecasis@nokia.com>bb10
parent
1f4804452c
commit
b147da00c5
|
|
@ -57,8 +57,6 @@ private slots:
|
|||
void initTestCase();
|
||||
void qhash_qt4_data() { data(); }
|
||||
void qhash_qt4();
|
||||
void qhash_faster_data() { data(); }
|
||||
void qhash_faster();
|
||||
void javaString_data() { data(); }
|
||||
void javaString();
|
||||
|
||||
|
|
@ -151,22 +149,6 @@ void tst_QHash::qhash_qt4()
|
|||
}
|
||||
}
|
||||
|
||||
void tst_QHash::qhash_faster()
|
||||
{
|
||||
QFETCH(QStringList, items);
|
||||
QHash<String, int> hash;
|
||||
|
||||
QList<String> realitems;
|
||||
foreach (const QString &s, items)
|
||||
realitems.append(s);
|
||||
|
||||
QBENCHMARK {
|
||||
for (int i = 0, n = realitems.size(); i != n; ++i) {
|
||||
hash[realitems.at(i)] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QHash::javaString()
|
||||
{
|
||||
QFETCH(QStringList, items);
|
||||
|
|
|
|||
|
|
@ -52,17 +52,6 @@ uint qHash(const Qt4String &);
|
|||
QT_END_NAMESPACE
|
||||
|
||||
|
||||
struct String : QString
|
||||
{
|
||||
String() {}
|
||||
String(const QString &s) : QString(s) {}
|
||||
};
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
uint qHash(const String &);
|
||||
QT_END_NAMESPACE
|
||||
|
||||
|
||||
struct JavaString : QString
|
||||
{
|
||||
JavaString() {}
|
||||
|
|
|
|||
|
|
@ -57,50 +57,6 @@ uint qHash(const Qt4String &str)
|
|||
return h;
|
||||
}
|
||||
|
||||
static void doHash(const unsigned short *p, uint &h)
|
||||
{
|
||||
#if 1
|
||||
// Copied from static uint hash(const QChar *p, int n).
|
||||
// Possibly not the cheapest way.
|
||||
h = (h << 4) + (*p++);
|
||||
h ^= (h & 0xf0000000) >> 23;
|
||||
h &= 0x0fffffff;
|
||||
|
||||
h = (h << 4) + (*p++);
|
||||
h ^= (h & 0xf0000000) >> 23;
|
||||
h &= 0x0fffffff;
|
||||
|
||||
h = (h << 4) + (*p++);
|
||||
h ^= (h & 0xf0000000) >> 23;
|
||||
h &= 0x0fffffff;
|
||||
|
||||
h = (h << 4) + (*p++);
|
||||
h ^= (h & 0xf0000000) >> 23;
|
||||
h &= 0x0fffffff;
|
||||
#else
|
||||
// Faster, but probably less spread.
|
||||
h ^= *(unsigned int *)p;
|
||||
#endif
|
||||
}
|
||||
|
||||
uint qHash(const String &str)
|
||||
{
|
||||
const unsigned short *p = (unsigned short *)str.constData();
|
||||
const int s = str.size();
|
||||
switch (s) {
|
||||
case 0: return 0;
|
||||
case 1: return *p;
|
||||
case 2: return *(unsigned int *)p;
|
||||
case 3: return (*(unsigned int *)p) ^ *(p + 2);
|
||||
//case 3: return (*p << 11) + (*(p + 1) << 22) + *(p + 2);
|
||||
}
|
||||
uint h = 0;
|
||||
doHash(p, h);
|
||||
doHash(p + s / 2 - 2, h);
|
||||
doHash(p + s - 4, h);
|
||||
return h;
|
||||
}
|
||||
|
||||
// The Java's hashing algorithm for strings is a variation of D. J. Bernstein
|
||||
// hashing algorithm appeared here http://cr.yp.to/cdb/cdb.txt
|
||||
// and informally known as DJB33XX - DJB's 33 Times Xor.
|
||||
|
|
|
|||
Loading…
Reference in New Issue