private unsafe static void RenderFixedSizeTreePage(Transaction tx, Page page, TextWriter sw, FixedSizeTreeHeader.Large *header, string text, bool open) { sw.WriteLine( "<ul><li><input type='checkbox' id='page-{0}' {3} /><label for='page-{0}'>{4}: Page {0:#,#;;0} - {1} - {2:#,#;;0} entries from {5}</label><ul>", page.PageNumber, page.IsLeaf ? "Leaf" : "Branch", page.FixedSize_NumberOfEntries, open ? "checked" : "", text, page.Source); for (int i = 0; i < page.FixedSize_NumberOfEntries; i++) { if (page.IsLeaf) { var key = *(long *)(page.Base + page.FixedSize_StartPosition + (((sizeof(long) + header->ValueSize)) * i)); sw.Write("{0:#,#;;0}, ", key); } else { var key = *(long *)(page.Base + page.FixedSize_StartPosition + (sizeof(long) + sizeof(long)) * i); var pageNum = *(long *)(page.Base + page.FixedSize_StartPosition + (((sizeof(long) + sizeof(long))) * i) + sizeof(long)); var s = key == long.MinValue ? "[smallest]" : key.ToString("#,#"); RenderFixedSizeTreePage(tx, tx.GetReadOnlyPage(pageNum), sw, header, s, false); } } sw.WriteLine("</ul></li></ul>"); }
public LargeFixedSizeTreeSafe(byte *ptr) { _header = (FixedSizeTreeHeader.Large *)ptr; }
private unsafe static void RenderFixedSizeTreePage(LowLevelTransaction tx, FixedSizeTreePage page, TextWriter sw, FixedSizeTreeHeader.Large *header, string text, bool open) { sw.WriteLine( "<ul><li><input type='checkbox' id='page-{0}' {3} /><label for='page-{0}'>{4}: Page {0:#,#;;0} - {1} - {2:#,#;;0} entries</label><ul>", page.PageNumber, page.IsLeaf ? "Leaf" : "Branch", page.NumberOfEntries, open ? "checked" : "", text); for (int i = 0; i < page.NumberOfEntries; i++) { if (page.IsLeaf) { var key = *(long *)(page.Pointer + page.StartPosition + (((sizeof(long) + header->ValueSize)) * i)); sw.Write("{0:#,#;;0}, ", key); } else { var key = *(long *)(page.Pointer + page.StartPosition + (((sizeof(long) + sizeof(long))) * i)); var pageNum = *(long *)(page.Pointer + page.StartPosition + (((sizeof(long) + sizeof(long))) * i) + sizeof(long)); var s = key.ToString("#,#"); if (i == 0) { if (key == long.MinValue) { s = "[smallest]"; } else { s = "[smallest " + s + "]"; } } var fstPage = tx.GetPage(pageNum); RenderFixedSizeTreePage(tx, new FixedSizeTreePage(fstPage.Pointer, header->ValueSize + sizeof(long), Constants.Storage.PageSize), sw, header, s, false); } } sw.WriteLine("</ul></li></ul>"); }