/// <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; } }
public static void Dump(this ExtendPage page, StringBuilder sb) { sb.AppendFormat("BytesUsed: {0}", page.Data.Length); }