121 lines
2.2 KiB
C++
121 lines
2.2 KiB
C++
|
#include "ehs/Util.h"
|
||
|
|
||
|
namespace ehs
|
||
|
{
|
||
|
bool Util::Compare(const void* const a, const void* const b, const UInt_64 size)
|
||
|
{
|
||
|
Byte* aBytes = (Byte*)a;
|
||
|
Byte* bBytes = (Byte*)b;
|
||
|
UInt_64 remainder = size;
|
||
|
UInt_64 i = 0;
|
||
|
|
||
|
while (i < size)
|
||
|
{
|
||
|
if (remainder >= sizeof(UInt_64))
|
||
|
{
|
||
|
if (*(UInt_64*)&aBytes[i] != *(UInt_64*)&bBytes[i])
|
||
|
return false;
|
||
|
|
||
|
i += sizeof(UInt_64);
|
||
|
}
|
||
|
else if (remainder >= sizeof(UInt_32))
|
||
|
{
|
||
|
if (*(UInt_32*)&aBytes[i] != *(UInt_32*)&bBytes[i])
|
||
|
return false;
|
||
|
|
||
|
i += sizeof(UInt_32);
|
||
|
}
|
||
|
else if (remainder >= sizeof(UInt_16))
|
||
|
{
|
||
|
if (*(UInt_16*)&aBytes[i] != *(UInt_16*)&bBytes[i])
|
||
|
return false;
|
||
|
|
||
|
i += sizeof(UInt_16);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (aBytes[i] != bBytes[i])
|
||
|
return false;
|
||
|
|
||
|
i += sizeof(Byte);
|
||
|
}
|
||
|
|
||
|
remainder = size - i;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void Util::Copy(void* const out, const void* const in, const UInt_64 size)
|
||
|
{
|
||
|
Byte* outB = (Byte*)out;
|
||
|
Byte* inB = (Byte*)in;
|
||
|
UInt_64 remainder = size;
|
||
|
|
||
|
UInt_64 i = 0;
|
||
|
while (i < size)
|
||
|
{
|
||
|
if (remainder >= sizeof(UInt_64))
|
||
|
{
|
||
|
*(UInt_64*)&outB[i] = *(UInt_64*)&inB[i];
|
||
|
i += sizeof(UInt_64);
|
||
|
}
|
||
|
else if (remainder >= sizeof(UInt_32))
|
||
|
{
|
||
|
*(UInt_32*)&outB[i] = *(UInt_32*)&inB[i];
|
||
|
i += sizeof(UInt_32);
|
||
|
}
|
||
|
else if (remainder >= sizeof(UInt_16))
|
||
|
{
|
||
|
*(UInt_16*)&outB[i] = *(UInt_16*)&inB[i];
|
||
|
i += sizeof(UInt_16);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
outB[i++] = inB[i];
|
||
|
}
|
||
|
|
||
|
remainder = size - i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Util::Fill(void* const out, const UInt_64 outSize, const void* const in, const UInt_64 inSize)
|
||
|
{
|
||
|
if (outSize % inSize)
|
||
|
return;
|
||
|
|
||
|
for (UInt_64 i = 0; i < outSize; i += inSize)
|
||
|
Copy(&((Byte*)out)[i], in, inSize);
|
||
|
}
|
||
|
|
||
|
void Util::Zero(void* const in, const UInt_64 size)
|
||
|
{
|
||
|
Byte* inB = (Byte*)in;
|
||
|
UInt_64 remainder = size;
|
||
|
UInt_64 i = 0;
|
||
|
while (i < size)
|
||
|
{
|
||
|
if (remainder >= sizeof(UInt_64))
|
||
|
{
|
||
|
*(UInt_64*)&inB[i] = 0;
|
||
|
i += sizeof(UInt_64);
|
||
|
}
|
||
|
else if (remainder >= sizeof(UInt_32))
|
||
|
{
|
||
|
*(UInt_32*)&inB[i] = 0;
|
||
|
i += sizeof(UInt_32);
|
||
|
}
|
||
|
else if (remainder >= sizeof(UInt_16))
|
||
|
{
|
||
|
*(UInt_16*)&inB[i] = 0;
|
||
|
i += sizeof(UInt_16);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
inB[i++] = 0;
|
||
|
}
|
||
|
|
||
|
remainder = size - i;
|
||
|
}
|
||
|
}
|
||
|
}
|