Beispiel #1
0
        public static RadixTreePageBackingObject FromPage(IPage page)
        {
            var result = new RadixTreePageBackingObject(page.Index);
            var items  = PageFormatter.ReadVariableSizeItems(page);

            foreach (var item in items)
            {
                result.Items.Add(item);
            }

            return(result);
        }
Beispiel #2
0
        private void CheckRoot()
        {
            if (_rootNodeReference == null)
            {
                var headerPage = _pageManager.FetchPage(0);

                _rootPageIndex = ((HeadingPageHeader)PageFormatter.GetPageHeader(headerPage)).AccessMethodPageIndex;
                var page = _pageManager.FetchPage(_rootPageIndex);

                var items = PageFormatter.ReadVariableSizeItems(page);
                if (items.Any())
                {
                    // root page already has an item
                    _rootNodeReference = new DbItemReference(_rootPageIndex, 0);
                }
                else
                {
                    var node = new RadixTreeNode(256);
                    PageFormatter.AddVariableSizeItem(page, GetNodeBytes(node, GetNodeSize(0, 256)));
                    _rootNodeReference = new DbItemReference(_rootPageIndex, 0);
                    _pageManager.UpdatePage(page);
                }
            }
        }