コード例 #1
0
 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;
 }
コード例 #2
0
 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;
 }
コード例 #3
0
 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);
 }
コード例 #4
0
ファイル: FilePage.cs プロジェクト: zhuliangbing/BrightstarDB
        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
        }
コード例 #5
0
ファイル: FilePage.cs プロジェクト: zhuliangbing/BrightstarDB
        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
        }
コード例 #6
0
        /// <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
            }
        }
コード例 #7
0
ファイル: FilePage.cs プロジェクト: zhuliangbing/BrightstarDB
        /// <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
            }
        }
コード例 #8
0
ファイル: FilePage.cs プロジェクト: zhuliangbing/BrightstarDB
        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;
        }
コード例 #9
0
 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);
 }