Пример #1
0
        /// <summary>
        /// Store all bytes in one extended page. If data ir bigger than a page, store in more pages and make all in sequence
        /// </summary>
        public void StoreExtendData(ExtendPage page, byte[] data)
        {
            var offset = 0;
            var bytesLeft = data.Length;

            while (bytesLeft > 0)
            {
                var bytesToCopy = Math.Min(bytesLeft, BasePage.PAGE_AVAILABLE_BYTES);

                page.Data = new byte[bytesToCopy];

                Buffer.BlockCopy(data, offset, page.Data, 0, bytesToCopy);

                // updates free bytes + items count
                page.UpdateItemCount();

                bytesLeft -= bytesToCopy;
                offset += bytesToCopy;

                // if has bytes left, let's get a new page
                if (bytesLeft > 0)
                {
                    // if i have a continuous page, get it... or create a new one (set as dirty)
                    page = page.NextPageID != uint.MaxValue ?
                        _pager.GetPage<ExtendPage>(page.NextPageID, true) :
                        _pager.NewPage<ExtendPage>(page);
                }
            }

            // when finish, check if last page has a nextPageId - if have, delete them
            if (page.NextPageID != uint.MaxValue)
            {
                // Delete nextpage and all nexts
                _pager.DeletePage(page.NextPageID, true);

                // set my page with no NextPageID
                page.NextPageID = uint.MaxValue;
            }
        }
Пример #2
0
 public static void Dump(this ExtendPage page, StringBuilder sb)
 {
     sb.AppendFormat("BytesUsed: {0}", page.Data.Length);
 }