Esempio n. 1
0
 protected BTreePage(ReaderBase reader, uint page, BTreeHeader header, ushort[] cellOffsets)
 {
     Reader      = reader;
     Page        = page;
     Header      = header;
     CellOffsets = cellOffsets;
 }
Esempio n. 2
0
        internal static BTreePage Parse(ReaderBase reader, uint page)
        {
            // Read header
            reader.SeekPage(page);

            if (page == 1)
            {
                // Skip the first 100 bytes
                reader.Skip(DatabaseHeader.HeaderSize);
            }

            BTreeHeader header = BTreeHeader.Parse(reader);

            // Read cells
            ushort[] cellOffsets = new ushort[header.CellCount];

            for (ushort i = 0; i < header.CellCount; i++)
            {
                cellOffsets[i] = reader.ReadUInt16();
            }

            Array.Sort(cellOffsets);

            BTreePage res;

            switch (header.Type)
            {
            case BTreeType.InteriorIndexBtreePage:
                throw new ArgumentOutOfRangeException();

            case BTreeType.InteriorTableBtreePage:
                res = new BTreeInteriorTablePage(reader, page, header, cellOffsets);
                break;

            case BTreeType.LeafIndexBtreePage:
                throw new ArgumentOutOfRangeException();

            case BTreeType.LeafTableBtreePage:
                res = new BTreeLeafTablePage(reader, page, header, cellOffsets);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            res.ParseInternal();

            return(res);
        }
 public BTreeInteriorTablePage(ReaderBase reader, uint page, BTreeHeader header, ushort[] cellOffsets)
     : base(reader, page, header, cellOffsets)
 {
 }