October3d55/M/LowEntryExtStdLib/Source/LowEntryExtendedStandardLib.../Private/Classes/LowEntryHashingPearsonLibra...

49 lines
7.3 KiB
C++
Raw Normal View History

2025-03-10 09:43:27 +08:00
// Copyright Low Entry. Apache License, Version 2.0.
#include "LowEntryHashingPearsonLibrary.h"
constexpr uint8 ULowEntryHashingPearsonLibrary::pearson[256] = {static_cast<uint8>(0x62), static_cast<uint8>(0x06), static_cast<uint8>(0x55), static_cast<uint8>(0x96), static_cast<uint8>(0x24), static_cast<uint8>(0x17), static_cast<uint8>(0x70), static_cast<uint8>(0xA4), static_cast<uint8>(0x87), static_cast<uint8>(0xCF), static_cast<uint8>(0xA9), static_cast<uint8>(0x05), static_cast<uint8>(0x1A), static_cast<uint8>(0x40), static_cast<uint8>(0xA5), static_cast<uint8>(0xDB), static_cast<uint8>(0x3D), static_cast<uint8>(0x14), static_cast<uint8>(0x44), static_cast<uint8>(0x59), static_cast<uint8>(0x82), static_cast<uint8>(0x3F), static_cast<uint8>(0x34), static_cast<uint8>(0x66), static_cast<uint8>(0x18), static_cast<uint8>(0xE5), static_cast<uint8>(0x84), static_cast<uint8>(0xF5), static_cast<uint8>(0x50), static_cast<uint8>(0xD8), static_cast<uint8>(0xC3), static_cast<uint8>(0x73), static_cast<uint8>(0x5A), static_cast<uint8>(0xA8), static_cast<uint8>(0x9C), static_cast<uint8>(0xCB), static_cast<uint8>(0xB1), static_cast<uint8>(0x78), static_cast<uint8>(0x02), static_cast<uint8>(0xBE), static_cast<uint8>(0xBC), static_cast<uint8>(0x07), static_cast<uint8>(0x64), static_cast<uint8>(0xB9), static_cast<uint8>(0xAE), static_cast<uint8>(0xF3), static_cast<uint8>(0xA2), static_cast<uint8>(0x0A), static_cast<uint8>(0xED), static_cast<uint8>(0x12), static_cast<uint8>(0xFD), static_cast<uint8>(0xE1), static_cast<uint8>(0x08), static_cast<uint8>(0xD0), static_cast<uint8>(0xAC), static_cast<uint8>(0xF4), static_cast<uint8>(0xFF), static_cast<uint8>(0x7E), static_cast<uint8>(0x65), static_cast<uint8>(0x4F), static_cast<uint8>(0x91), static_cast<uint8>(0xEB), static_cast<uint8>(0xE4), static_cast<uint8>(0x79), static_cast<uint8>(0x7B), static_cast<uint8>(0xFB), static_cast<uint8>(0x43), static_cast<uint8>(0xFA), static_cast<uint8>(0xA1), static_cast<uint8>(0x00), static_cast<uint8>(0x6B), static_cast<uint8>(0x61), static_cast<uint8>(0xF1), static_cast<uint8>(0x6F), static_cast<uint8>(0xB5), static_cast<uint8>(0x52), static_cast<uint8>(0xF9), static_cast<uint8>(0x21), static_cast<uint8>(0x45), static_cast<uint8>(0x37), static_cast<uint8>(0x3B), static_cast<uint8>(0x99), static_cast<uint8>(0x1D), static_cast<uint8>(0x09), static_cast<uint8>(0xD5), static_cast<uint8>(0xA7), static_cast<uint8>(0x54), static_cast<uint8>(0x5D), static_cast<uint8>(0x1E), static_cast<uint8>(0x2E), static_cast<uint8>(0x5E), static_cast<uint8>(0x4B), static_cast<uint8>(0x97), static_cast<uint8>(0x72), static_cast<uint8>(0x49), static_cast<uint8>(0xDE), static_cast<uint8>(0xC5), static_cast<uint8>(0x60), static_cast<uint8>(0xD2), static_cast<uint8>(0x2D), static_cast<uint8>(0x10), static_cast<uint8>(0xE3), static_cast<uint8>(0xF8), static_cast<uint8>(0xCA), static_cast<uint8>(0x33), static_cast<uint8>(0x98), static_cast<uint8>(0xFC), static_cast<uint8>(0x7D), static_cast<uint8>(0x51), static_cast<uint8>(0xCE), static_cast<uint8>(0xD7), static_cast<uint8>(0xBA), static_cast<uint8>(0x27), static_cast<uint8>(0x9E), static_cast<uint8>(0xB2), static_cast<uint8>(0xBB), static_cast<uint8>(0x83), static_cast<uint8>(0x88), static_cast<uint8>(0x01), static_cast<uint8>(0x31), static_cast<uint8>(0x32), static_cast<uint8>(0x11), static_cast<uint8>(0x8D), static_cast<uint8>(0x5B), static_cast<uint8>(0x2F), static_cast<uint8>(0x81), static_cast<uint8>(0x3C), static_cast<uint8>(0x63), static_cast<uint8>(0x9A), static_cast<uint8>(0x23), static_cast<uint8>(0x56), static_cast<uint8>(0xAB), static_cast<uint8>(0x69), static_cast<uint8>(0x22), static_cast<uint8>(0x26), static_cast<uint8>(0xC8), static_cast<uint8>(0x93), static_cast<uint8>(0x3A), static_cast<uint8>(0x4D), static_cast<uint8>(0x76), static_cast<uint8>(0xAD), static_cast<uint8>(0xF6), static_cast<uint8>(0x4C), static_cast<uint8>(0xFE), static_cast<uint8>(0x85), static_cast<uint8>(0xE8), static_cast<uint8>(0xC4), static_cast<uint8>(0x90), static_cast<uint8>(0xC6), static_cast<uint8>(0x7C), static_cast<uint8>(0x35), static_cast<uint8>(0x04), static_cast<uint8>(0x6C), static_cast<uint8>(0x4A), static_cast<uint8>(0xDF), s
TArray<uint8> ULowEntryHashingPearsonLibrary::Hash(const TArray<uint8>& Bytes, int32 Index, int32 Length, const int32 HashLength)
{
if (HashLength <= 0)
{
return TArray<uint8>();
}
TArray<uint8> hh;
hh.SetNum(HashLength);
if (Bytes.Num() <= 0)
{
return hh;
}
if (Index < 0)
{
Length += Index;
Index = 0;
}
if (Length > (Bytes.Num() - Index))
{
Length = Bytes.Num() - Index;
}
if (Length <= 0)
{
return hh;
}
for (int32 j = 0; j < HashLength; j++)
{
uint8 h = pearson[(Bytes[Index] + j) & 0xff];
for (int32 i = 1; i < Length; i++)
{
h = pearson[(h ^ Bytes[(Index + i) & 0xff]) & 0xff];
}
hh[j] = h;
}
return hh;
}