Esempio n. 1
0
        internal static Block Parse(ref ReadOnlyMemory <byte> data)
        {
            var   intRef = data;
            Block block  = new Block();

            block.Zero           = ParsePrimitive <uint>(ref intRef);
            block.BlockId        = ParsePrimitive <uint>(ref intRef);
            block.Unknown1       = ParsePrimitive <long>(ref intRef);
            block.Unknown2       = ParsePrimitive <long>(ref intRef);
            block.NumberOfRows   = ParsePrimitive <byte>(ref intRef);
            block.NextRowId      = ParsePrimitive <byte>(ref intRef);
            block.Unknown3       = ParsePrimitive <ushort>(ref intRef);
            block.RemainingBytes = ParsePrimitive <ushort>(ref intRef);
            block.DataSize       = ParsePrimitive <ushort>(ref intRef);
            block.Unknown4       = ParsePrimitive <long>(ref intRef);
            var rowData = new RowHeader[block.NumberOfRows];

            for (int i = 0; i < block.NumberOfRows; i++)
            {
                rowData[i] = RowHeader.Parse(intRef.Slice(ParsePrimitive <ushort>(data.Slice(4096 - 6 - i * 2))));
            }

            data = data.Slice(4096);

            block.Rows = rowData;

            return(block);
        }