Use `ReadOnlySpan` for `SpecialCRC32.Add`
This commit is contained in:
parent
de76127f76
commit
71be5c7997
|
@ -36,7 +36,7 @@ namespace BizHawk.Emulation.DiscSystem
|
||||||
|
|
||||||
//hash the TOC
|
//hash the TOC
|
||||||
static void AddAsBytesTo(SpecialCRC32 crc32, int i)
|
static void AddAsBytesTo(SpecialCRC32 crc32, int i)
|
||||||
=> crc32.Add(BitConverter.GetBytes(i), 0, 4);
|
=> crc32.Add(BitConverter.GetBytes(i));
|
||||||
AddAsBytesTo(crc, (int)disc.TOC.Session1Format);
|
AddAsBytesTo(crc, (int)disc.TOC.Session1Format);
|
||||||
AddAsBytesTo(crc, disc.TOC.FirstRecordedTrackNumber);
|
AddAsBytesTo(crc, disc.TOC.FirstRecordedTrackNumber);
|
||||||
AddAsBytesTo(crc, disc.TOC.LastRecordedTrackNumber);
|
AddAsBytesTo(crc, disc.TOC.LastRecordedTrackNumber);
|
||||||
|
@ -52,7 +52,7 @@ namespace BizHawk.Emulation.DiscSystem
|
||||||
for (int i = 0; i < 26; i++)
|
for (int i = 0; i < 26; i++)
|
||||||
{
|
{
|
||||||
dsr.ReadLBA_2352(i, buffer2352, 0);
|
dsr.ReadLBA_2352(i, buffer2352, 0);
|
||||||
crc.Add(buffer2352, 0, 2352);
|
crc.Add(buffer2352);
|
||||||
}
|
}
|
||||||
|
|
||||||
return crc.Result;
|
return crc.Result;
|
||||||
|
@ -77,7 +77,7 @@ namespace BizHawk.Emulation.DiscSystem
|
||||||
for (int i = 0; i < disc.Session1.LeadoutLBA; i++)
|
for (int i = 0; i < disc.Session1.LeadoutLBA; i++)
|
||||||
{
|
{
|
||||||
dsr.ReadLBA_2352(i, buffer2352, 0);
|
dsr.ReadLBA_2352(i, buffer2352, 0);
|
||||||
crc.Add(buffer2352, 0, 2352);
|
crc.Add(buffer2352);
|
||||||
}
|
}
|
||||||
|
|
||||||
return crc.Result;
|
return crc.Result;
|
||||||
|
@ -131,22 +131,9 @@ namespace BizHawk.Emulation.DiscSystem
|
||||||
|
|
||||||
private uint current = 0xFFFFFFFF;
|
private uint current = 0xFFFFFFFF;
|
||||||
|
|
||||||
/// <exception cref="ArgumentOutOfRangeException">
|
public void Add(ReadOnlySpan<byte> data)
|
||||||
/// <paramref name="offset"/> is negative, or
|
|
||||||
/// end index (<paramref name="offset"/> + <paramref name="size"/>) is beyond the end of <paramref name="data"/>
|
|
||||||
/// </exception>
|
|
||||||
public unsafe void Add(byte[] data, int offset, int size)
|
|
||||||
{
|
{
|
||||||
if (offset + size > data.Length)
|
foreach (var b in data) current = CRC32Table[(current ^ b) & 0xFF] ^ (current >> 8);
|
||||||
throw new ArgumentOutOfRangeException();
|
|
||||||
if (offset < 0)
|
|
||||||
throw new ArgumentOutOfRangeException();
|
|
||||||
fixed (byte* pData = data)
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
byte b = pData[offset + i];
|
|
||||||
current = CRC32Table[(current ^ b) & 0xFF] ^ (current >> 8);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -35,12 +35,12 @@ namespace BizHawk.Tests.Common.checksums
|
||||||
|
|
||||||
data = InitialiseArray();
|
data = InitialiseArray();
|
||||||
DiscHasher.SpecialCRC32 crc32 = new();
|
DiscHasher.SpecialCRC32 crc32 = new();
|
||||||
crc32.Add(data, 0, data.Length);
|
crc32.Add(data);
|
||||||
Assert.AreEqual(EXPECTED, crc32.Result);
|
Assert.AreEqual(EXPECTED, crc32.Result);
|
||||||
|
|
||||||
var dataExtra = InitialiseArrayExtra();
|
var dataExtra = InitialiseArrayExtra();
|
||||||
DiscHasher.SpecialCRC32 crc32Extra = new();
|
DiscHasher.SpecialCRC32 crc32Extra = new();
|
||||||
crc32Extra.Add(dataExtra, 0, dataExtra.Length);
|
crc32Extra.Add(dataExtra);
|
||||||
Assert.AreEqual(EXPECTED_EXTRA, crc32Extra.Result);
|
Assert.AreEqual(EXPECTED_EXTRA, crc32Extra.Result);
|
||||||
crc32.Incorporate(crc32Extra.Result, dataExtra.Length);
|
crc32.Incorporate(crc32Extra.Result, dataExtra.Length);
|
||||||
Assert.AreEqual(EXPECTED_COMBINED, crc32.Result);
|
Assert.AreEqual(EXPECTED_COMBINED, crc32.Result);
|
||||||
|
|
Loading…
Reference in New Issue