procedure MemClear(out DATA; const ByteCount : u64);
begin
System.FillChar((@DATA)^, ByteCount, 0);
end;
function MemCompare(p1, p2 : pointer; ByteCount : u64) : bool;
var p1_08 : ^u8 absolute p1; p1_16 : ^u16 absolute p1; p1_32 : ^u32 absolute p1; p1_64 : ^u64 absolute p1;
var p2_08 : ^u8 absolute p2; p2_16 : ^u16 absolute p2; p2_32 : ^u32 absolute p2; p2_64 : ^u64 absolute p2;
begin
while (ByteCount >= 8) do begin if (p1_64^ <> p2_64^) then exit(False); Inc(p1_64); Inc(p2_64); Dec(ByteCount, 8); end;
while (ByteCount >= 4) do begin if (p1_32^ <> p2_32^) then exit(False); Inc(p1_32); Inc(p2_32); Dec(ByteCount, 4); end;
while (ByteCount >= 2) do begin if (p1_16^ <> p2_16^) then exit(False); Inc(p1_16); Inc(p2_16); Dec(ByteCount, 2); end;
while (ByteCount >= 1) do begin if (p1_08^ <> p2_08^) then exit(False); Inc(p1_08); Inc(p2_08); Dec(ByteCount ); end;
Result := True;
end;
procedure MemCopy(const SRC; out DEST; const ByteCount : u64);
begin
System.Move((@SRC)^, (@DEST)^, ByteCount);
end;