DWORD FusionBind::Hash() { DWORD hash = 0; // Normalize representation if (!m_fParsed) ParseName(); // Hash fields. if (m_pAssemblyName) hash ^= HashStringA(m_pAssemblyName); hash = _rotl(hash, 4); hash ^= HashBytes(m_pbPublicKeyOrToken, m_cbPublicKeyOrToken); hash = _rotl(hash, 4); hash ^= m_dwFlags; hash = _rotl(hash, 4); if (m_CodeInfo.m_pszCodeBase) hash ^= HashString(m_CodeInfo.m_pszCodeBase); hash = _rotl(hash, 4); hash ^= m_context.usMajorVersion; hash = _rotl(hash, 8); if (m_context.usMajorVersion != (USHORT) -1) { hash ^= m_context.usMinorVersion; hash = _rotl(hash, 8); if (m_context.usMinorVersion != (USHORT) -1) { hash ^= m_context.usBuildNumber; hash = _rotl(hash, 8); if (m_context.usBuildNumber != (USHORT) -1) { hash ^= m_context.usRevisionNumber; hash = _rotl(hash, 8); } } } if (m_context.szLocale) hash ^= HashStringA(m_context.szLocale); hash = _rotl(hash, 4); hash ^= m_CodeInfo.m_fLoadFromParent; return hash; }
static count_t Hash(key_t textualIdentity) { if (textualIdentity == NULL) return 0; else return HashStringA(textualIdentity); }
static count_t Hash(key_t k) { LIMITED_METHOD_CONTRACT; // Only use the Name when calculating the hash value. Many redirected types share the same namespace so // there isn't a lot of value in using the namespace when calculating the hash value. return HashStringA(k.m_szName); }