Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }