コード例 #1
0
ファイル: Read.cs プロジェクト: Razer2015/PDIPFSWatcher
        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);
        }
コード例 #2
0
        public static FileInfoBTree Parse(EndianBinReader reader, uint offset)
        {
            FileInfoBTree FileInfo = new FileInfoBTree(reader, ref offset);

            return(FileInfo);
        }