TEST(StringHasherTest, StringHasher_addCharacter) { StringHasher hasher; // Hashing a single character. hasher = StringHasher(); hasher.addCharacter(0); EXPECT_EQ(singleNullCharacterHash, hasher.hash()); EXPECT_EQ(singleNullCharacterHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, checking the intermediate state after each is added. hasher = StringHasher(); hasher.addCharacter(testAUChars[0]); EXPECT_EQ(testAHash1, hasher.hash()); EXPECT_EQ(testAHash1 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testAUChars[1]); EXPECT_EQ(testAHash2, hasher.hash()); EXPECT_EQ(testAHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testAUChars[2]); EXPECT_EQ(testAHash3, hasher.hash()); EXPECT_EQ(testAHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testAUChars[3]); EXPECT_EQ(testAHash4, hasher.hash()); EXPECT_EQ(testAHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testAUChars[4]); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing a second set of five characters, including non-Latin-1 characters. hasher = StringHasher(); hasher.addCharacter(testBUChars[0]); EXPECT_EQ(testBHash1, hasher.hash()); EXPECT_EQ(testBHash1 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testBUChars[1]); EXPECT_EQ(testBHash2, hasher.hash()); EXPECT_EQ(testBHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testBUChars[2]); EXPECT_EQ(testBHash3, hasher.hash()); EXPECT_EQ(testBHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testBUChars[3]); EXPECT_EQ(testBHash4, hasher.hash()); EXPECT_EQ(testBHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testBUChars[4]); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); }
Components::Component* BaseCharacter::GetComponent(const std::string& index)// const { const static int EleHash = StringHasher("ElementEffectivenessComponent"); const static int StatusHash = StringHasher("StatusEffectivenessComponent"); auto indexHash = StringHasher(index); if (EleHash == indexHash) { return const_cast<Components::ElementEffectivenessComponent*>(&ElementEffectsComponent); } else if (StatusHash == indexHash) { return const_cast<Components::StatusEffectivenessComponent*>(&StatusEffectsComponent); } else { return Entity::GetComponent(index); } return nullptr; }
void triebWerk::CPostEffectDrawable::RemoveMaterial(const char * a_pNameOfMaterial) { for (size_t i = 0; i < m_Materials.size(); i++) { if (m_Materials[i]->m_ID.GetHash() == StringHasher(a_pNameOfMaterial)) { delete m_Materials[i]; m_Materials.erase(m_Materials.begin() + i); } } }
triebWerk::CMaterial * triebWerk::CPostEffectDrawable::GetMaterial(const char * a_pNameOfMaterial) const { for (size_t i = 0; i < m_Materials.size(); i++) { if (m_Materials[i]->m_ID.GetHash() == StringHasher(a_pNameOfMaterial)) { return m_Materials[i]; } } DebugLogfile.LogfText(CDebugLogfile::ELogType::Warning, false, "Warning: There is no Material in the posteffect with the name: %s", a_pNameOfMaterial); return nullptr; }
size_t RpcProtocolInfo::hash_value() const { size_t values[] = { Int32Hasher(version), StringHasher(protocol), StringHasher(tokenKind) }; return CombineHasher(values, sizeof(values) / sizeof(values[0])); }
size_t Token::hash_value() const { size_t values[] = { StringHasher(identifier), StringHasher(password), StringHasher(kind), StringHasher(service) }; return CombineHasher(values, sizeof(values) / sizeof(values[0])); }
TEST(StringHasherTest, StringHasher_addCharactersAssumingAligned) { StringHasher hasher; // Hashing zero characters. hasher = StringHasher(); hasher.addCharactersAssumingAligned(static_cast<LChar*>(0), 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(nullLChars, 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(static_cast<UChar*>(0), 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(nullUChars, 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing one character. hasher = StringHasher(); hasher.addCharactersAssumingAligned(nullLChars, 1); EXPECT_EQ(singleNullCharacterHash, hasher.hash()); EXPECT_EQ(singleNullCharacterHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(nullUChars, 1); EXPECT_EQ(singleNullCharacterHash, hasher.hash()); EXPECT_EQ(singleNullCharacterHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, all at once. hasher = StringHasher(); hasher.addCharactersAssumingAligned(testALChars, 5); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testAUChars, 5); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testBUChars, 5); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, in groups of two, then the last one. hasher = StringHasher(); hasher.addCharactersAssumingAligned(testALChars, 2); EXPECT_EQ(testAHash2, hasher.hash()); EXPECT_EQ(testAHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testALChars + 2, 2); EXPECT_EQ(testAHash4, hasher.hash()); EXPECT_EQ(testAHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testALChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testALChars, 2); hasher.addCharactersAssumingAligned(testALChars + 2, 2); hasher.addCharactersAssumingAligned(testALChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testAUChars, 2); EXPECT_EQ(testAHash2, hasher.hash()); EXPECT_EQ(testAHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testAUChars + 2, 2); EXPECT_EQ(testAHash4, hasher.hash()); EXPECT_EQ(testAHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testAUChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testAUChars, 2); hasher.addCharactersAssumingAligned(testAUChars + 2, 2); hasher.addCharactersAssumingAligned(testAUChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testBUChars, 2); EXPECT_EQ(testBHash2, hasher.hash()); EXPECT_EQ(testBHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testBUChars + 2, 2); EXPECT_EQ(testBHash4, hasher.hash()); EXPECT_EQ(testBHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testBUChars + 4, 1); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharactersAssumingAligned(testBUChars, 2); hasher.addCharactersAssumingAligned(testBUChars + 2, 2); hasher.addCharactersAssumingAligned(testBUChars + 4, 1); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, first two characters one at a time, // then two more, then the last one. hasher = StringHasher(); hasher.addCharacter(testBUChars[0]); EXPECT_EQ(testBHash1, hasher.hash()); EXPECT_EQ(testBHash1 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacter(testBUChars[1]); EXPECT_EQ(testBHash2, hasher.hash()); EXPECT_EQ(testBHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testBUChars[2], testBUChars[3]); EXPECT_EQ(testBHash4, hasher.hash()); EXPECT_EQ(testBHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharactersAssumingAligned(testBUChars + 4, 1); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); }
TEST(StringHasherTest, StringHasher_addCharacters) { StringHasher hasher; // Hashing zero characters. hasher = StringHasher(); hasher.addCharacters(static_cast<LChar*>(0), 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(nullLChars, 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(static_cast<UChar*>(0), 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(nullUChars, 0); EXPECT_EQ(emptyStringHash, hasher.hash()); EXPECT_EQ(emptyStringHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing one character. hasher = StringHasher(); hasher.addCharacters(nullLChars, 1); EXPECT_EQ(singleNullCharacterHash, hasher.hash()); EXPECT_EQ(singleNullCharacterHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(nullUChars, 1); EXPECT_EQ(singleNullCharacterHash, hasher.hash()); EXPECT_EQ(singleNullCharacterHash & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, all at once. hasher = StringHasher(); hasher.addCharacters(testALChars, 5); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testAUChars, 5); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testBUChars, 5); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, in groups of two, then the last one. hasher = StringHasher(); hasher.addCharacters(testALChars, 2); EXPECT_EQ(testAHash2, hasher.hash()); EXPECT_EQ(testAHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testALChars + 2, 2); EXPECT_EQ(testAHash4, hasher.hash()); EXPECT_EQ(testAHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testALChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testALChars, 2); hasher.addCharacters(testALChars + 2, 2); hasher.addCharacters(testALChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testAUChars, 2); EXPECT_EQ(testAHash2, hasher.hash()); EXPECT_EQ(testAHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testAUChars + 2, 2); EXPECT_EQ(testAHash4, hasher.hash()); EXPECT_EQ(testAHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testAUChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testAUChars, 2); hasher.addCharacters(testAUChars + 2, 2); hasher.addCharacters(testAUChars + 4, 1); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testBUChars, 2); EXPECT_EQ(testBHash2, hasher.hash()); EXPECT_EQ(testBHash2 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testBUChars + 2, 2); EXPECT_EQ(testBHash4, hasher.hash()); EXPECT_EQ(testBHash4 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testBUChars + 4, 1); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testBUChars, 2); hasher.addCharacters(testBUChars + 2, 2); hasher.addCharacters(testBUChars + 4, 1); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); // Hashing five characters, the first three, then the last two. hasher = StringHasher(); hasher.addCharacters(testALChars, 3); EXPECT_EQ(testAHash3, hasher.hash()); EXPECT_EQ(testAHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testALChars + 3, 2); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testALChars, 3); EXPECT_EQ(testAHash3, hasher.hash()); EXPECT_EQ(testAHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testALChars + 3, 2); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testAUChars, 3); EXPECT_EQ(testAHash3, hasher.hash()); EXPECT_EQ(testAHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testAUChars + 3, 2); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testAUChars, 3); EXPECT_EQ(testAHash3, hasher.hash()); EXPECT_EQ(testAHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testAUChars + 3, 2); EXPECT_EQ(testAHash5, hasher.hash()); EXPECT_EQ(testAHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testBUChars, 3); EXPECT_EQ(testBHash3, hasher.hash()); EXPECT_EQ(testBHash3 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher.addCharacters(testBUChars + 3, 2); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); hasher = StringHasher(); hasher.addCharacters(testBUChars, 3); hasher.addCharacters(testBUChars + 3, 2); EXPECT_EQ(testBHash5, hasher.hash()); EXPECT_EQ(testBHash5 & 0xFFFFFF, hasher.hashWithTop8BitsMasked()); }