Example #1
0
            public bool MoveNext()
            {
                AssertNoChanges();

                while (_currentPage != null)
                {
                    _currentPage.LastSearchPosition++;
                    if (_currentPage.LastSearchPosition < _currentPage.NumberOfEntries)
                    {
                        // run out of entries, need to select the next page...
                        while (_currentPage.IsBranch)
                        {
                            _parent._cursor.Push(_currentPage);
                            var childParentNumber = _currentPage.GetEntry(_currentPage.LastSearchPosition)->PageNumber;
                            _currentPage = _parent.GetReadOnlyPage(childParentNumber);

                            _currentPage.LastSearchPosition = 0;
                        }
                        return(true);// there is another entry in this page
                    }
                    if (_parent._cursor.Count == 0)
                    {
                        break;
                    }
                    _currentPage = _parent._cursor.Pop();
                }
                _currentPage = null;

                return(false);
            }
Example #2
0
            public bool MoveNext()
            {
                AssertNoChanges();

                if (_currentPage == null)
                {
                    throw new InvalidOperationException("No current page was set");
                }

                while (_currentPage != null)
                {
                    _currentPage.LastSearchPosition++;
                    if (_currentPage.LastSearchPosition < _currentPage.NumberOfEntries)
                    {
                        // run out of entries, need to select the next page...
                        while (_currentPage.IsBranch)
                        {
                            _parent._cursor.Push(_currentPage);
                            var childParentNumber = _parent.PageValueFor(_currentPage, _currentPage.LastSearchPosition);
                            _currentPage = _parent.GetReadOnlyPage(childParentNumber);

                            _currentPage.LastSearchPosition = 0;
                        }
                        return(true);// there is another entry in this page
                    }
                    if (_parent._cursor.Count == 0)
                    {
                        break;
                    }
                    _currentPage = _parent._cursor.Pop();
                }
                _currentPage = null;

                return(false);
            }
Example #3
0
        private static unsafe void DumpFixedSizeTreeToStream(LowLevelTransaction tx, FixedSizeTree fst, TextWriter writer, Slice name, Tree tree)
        {
            var ptr = tree.DirectRead(name);

            if (ptr == null)
            {
                writer.WriteLine("<p>empty fixed size tree</p>");
            }
            else if (((FixedSizeTreeHeader.Embedded *)ptr)->RootObjectType == RootObjectType.EmbeddedFixedSizeTree)
            {
                var header = ((FixedSizeTreeHeader.Embedded *)ptr);
                writer.WriteLine("<p>Number of entries: {0:#,#;;0}, val size: {1:#,#;;0}.</p>", header->NumberOfEntries, header->ValueSize);
                writer.WriteLine("<ul>");
                var dataStart = ptr + sizeof(FixedSizeTreeHeader.Embedded);
                for (int i = 0; i < header->NumberOfEntries; i++)
                {
                    var key = *(long *)(dataStart + ((sizeof(long) + header->ValueSize) * i));
                    writer.WriteLine("<li>{0:#,#;;0}</li>", key);
                }
                writer.WriteLine("</ul>");
            }
            else
            {
                var header = (FixedSizeTreeHeader.Large *)ptr;
                writer.WriteLine("<p>Number of entries: {0:#,#;;0}, val size: {1:#,#;;0}.</p>", header->NumberOfEntries, header->ValueSize);
                writer.WriteLine("<div class='css-treeview'><ul>");

                var page = fst.GetReadOnlyPage(header->RootPageNumber);

                RenderFixedSizeTreePage(tx, page, writer, header, "Root", true);

                writer.WriteLine("</ul></div>");
            }
        }
Example #4
0
        private static async Task RenderLargeFixedSizeTreeAsync(FixedSizeTreeSafe.LargeFixedSizeTreeSafe tree, LowLevelTransaction tx, FixedSizeTree fst, TextWriter writer)
        {
            await writer.WriteLineAsync(string.Format("<p>Number of entries: {0:#,#;;0}, val size: {1:#,#;;0}.</p>", tree.NumberOfEntries, tree.ValueSize));

            await writer.WriteLineAsync("<div class='css-treeview'><ul>");

            var page = fst.GetReadOnlyPage(tree.RootPageNumber);

            await RenderFixedSizeTreePageAsync(tx, page, writer, tree, "Root", true);

            await writer.WriteLineAsync("</ul></div>");
        }