EHS/src/Util.cpp
Karutoh bcd71cf2b5
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 1m8s
Build & Release / Linux-AMD64-Build (push) Successful in 1m30s
Build & Release / Linux-AARCH64-Build (push) Successful in 3m21s
Adjusted workflow.
2024-02-05 22:25:30 -08:00

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;
}
}
}