public unsafe CoreTOCParser(Stream stream)
{
using (var br = new BinaryReader(stream))
{
TOCHeader hdr = br.Read<TOCHeader>();
for (int i = 0; i < NUM_SNO_GROUPS; i++)
{
if (hdr.entryCounts[i] > 0)
{
br.BaseStream.Position = hdr.entryOffsets[i] + Marshal.SizeOf(hdr);
for (int j = 0; j < hdr.entryCounts[i]; j++)
{
SNOGroup snoGroup = (SNOGroup)br.ReadInt32();
int snoId = br.ReadInt32();
int pName = br.ReadInt32();
long oldPos = br.BaseStream.Position;
br.BaseStream.Position = hdr.entryOffsets[i] + Marshal.SizeOf(hdr) + 12 * hdr.entryCounts[i] + pName;
string name = br.ReadCString();
br.BaseStream.Position = oldPos;
snoDic.Add(snoId, new SNOInfo() { GroupId = snoGroup, Name = name, Ext = extensions[snoGroup] });
}
}
}
}
}