/// <summary> /// Write header data from variable into byte[] buffer. When override, call base.UpdateBuffer() after write your code /// </summary> public virtual PageBuffer UpdateBuffer() { // using fixed position to be faster than BufferWriter ENSURE(this.PageID == _buffer.ReadUInt32(P_PAGE_ID), "pageID can't be changed"); // page information // PageID - never change! _buffer.Write(this.PrevPageID, P_PREV_PAGE_ID); _buffer.Write(this.NextPageID, P_NEXT_PAGE_ID); _buffer.Write(this.PageListSlot, P_INITIAL_SLOT); // transaction information _buffer.Write(this.TransactionID, P_TRANSACTION_ID); _buffer.Write(this.IsConfirmed, P_IS_CONFIRMED); _buffer.Write(this.ColID, P_COL_ID); // segments information _buffer.Write(this.ItemsCount, P_ITEMS_COUNT); _buffer.Write(this.UsedBytes, P_USED_BYTES); _buffer.Write(this.FragmentedBytes, P_FRAGMENTED_BYTES); _buffer.Write(this.NextFreePosition, P_NEXT_FREE_POSITION); _buffer.Write(this.HighestIndex, P_HIGHEST_INDEX); return(_buffer); }
/// <summary> /// Read header data from byte[] buffer into local variables /// using fixed position be be faster than use BufferReader /// </summary> public BasePage(PageBuffer buffer) { _buffer = buffer; // page information this.PageID = _buffer.ReadUInt32(P_PAGE_ID); this.PageType = (PageType)_buffer.ReadByte(P_PAGE_TYPE); this.PrevPageID = _buffer.ReadUInt32(P_PREV_PAGE_ID); this.NextPageID = _buffer.ReadUInt32(P_NEXT_PAGE_ID); // transaction information this.TransactionID = _buffer.ReadUInt32(P_TRANSACTION_ID); this.IsConfirmed = _buffer.ReadBool(P_IS_CONFIRMED); this.ColID = _buffer.ReadUInt32(P_COL_ID); // blocks information this.ItemsCount = _buffer.ReadByte(P_ITEMS_COUNT); this.UsedBytes = _buffer.ReadUInt16(P_USED_BYTES); this.FragmentedBytes = _buffer.ReadUInt16(P_FRAGMENTED_BYTES); this.NextFreePosition = _buffer.ReadUInt16(P_NEXT_FREE_POSITION); this.HighestIndex = _buffer.ReadByte(P_HIGHEST_INDEX); }