diff options
Diffstat (limited to 'WebCore/dom/QualifiedName.h')
-rw-r--r-- | WebCore/dom/QualifiedName.h | 42 |
1 files changed, 7 insertions, 35 deletions
diff --git a/WebCore/dom/QualifiedName.h b/WebCore/dom/QualifiedName.h index ee90408..2da8f0c 100644 --- a/WebCore/dom/QualifiedName.h +++ b/WebCore/dom/QualifiedName.h @@ -112,52 +112,24 @@ inline bool operator!=(const QualifiedName& q, const AtomicString& a) { return a inline unsigned hashComponents(const QualifiedNameComponents& buf) { - ASSERT(sizeof(QualifiedNameComponents) % (sizeof(uint16_t) * 2) == 0); - - unsigned l = sizeof(QualifiedNameComponents) / (sizeof(uint16_t) * 2); - const uint16_t* s = reinterpret_cast<const uint16_t*>(&buf); - uint32_t hash = WTF::stringHashingStartValue; - - // Main loop - for (; l > 0; l--) { - hash += s[0]; - uint32_t tmp = (s[1] << 11) ^ hash; - hash = (hash << 16) ^ tmp; - s += 2; - hash += hash >> 11; - } - - // Force "avalanching" of final 127 bits - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 2; - hash += hash >> 15; - hash ^= hash << 10; - - // this avoids ever returning a hash code of 0, since that is used to - // signal "hash not computed yet", using a value that is likely to be - // effectively the same as 0 when the low bits are masked - if (hash == 0) - hash = 0x80000000; - - return hash; + return WTF::StringHasher::createBlobHash<sizeof(QualifiedNameComponents)>(&buf); } - + struct QualifiedNameHash { static unsigned hash(const QualifiedName& name) { return hash(name.impl()); } - + static unsigned hash(const QualifiedName::QualifiedNameImpl* name) - { + { QualifiedNameComponents c = { name->m_prefix.impl(), name->m_localName.impl(), name->m_namespace.impl() }; return hashComponents(c); } - + static bool equal(const QualifiedName& a, const QualifiedName& b) { return a == b; } static bool equal(const QualifiedName::QualifiedNameImpl* a, const QualifiedName::QualifiedNameImpl* b) { return a == b; } - + static const bool safeToCompareToEmptyOrDeleted = false; }; - + } namespace WTF { |