예제 #1
0
        private void AddToRecentlyFoundPages(Cursor c, Page p, bool?leftmostPage, bool?rightmostPage)
        {
            MemorySlice firstKey;

            if (leftmostPage == true)
            {
                if (p.KeysPrefixed)
                {
                    firstKey = PrefixedSlice.BeforeAllKeys;
                }
                else
                {
                    firstKey = Slice.BeforeAllKeys;
                }
            }
            else
            {
                firstKey = p.GetNodeKey(0);
            }

            MemorySlice lastKey;

            if (rightmostPage == true)
            {
                if (p.KeysPrefixed)
                {
                    lastKey = PrefixedSlice.AfterAllKeys;
                }
                else
                {
                    lastKey = Slice.AfterAllKeys;
                }
            }
            else
            {
                lastKey = p.GetNodeKey(p.NumberOfEntries - 1);
            }

            var cursorPath = new long[c.Pages.Count];

            var cur = c.Pages.First;
            int pos = cursorPath.Length - 1;

            while (cur != null)
            {
                cursorPath[pos--] = cur.Value.PageNumber;
                cur = cur.Next;
            }

            var foundPage = new RecentlyFoundPages.FoundPage(p.PageNumber, p, firstKey, lastKey, cursorPath);

            RecentlyFoundPages.Add(foundPage);
        }
예제 #2
0
        private void AddToRecentlyFoundPages(Cursor c, Page p, bool?leftmostPage, bool?rightmostPage)
        {
            var foundPage = new RecentlyFoundPages.FoundPage(c.Pages.Count)
            {
                Number = p.PageNumber
            };

            if (leftmostPage == true)
            {
                if (p.KeysPrefixed)
                {
                    foundPage.FirstKey = PrefixedSlice.BeforeAllKeys;
                }
                else
                {
                    foundPage.FirstKey = Slice.BeforeAllKeys;
                }
            }
            else
            {
                foundPage.FirstKey = p.GetNodeKey(0);
            }

            if (rightmostPage == true)
            {
                if (p.KeysPrefixed)
                {
                    foundPage.LastKey = PrefixedSlice.AfterAllKeys;
                }
                else
                {
                    foundPage.LastKey = Slice.AfterAllKeys;
                }
            }
            else
            {
                foundPage.LastKey = p.GetNodeKey(p.NumberOfEntries - 1);
            }

            var cur = c.Pages.First;
            int pos = foundPage.CursorPath.Length - 1;

            while (cur != null)
            {
                foundPage.CursorPath[pos--] = cur.Value.PageNumber;
                cur = cur.Next;
            }

            _tx.AddRecentlyFoundPage(this, foundPage);
        }
예제 #3
0
파일: Tree.cs 프로젝트: stvoidmain/ravendb
        private void AddToRecentlyFoundPages(Cursor c, Page p, bool?leftmostPage, bool?rightmostPage)
        {
            var foundPage = new RecentlyFoundPages.FoundPage(c.Pages.Count)
            {
                Number   = p.PageNumber,
                FirstKey = leftmostPage == true ? Slice.BeforeAllKeys : p.GetNodeKey(0),
                LastKey  = rightmostPage == true ? Slice.AfterAllKeys : p.GetNodeKey(p.NumberOfEntries - 1),
            };
            var cur = c.Pages.First;
            int pos = foundPage.CursorPath.Length - 1;

            while (cur != null)
            {
                foundPage.CursorPath[pos--] = cur.Value.PageNumber;
                cur = cur.Next;
            }

            _tx.AddRecentlyFoundPage(this, foundPage);
        }
예제 #4
0
파일: Tree.cs 프로젝트: paulcbetts/ravendb
	    private void AddToRecentlyFoundPages(Transaction tx, Cursor c, Page p, bool? leftmostPage, bool? rightmostPage)
	    {
	        var foundPage = new RecentlyFoundPages.FoundPage(c.Pages.Count)
	        {
	            Number = p.PageNumber,
	            FirstKey = leftmostPage == true ? Slice.BeforeAllKeys : p.GetNodeKey(0),
	            LastKey = rightmostPage == true ? Slice.AfterAllKeys : p.GetNodeKey(p.NumberOfEntries - 1),
	        };
	        var cur = c.Pages.First;
	        int pos = foundPage.CursorPath.Length - 1;
	        while (cur != null)
	        {
	            foundPage.CursorPath[pos--] = cur.Value.PageNumber;
	            cur = cur.Next;
	        }

	        tx.AddRecentlyFoundPage(this, foundPage);
	    }
예제 #5
0
파일: Tree.cs 프로젝트: jesuslpm/ravendb
        private void AddToRecentlyFoundPages(Cursor c, Page p, bool? leftmostPage, bool? rightmostPage)
        {
            var foundPage = new RecentlyFoundPages.FoundPage(c.Pages.Count)
            {
                Number = p.PageNumber
            };

            if (leftmostPage == true)
            {
                if(p.KeysPrefixed)
                    foundPage.FirstKey = PrefixedSlice.BeforeAllKeys;
                else
                    foundPage.FirstKey = Slice.BeforeAllKeys;
            }
            else
            {
                foundPage.FirstKey = p.GetNodeKey(0);
            }

            if (rightmostPage == true)
            {
                if (p.KeysPrefixed)
                    foundPage.LastKey = PrefixedSlice.AfterAllKeys;
                else
                    foundPage.LastKey = Slice.AfterAllKeys;
            }
            else
            {
                foundPage.LastKey = p.GetNodeKey(p.NumberOfEntries - 1);
            }

            var cur = c.Pages.First;
            int pos = foundPage.CursorPath.Length - 1;
            while (cur != null)
            {
                foundPage.CursorPath[pos--] = cur.Value.PageNumber;
                cur = cur.Next;
            }

            _tx.AddRecentlyFoundPage(this, foundPage);
        }