/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception> private void WritePageToDisk(CachedIoAdapter.Page page) { ValidateReadOnly(); try { _io.Write(page._buffer, page.Size()); _filePointer = page.EndAddress(); page._dirty = false; } catch (Db4oIOException e) { _readOnly = true; throw; } }
// _posPageMap.put(new Long(page.startPosition / PAGE_SIZE), page); /// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception> private int IoRead(CachedIoAdapter.Page page) { int count = _io.Read(page._buffer); if (count > 0) { _filePointer = page._startAddress + count; } return count; }
private void MovePageToHead(CachedIoAdapter.Page page) { if (page == _head) { return; } if (page == _tail) { CachedIoAdapter.Page tempTail = _tail._prev; tempTail._next = null; _tail._next = _head; _tail._prev = null; _head._prev = page; _head = _tail; _tail = tempTail; } else { page._prev._next = page._next; page._next._prev = page._prev; page._next = _head; _head._prev = page; page._prev = null; _head = page; } }
/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception> private void GetPageFromDisk(CachedIoAdapter.Page page, long pos) { long startAddress = pos - pos % _pageSize; page.StartAddress(startAddress); IoSeek(page._startAddress); int count = IoRead(page); if (count > 0) { page.EndAddress(startAddress + count); } else { page.EndAddress(startAddress); } }
/// <exception cref="Db4objects.Db4o.Ext.Db4oIOException"></exception> private void FlushPage(CachedIoAdapter.Page page) { if (!page._dirty) { return; } IoSeek(page.StartAddress()); WritePageToDisk(page); return; }
private void ResetPageAddress(CachedIoAdapter.Page page, long startAddress) { page.StartAddress(startAddress); page.EndAddress(startAddress + _pageSize); }
private bool ContainsHeaderBlock(CachedIoAdapter.Page page) { return page.StartAddress() <= FileHeader1.HeaderLength; }
private void FlushIfHeaderBlockPage(CachedIoAdapter.Page page) { if (ContainsHeaderBlock(page)) { FlushPage(page); } }