private MpqHash GetHashEntry(string Filename) { //uint index = HashString(Filename, 0); //index &= mHeader.HashTableSize - 1; uint name1 = HashString(Filename, 0x100); uint name2 = HashString(Filename, 0x200); // 63 32 31 0 // | | | | // [name2] [name1] MpqHash hash; if (dcHashes.TryGetValue((((UInt64)name2) << 32) | name1, out hash)) { return(hash); } /*for (uint i = index; ; ) * { * MpqHash hash = mHashes[i]; * if (hash.Name1 == name1 && hash.Name2 == name2) return hash; * * if (++i >= mHashes.Length) i = 0; * if (i == index) break; * }*/ return(MpqHash.InvalidHash()); }
private MpqHash GetHashEntry(string Filename) { uint index = HashString(Filename, 0); index &= mHeader.HashTableSize - 1; uint name1 = HashString(Filename, 0x100); uint name2 = HashString(Filename, 0x200); uint i = index; do { MpqHash hash = mHashes[i]; if (hash.Name1 == name1 && hash.Name2 == name2) { return(hash); } if (++i >= mHashes.Length) { i = 0; } } while (i != index); return(MpqHash.InvalidHash()); }
private MpqHash GetHashEntry(string Filename) { uint index = HashString(Filename, 0); index &= mHeader.HashTableSize - 1; uint name1 = HashString(Filename, 0x100); uint name2 = HashString(Filename, 0x200); for (uint i = index; i < mHashes.Length; ++i) { MpqHash hash = mHashes[i]; if (hash.Name1 == name1 && hash.Name2 == name2) { return(hash); } } return(MpqHash.InvalidHash()); }