1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-28 19:21:04 +00:00

Shift record type value for IndexRefId hash

This commit is contained in:
elsid 2023-04-02 15:00:03 +02:00
parent 1a1f983930
commit 258aec223a
No known key found for this signature in database
GPG Key ID: 4DE04C198CBA7625
2 changed files with 17 additions and 1 deletions

View File

@ -196,6 +196,22 @@ namespace ESM
EXPECT_NE(stringRefId, formIdRefId); EXPECT_NE(stringRefId, formIdRefId);
} }
TEST(ESMRefIdTest, indexRefIdHashDiffersForDistinctValues)
{
const RefId a = RefId::index(static_cast<RecNameInts>(3), 1);
const RefId b = RefId::index(static_cast<RecNameInts>(3), 2);
std::hash<RefId> hash;
EXPECT_NE(hash(a), hash(b));
}
TEST(ESMRefIdTest, indexRefIdHashDiffersForDistinctRecords)
{
const RefId a = RefId::index(static_cast<RecNameInts>(1), 3);
const RefId b = RefId::index(static_cast<RecNameInts>(2), 3);
std::hash<RefId> hash;
EXPECT_NE(hash(a), hash(b));
}
struct ESMRefIdToStringTest : TestWithParam<std::pair<RefId, std::string>> struct ESMRefIdToStringTest : TestWithParam<std::pair<RefId, std::string>>
{ {
}; };

View File

@ -53,7 +53,7 @@ namespace std
{ {
std::size_t operator()(ESM::IndexRefId value) const noexcept std::size_t operator()(ESM::IndexRefId value) const noexcept
{ {
return std::hash<std::uint64_t>{}(static_cast<std::uint64_t>(value.mRecordType) | value.mValue); return std::hash<std::uint64_t>{}((static_cast<std::uint64_t>(value.mRecordType) << 32) | value.mValue);
} }
}; };
} }