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(); }