mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-20 02:15:32 +00:00
Initial commit of current work on Prime World Editor
This commit is contained in:
72
Common/CHashFNV1A.cpp
Normal file
72
Common/CHashFNV1A.cpp
Normal file
@@ -0,0 +1,72 @@
|
||||
#include "CHashFNV1A.h"
|
||||
|
||||
const u64 CHashFNV1A::skFNVOffsetBasis32 = 0x811C9DC5;
|
||||
const u64 CHashFNV1A::skFNVOffsetBasis64 = 0xCBF29CE484222325;
|
||||
const u64 CHashFNV1A::skFNVPrime32 = 0x1000193;
|
||||
const u64 CHashFNV1A::skFNVPrime64 = 0x100000001B3;
|
||||
|
||||
CHashFNV1A::CHashFNV1A()
|
||||
{
|
||||
Init32();
|
||||
}
|
||||
|
||||
void CHashFNV1A::Init32()
|
||||
{
|
||||
mHashLength = e32Bit;
|
||||
mHash = skFNVOffsetBasis32;
|
||||
}
|
||||
|
||||
void CHashFNV1A::Init64()
|
||||
{
|
||||
mHashLength = e64Bit;
|
||||
mHash = skFNVOffsetBasis64;
|
||||
}
|
||||
|
||||
void CHashFNV1A::HashData(const void *pData, u32 Size)
|
||||
{
|
||||
const char *pCharData = (const char*) pData;
|
||||
u64 FNVPrime = (mHashLength == e32Bit) ? skFNVPrime32 : skFNVPrime64;
|
||||
|
||||
for (u32 i = 0; i < Size; i++)
|
||||
{
|
||||
mHash ^= *pCharData;
|
||||
mHash *= FNVPrime;
|
||||
pCharData++;
|
||||
}
|
||||
}
|
||||
|
||||
u32 CHashFNV1A::GetHash32()
|
||||
{
|
||||
return (u32) mHash;
|
||||
}
|
||||
|
||||
u64 CHashFNV1A::GetHash64()
|
||||
{
|
||||
return mHash;
|
||||
}
|
||||
|
||||
// ************ CONVENIENCE FUNCTIONS ************
|
||||
void CHashFNV1A::HashByte(const u8& v)
|
||||
{
|
||||
HashData(&v, 1);
|
||||
}
|
||||
|
||||
void CHashFNV1A::HashShort(const u16& v)
|
||||
{
|
||||
HashData(&v, 2);
|
||||
}
|
||||
|
||||
void CHashFNV1A::HashLong(const u32& v)
|
||||
{
|
||||
HashData(&v, 4);
|
||||
}
|
||||
|
||||
void CHashFNV1A::HashFloat(const float& v)
|
||||
{
|
||||
HashData(&v, 4);
|
||||
}
|
||||
|
||||
void CHashFNV1A::HashString(const std::string& v)
|
||||
{
|
||||
HashData(v.data(), v.size());
|
||||
}
|
||||
Reference in New Issue
Block a user