PKHeX/PKHeX.Core/Saves/Blocks/BlockInfoNDS.cs
Kurt 871f9b0627 Convert checksum operations to span-based
Fix SAV.Data references in SAV_Misc4 to use the General block instead
2021-05-14 12:30:40 -07:00

41 lines
No EOL
1.2 KiB
C#

using System;
namespace PKHeX.Core
{
/// <summary>
/// Gen5 Block Info
/// </summary>
public sealed class BlockInfoNDS : BlockInfo
{
private readonly int ChecksumOffset;
private readonly int ChecksumMirror;
public BlockInfoNDS(int offset, int length, int chkOffset, int chkMirror)
{
Offset = offset;
Length = length;
ChecksumOffset = chkOffset;
ChecksumMirror = chkMirror;
}
private ushort GetChecksum(byte[] data) => Checksums.CRC16_CCITT(new ReadOnlySpan<byte>(data, Offset, Length));
protected override bool ChecksumValid(byte[] data)
{
ushort chk = GetChecksum(data);
if (chk != BitConverter.ToUInt16(data, ChecksumOffset))
return false;
if (chk != BitConverter.ToUInt16(data, ChecksumMirror))
return false;
return true;
}
protected override void SetChecksum(byte[] data)
{
ushort chk = GetChecksum(data);
var bytes = BitConverter.GetBytes(chk);
bytes.CopyTo(data, ChecksumOffset);
bytes.CopyTo(data, ChecksumMirror);
}
}
}