private FileInfoBTree[] LoadFileInfoBTree(EndianBinReader reader, uint offset) { reader.BaseStream.Seek(offset, System.IO.SeekOrigin.Begin); byte childCount = reader.ReadByte(); uint childOffset = reader.Read3BytesUInt32(); uint nodeCount = reader.ReadUInt16(); uint dataOffset = offset + 4 + 2; var objects = new FileInfoBTree[0]; uint indexer = 0; for (int i = 0; i < nodeCount; i++) { uint keyCount = (ushort)(Util.ExtractTwelveBits(reader, dataOffset, 0) & 0x7FF); uint nextNodeDataOffset = (ushort)(Util.ExtractTwelveBits(reader, dataOffset, (ushort)(keyCount + 1))); Array.Resize(ref objects, (int)(objects.Length + keyCount)); for (int j = 0; j < keyCount; j++) { uint nodeOffset = Util.ExtractTwelveBits(reader, dataOffset, (uint)j + 1); var tmpOffset = (dataOffset + nodeOffset); objects[indexer] = new FileInfoBTree(reader, ref tmpOffset); indexer++; } dataOffset += nextNodeDataOffset; } return(objects); }
public static FileInfoBTree Parse(EndianBinReader reader, uint offset) { FileInfoBTree FileInfo = new FileInfoBTree(reader, ref offset); return(FileInfo); }