private int[] GetOffsetsFromPageMap(HNPAGEMAP pageMap) { var offsets = new List <int>(); for (int i = 0; i <= pageMap.AllocationCount; i++) { var offset = pageMap.AllocationTable.Take(i * 2, 2); offsets.Add(offset.ToInt32()); } return(offsets.ToArray()); }
public IDictionary <HID, BinaryData> Load(int pageIndex, HNPAGEMAP pageMap, BinaryData pageData) { var items = new Dictionary <HID, BinaryData>(); var offsets = GetOffsetsFromPageMap(pageMap); for (int i = 0; i < offsets.Length - 1; i++) { var itemData = pageData.Take(offsets[i], offsets[i + 1] - offsets[i]); var hid = new HID(Constants.NID_TYPE_HID, i + 1, pageIndex); items.Add(hid, itemData); } return(items); }
private BinaryData EncodeBlock( ExternalDataBlockForHeapOnNode block, BinaryData encodedHeader) { var pageMap = new HNPAGEMAP( block.NumberOfItems + 1, 0, CreateAllocationTable(block.Items, block.HeaderSize)); return (BinaryDataGenerator .New() .Append(encodedHeader) .Append(block.Items) .FillTo(block.RawByteCountWithoutPageMapWithPadding) .Append(pageMap, pageMapEncoder) .GetData()); }
private HNPAGEMAP GetPageMapFromExternalDataBlock(BinaryData block, int pageMapOffset) { var hnPageMap = block.Take(pageMapOffset, block.Length - pageMapOffset); return(HNPAGEMAP.OfValue(hnPageMap)); }