Пример #1
0
        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]);
        }
Пример #2
0
        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)));
        }
Пример #3
0
        public HNHDR GetHeapOnNodeHeader(NID[] nodePath)
        {
            var externalBlock = dataTreeReader.Read(nodePath, 0);

            return(HNHDR.OfValue(externalBlock[0].Take(12)));
        }