Example #1
0
        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());
        }
Example #2
0
        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);
        }
Example #3
0
        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());
        }
Example #4
0
        private HNPAGEMAP GetPageMapFromExternalDataBlock(BinaryData block, int pageMapOffset)
        {
            var hnPageMap = block.Take(pageMapOffset, block.Length - pageMapOffset);

            return(HNPAGEMAP.OfValue(hnPageMap));
        }