public BinaryData GetHeapItem(NID[] nodePath, HID hid) { var externalBlock = dataTreeReader.Read(nodePath, hid.BlockIndex)[0]; int pageMapOffset; if (hid.BlockIndex == 0) { var hnHDR = HNHDR.OfValue(externalBlock.Take(12)); pageMapOffset = hnHDR.PageMapOffset; } else if (hid.BlockIndex == 8 || (hid.BlockIndex - 8) % 128 == 0) { var hnBitmapHDR = HNBITMAPHDR.OfValue(externalBlock.Take(66)); pageMapOffset = hnBitmapHDR.PageMapOffset; } else { var hnPageHDR = HNPAGEHDR.OfValue(externalBlock.Take(2)); pageMapOffset = hnPageHDR.PageMapOffset; } var pageMap = GetPageMapFromExternalDataBlock(externalBlock, pageMapOffset); var items = heapOnNodeItemsLoader.Load(hid.BlockIndex, pageMap, externalBlock); return(items[hid]); }
private BinaryData EncodeFirstBlock( ExternalDataBlockForHeapOnNode block, HID userRoot, BinaryData fillLevelsForTheFirst8Blocks, int clientSignature) { var hnHDR = new HNHDR( block.RawByteCountWithoutPageMapWithPadding, 0xEC, clientSignature, userRoot, fillLevelsForTheFirst8Blocks); return(EncodeBlock(block, headerEncoder.Encode(hnHDR))); }
public HNHDR GetHeapOnNodeHeader(NID[] nodePath) { var externalBlock = dataTreeReader.Read(nodePath, 0); return(HNHDR.OfValue(externalBlock[0].Take(12))); }