private void RetractPage() { UnmanagedPageList.pageCache.AddHead(this.stackPage); this.stackPage = this.pageList.RemoveHead(); this.stackBottom = UnmanagedPageList.FirstPageAddr(this.stackPage); this.stackTop = UnmanagedPageList.EndPageAddr(this.stackPage); this.stackPtr = this.stackTop; }
private void SetCursor(UIntPtr pageAddr) { UIntPtr *preFirstAddr = UnmanagedPageList.FirstPageAddr(pageAddr) - 1; if (pageAddr == lastPageStart) { this.currentCursor = new PageCursor(preFirstAddr, this.lastPageLimit); } else { UIntPtr *endAddr = UnmanagedPageList.EndPageAddr(pageAddr); this.currentCursor = new PageCursor(preFirstAddr, endAddr); } }
private void AdvanceWritePage() { UIntPtr pageAddr; if (UnmanagedPageList.pageCache.IsEmpty) { bool fCleanPages = true; UIntPtr page = PageManager.EnsurePages(null, (UIntPtr)1, PageType.System, ref fCleanPages); pageAddr = PageTable.PageAddr(page); } else { pageAddr = UnmanagedPageList.pageCache.RemoveHead(); } this.pageList.AddTail(pageAddr); this.writeCursor = new PageCursor(UnmanagedPageList.FirstPageAddr(pageAddr), UnmanagedPageList.EndPageAddr(pageAddr)); }
private void AdvancePage() { if (this.stackPage != UIntPtr.Zero) { this.pageList.AddHead(this.stackPage); } if (UnmanagedPageList.pageCache.IsEmpty) { bool fCleanPages = true; UIntPtr page = PageManager.EnsurePages(null, (UIntPtr)1, PageType.System, ref fCleanPages); this.stackPage = PageTable.PageAddr(page); } else { this.stackPage = UnmanagedPageList.pageCache.RemoveHead(); } this.stackBottom = UnmanagedPageList.FirstPageAddr(this.stackPage); this.stackPtr = this.stackBottom; this.stackTop = UnmanagedPageList.EndPageAddr(this.stackPage); }
private void AdvanceReadPage() { if (this.pageList.IsEmpty) { return; } if (this.readPage != UIntPtr.Zero) { UnmanagedPageList.pageCache.AddHead(this.readPage); } this.readPage = this.pageList.RemoveHead(); UIntPtr *startPtr = UnmanagedPageList.FirstPageAddr(this.readPage); UIntPtr *limitPtr; if (this.pageList.IsEmpty) { limitPtr = this.writeCursor.cursor; } else { limitPtr = UnmanagedPageList.EndPageAddr(this.readPage); } this.readCursor = new PageCursor(startPtr, limitPtr); }