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); }
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); }
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>"); } }
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>"); }