public FilePage(ulong pageId, int pageSize) { Id = pageId; _data = new byte[pageSize]; IsDirty = true; Deleted = false; _modified = 1; _writeOffset = (pageId - 1) * (ulong)pageSize; // TODO : could be a bit shift instead? _pageSize = pageSize; }
public FilePage(Stream stream, ulong pageId, int pageSize) { _writeOffset = (pageId - 1) * (ulong)pageSize; // TODO : could be a bit shift instead? stream.Seek((long)_writeOffset, SeekOrigin.Begin); _data = new byte[pageSize]; stream.Read(Data, 0, pageSize); IsDirty = false; Deleted = false; Id = pageId; _modified = 0; _pageSize = pageSize; }
public BinaryPageAdapter(BinaryFilePageStore store, BinaryFilePage page, ulong currentTransactionId, bool isModified) { _store = store; _page = page; _isModified = isModified; if (_page.FirstTransactionId > currentTransactionId && _page.SecondTransactionId > currentTransactionId) { // This is an error condition that would happen if a store is kept open while two successive writes are committed throw new ReadWriteStoreModifiedException(); } _data = isModified ? _page.GetWriteBuffer(currentTransactionId) : _page.GetReadBuffer(currentTransactionId); }
public FilePage(ulong pageId, int pageSize) { Id = pageId; _data = new byte[pageSize]; IsDirty = true; Deleted = false; _modified = 1; _writeOffset = (pageId - 1) * (ulong)pageSize; // TODO : could be a bit shift instead? _pageSize = pageSize; #if DEBUG_PAGESTORE Logging.LogDebug("New Page: PageId={0}", Id); #endif }
public FilePage(ulong pageId, int pageSize, byte[] data) { Id = pageId; _data = new byte[pageSize]; data.CopyTo(Data, 0); IsDirty = true; Deleted = false; _modified = 1; _writeOffset = (pageId - 1) * (ulong)pageSize; // TODO : could be a bit shift instead? _pageSize = pageSize; #if DEBUG_PAGESTORE Logging.LogDebug("New Data: PageId={0} Hash={1}", Id, DataHash()); #endif }
/// <summary> /// Update the page data /// </summary> /// <param name="data">The data buffer to copy from</param> /// <param name="srcOffset">The offset in <paramref name="data"/> to start copying from </param> /// <param name="pageOffset">The offset in the page to start copying to</param> /// <param name="len">The number of bytes to copy</param> public void SetData(byte[] data, int srcOffset, int pageOffset, int len) { lock (_writeLock) { if (len < 0) { len = data.Length; } Array.ConstrainedCopy(data, srcOffset, _data, pageOffset, len); IsDirty = true; _modified++; #if DEBUG_PAGESTORE Logging.LogDebug("Update {0} {1} {2}", Id, _modified, BitConverter.ToInt32(_data, 0)); #endif } }
/// <summary> /// Update the page data /// </summary> /// <param name="data">The data buffer to copy from</param> /// <param name="srcOffset">The offset in <paramref name="data"/> to start copying from </param> /// <param name="pageOffset">The offset in the page to start copying to</param> /// <param name="len">The number of bytes to copy</param> public void SetData(byte[] data, int srcOffset, int pageOffset, int len) { lock (_writeLock) { if (len < 0) { len = data.Length; } Array.ConstrainedCopy(data, srcOffset, _data, pageOffset, len); IsDirty = true; _modified++; #if DEBUG_PAGESTORE Logging.LogDebug("Update: PageId={0} Hash={1}", Id, DataHash()); #endif } }
public FilePage(Stream stream, ulong pageId, int pageSize) { _data = new byte[pageSize]; _writeOffset = (pageId - 1) * (ulong)pageSize; // TODO : could be a bit shift instead? lock (stream) { stream.Seek((long)_writeOffset, SeekOrigin.Begin); stream.Read(Data, 0, pageSize); } #if DEBUG_PAGESTORE Logging.LogDebug("Read: PageId={0} Hash={1}", Id, DataHash()); #endif IsDirty = false; Deleted = false; Id = pageId; _modified = 0; _pageSize = pageSize; }
public void SetData(byte[] data, int srcOffset = 0, int pageOffset = 0, int len = -1) { _store.EnsureWriteable(_page.Id); Array.ConstrainedCopy(data, srcOffset, _data, pageOffset, len < 0 ? data.Length : len); }