using System; namespace PKHeX.Core { /// /// Gen5 Block Info /// 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(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); } } }