mirror of https://github.com/vxunderground/VX-API
117 lines
1.7 KiB
C++
117 lines
1.7 KiB
C++
#include "Win32Helper.h"
|
|
|
|
INT32 HashStringMurmurW(_In_ LPCWSTR String)
|
|
{
|
|
INT Length = (INT)StringLengthW(String);
|
|
UINT32 hash = 0;
|
|
PUINT32 Tmp;
|
|
SIZE_T Idx;
|
|
UINT32 Cnt;
|
|
|
|
if (Length > 3)
|
|
{
|
|
Idx = Length >> 2;
|
|
Tmp = (PUINT32)String;
|
|
|
|
do {
|
|
Cnt = *Tmp++;
|
|
|
|
Cnt *= 0xcc9e2d51;
|
|
Cnt = (Cnt << 15) | (Cnt >> 17);
|
|
Cnt *= 0x1b873593;
|
|
|
|
hash ^= Cnt;
|
|
hash = (hash << 13) | (hash >> 19);
|
|
hash = (hash * 5) + 0xe6546b64;
|
|
|
|
} while (--Idx);
|
|
|
|
String = (PWCHAR)Tmp;
|
|
}
|
|
|
|
if (Length & 3)
|
|
{
|
|
Idx = Length & 3;
|
|
Cnt = 0;
|
|
String = &String[Idx - 1];
|
|
|
|
do {
|
|
Cnt <<= 8;
|
|
Cnt |= *String--;
|
|
|
|
} while (--Idx);
|
|
|
|
Cnt *= 0xcc9e2d51;
|
|
Cnt = (Cnt << 15) | (Cnt >> 17);
|
|
Cnt *= 0x1b873593;
|
|
hash ^= Cnt;
|
|
}
|
|
|
|
hash ^= Length;
|
|
hash ^= hash >> 16;
|
|
hash *= 0x85ebca6b;
|
|
hash ^= hash >> 13;
|
|
hash *= 0xc2b2ae35;
|
|
hash ^= hash >> 16;
|
|
|
|
return hash;
|
|
}
|
|
|
|
INT32 HashStringMurmurA(_In_ LPCSTR String)
|
|
{
|
|
INT Length = (INT)StringLengthA(String);
|
|
UINT32 hash = 0;
|
|
PUINT32 Tmp;
|
|
SIZE_T Idx;
|
|
UINT32 Cnt;
|
|
|
|
if (Length > 3)
|
|
{
|
|
Idx = Length >> 2;
|
|
Tmp = (PUINT32)String;
|
|
|
|
do {
|
|
Cnt = *Tmp++;
|
|
|
|
Cnt *= 0xcc9e2d51;
|
|
Cnt = (Cnt << 15) | (Cnt >> 17);
|
|
Cnt *= 0x1b873593;
|
|
|
|
hash ^= Cnt;
|
|
hash = (hash << 13) | (hash >> 19);
|
|
hash = (hash * 5) + 0xe6546b64;
|
|
|
|
} while (--Idx);
|
|
|
|
String = (PCHAR)Tmp;
|
|
}
|
|
|
|
if (Length & 3)
|
|
{
|
|
Idx = Length & 3;
|
|
Cnt = 0;
|
|
String = &String[Idx - 1];
|
|
|
|
do {
|
|
Cnt <<= 8;
|
|
Cnt |= *String--;
|
|
|
|
} while (--Idx);
|
|
|
|
Cnt *= 0xcc9e2d51;
|
|
Cnt = (Cnt << 15) | (Cnt >> 17);
|
|
Cnt *= 0x1b873593;
|
|
hash ^= Cnt;
|
|
}
|
|
|
|
hash ^= Length;
|
|
hash ^= hash >> 16;
|
|
hash *= 0x85ebca6b;
|
|
hash ^= hash >> 13;
|
|
hash *= 0xc2b2ae35;
|
|
hash ^= hash >> 16;
|
|
|
|
return hash;
|
|
|
|
}
|