Inheritance: IDisposable
示例#1
0
        private static void VersionCheck(StreamRef stream)
        {
            var streamVersion = stream.FormatVersion;

            if (streamVersion == 0)
            {
                stream.FormatVersion = CurrentFormatVersion;
            }
            else if (streamVersion != CurrentFormatVersion)
            {
                throw new NotImplementedException("Format upgrade not implemented");
            }
        }
示例#2
0
 public StreamRange(StreamRef stream, ViewCache.CacheEntry cacheEntry, long offset, uint size)
 {
     Stream     = stream;
     CacheEntry = cacheEntry;
     View       = null;
     Offset     = offset;
     Size       = size;
     Buffer     = cacheEntry.Buffer;
     IsDisposed = false;
     unchecked {
         Pointer  = cacheEntry.Pointer + cacheEntry.PointerOffset;
         Pointer += (offset - cacheEntry.Offset);
     }
 }
示例#3
0
 public StreamRange(StreamRef stream, MemoryMappedViewAccessor view, long offset, uint size, long actualOffset, long actualSize)
 {
     Stream     = stream;
     View       = view;
     CacheEntry = default(ViewCache.CacheEntry);
     Offset     = offset;
     Size       = size;
     Buffer     = view.GetSafeBuffer();
     Pointer    = null;
     Buffer.AcquirePointer(ref Pointer);
     IsDisposed = false;
     unchecked {
         Pointer += view.GetPointerOffset();
         Pointer += (offset - actualOffset);
     }
 }
示例#4
0
        public BTree(StreamSource storage, string prefix)
        {
            Storage = storage;
            Prefix  = prefix;

            IndexStream = Storage.Open(prefix + "index");
            KeyStream   = Storage.Open(prefix + "keys");
            DataStream  = Storage.Open(prefix + "data");

            VersionCheck(IndexStream);
            VersionCheck(KeyStream);
            VersionCheck(DataStream);

            bool needInit = IndexStream.Length < BTreeHeader.Size;

            IndexStream.LengthChanging += IndexStream_LengthChanging;
            IndexStream.LengthChanged  += IndexStream_LengthChanged;

            DataStream.LengthChanging += DataStream_LengthChanging;
            DataStream.LengthChanged  += DataStream_LengthChanged;

            _GetKeyOfEntry = ReadKey;

            _HeaderRange = IndexStream.AccessRangeUncached(0, BTreeHeader.Size);

            if (needInit)
            {
                InitializeBTree();
            }

            _FreelistBucketLocks = new object[FreelistIndex.BucketCount];
            for (int i = 0; i < _FreelistBucketLocks.Length; i++)
            {
                _FreelistBucketLocks[i] = new object();
            }

            EnsureFreelistExists();
        }
示例#5
0
 public StreamRange(StreamRef stream, ViewCache.CacheEntry cacheEntry, long offset, uint size)
 {
     Stream = stream;
     CacheEntry = cacheEntry;
     View = null;
     Offset = offset;
     Size = size;
     Buffer = cacheEntry.Buffer;
     IsDisposed = false;
     unchecked {
         Pointer = cacheEntry.Pointer + cacheEntry.PointerOffset;
         Pointer += (offset - cacheEntry.Offset);
     }
 }
示例#6
0
 public StreamRange(StreamRef stream, MemoryMappedViewAccessor view, long offset, uint size, long actualOffset, long actualSize)
 {
     Stream = stream;
     View = view;
     CacheEntry = default(ViewCache.CacheEntry);
     Offset = offset;
     Size = size;
     Buffer = view.GetSafeBuffer();
     Pointer = null;
     Buffer.AcquirePointer(ref Pointer);
     IsDisposed = false;
     unchecked {
         Pointer += view.GetPointerOffset();
         Pointer += (offset - actualOffset);
     }
 }