public Page AllocatePage(int num)
        {
            Page page = _freeSpaceRepository.TryAllocateFromFreeSpace(this, num);

            if (page == null)             // allocate from end of file
            {
                if (num > 1)
                {
                    _pager.EnsureContinious(this, NextPageNumber, num);
                }
                page            = _pager.Get(this, NextPageNumber);
                page.PageNumber = NextPageNumber;
                NextPageNumber += num;
            }
            page.Lower = (ushort)Constants.PageHeaderSize;
            page.Upper = (ushort)_pager.PageSize;
            page.Dirty = true;
            _dirtyPages[page.PageNumber] = page.PageNumber;
            return(page);
        }