예제 #1
0
        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>");
        }
예제 #2
0
파일: DebugStuff.cs 프로젝트: ikvm/ravendb
 public LargeFixedSizeTreeSafe(byte *ptr)
 {
     _header = (FixedSizeTreeHeader.Large *)ptr;
 }
예제 #3
0
        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>");
        }