public void FillIndex()
        {
            fs = File.Open(this.filePath, FileMode.Open);
            fs.Seek(0, SeekOrigin.Begin);
            IndexRow indexRow;

            for (int i = 0; i < numberOfPages; i++)
            {
                indexRow = new IndexRow(0, i);
                Write(indexRow);
            }
            WritePage();
            fs.Close();
        }
 public void Write(IndexRow indexRow)
 {
     if (lastWrite < IndexPage.BLOCKING_FACTOR - 1)
     {
         lastWrite++;
         byte[] row = indexRow.GetBytes();
         Array.Copy(row, 0, page.diskBlock, this.lastWrite * IndexRow.ROW_SIZE, IndexRow.ROW_SIZE);
     }
     else
     {
         WritePage();
         Write(indexRow);
     }
 }
        public IndexRow ReadNextRow()
        {
            IndexRow row = new IndexRow();

            if (lastRead < IndexPage.BLOCKING_FACTOR - 1)
            {
                this.lastRead++;
                byte[] rowInBytes = new byte[IndexRow.ROW_SIZE];
                Array.Copy(page.diskBlock, lastRead * IndexRow.ROW_SIZE, rowInBytes, 0, rowInBytes.Length);
                row.FromBytes(rowInBytes);
            }
            else
            {
                ReadPage(this.page.pageNumber + 1);
                row = ReadNextRow();
            }
            return(row);
        }
        public void UpdateIndex(int pageNumber, int key)
        {
            this.reads  = 0;
            this.writes = 0;

            fs = File.Open(this.filePath, FileMode.Open);
            int page = pageNumber / IndexPage.BLOCKING_FACTOR;

            ReadPage(page);
            IndexRow row = ReadNextRow();

            while (row.page != pageNumber)
            {
                row = ReadNextRow();
            }
            row.key   = key;
            lastWrite = lastRead - 1;
            Write(row);
            WritePage();
            fs.Close();
        }