/// <summary> /// Static method for write a page using a diferent writer - used when create empty datafile /// </summary> public static void WritePage(BinaryWriter writer, BasePage page) { var stream = writer.BaseStream; var posStart = (long)page.PageID * (long)BasePage.PAGE_SIZE; var posEnd = posStart + BasePage.PAGE_SIZE; // position cursor if (stream.Position != posStart) { stream.Seek(posStart, SeekOrigin.Begin); } // write page header page.WriteHeader(writer); // write content except for empty pages if (page.PageType != PageType.Empty) { page.WriteContent(writer); } // write with zero non-used page writer.Write(new byte[posEnd - stream.Position]); // if page is dirty, clean up page.IsDirty = false; }
/// <summary> /// Write a page in sequence, not in absolute position /// </summary> private void WritePageInJournal(BinaryWriter writer, BasePage page) { // no need position cursor - journal writes in sequence var stream = writer.BaseStream; var posStart = stream.Position; var posEnd = posStart + BasePage.PAGE_SIZE; // Write page header page.WriteHeader(writer); // write content except for empty pages if (page.PageType != PageType.Empty) { page.WriteContent(writer); } // write with zero non-used page writer.Write(new byte[posEnd - stream.Position]); }
/// <summary> /// Write a page in sequence, not in absolute position /// </summary> private void WritePageInJournal(uint index, BinaryWriter writer, BasePage page) { // Position cursor writer.Seek(index * BasePage.PAGE_SIZE); // target = it's the target position after write header. It's used when header does not conaints all PAGE_HEADER_SIZE var target = writer.BaseStream.Position + BasePage.PAGE_HEADER_SIZE; // Write page header page.WriteHeader(writer); // write content except for empty pages if (page.PageType != PageType.Empty) { // position writer to the end of page header writer.BaseStream.Seek(target - writer.BaseStream.Position, SeekOrigin.Current); page.WriteContent(writer); } }
/// <summary> /// Static method for write a page using a diferent writer - used when create empty datafile /// </summary> public static void WritePage(BinaryWriter writer, BasePage page) { // Position cursor writer.Seek(page.PageID * BasePage.PAGE_SIZE); // target = it's the target position after write header. It's used when header does not conaints all PAGE_HEADER_SIZE var target = writer.BaseStream.Position + BasePage.PAGE_HEADER_SIZE; // Write page header page.WriteHeader(writer); // write content except for empty pages if (page.PageType != PageType.Empty) { // position writer to the end of page header writer.BaseStream.Seek(target - writer.BaseStream.Position, SeekOrigin.Current); page.WriteContent(writer); } // if page is dirty, clean up page.IsDirty = false; }