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"); } }
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); } }
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); } }
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(); }