public HexCachedBufferStreamImpl(HexSimpleBufferStream simpleStream, bool disposeStream) { if (simpleStream == null) throw new ArgumentNullException(nameof(simpleStream)); this.simpleStream = simpleStream; this.disposeStream = disposeStream; pageSize = simpleStream.PageSize; Debug.Assert(pageSize == 0 || IsPowerOfTwo(pageSize)); if (pageSize == 0 || !IsPowerOfTwo(pageSize)) pageSize = DEFAULT_PAGE_SIZE; if (pageSize > MAX_PAGE_SIZE) pageSize = MAX_PAGE_SIZE; Debug.Assert(pageSize >= MIN_PAGE_SIZE); if (pageSize < MIN_PAGE_SIZE) pageSize = MIN_PAGE_SIZE; Debug.Assert(IsPowerOfTwo(pageSize)); pageSizeMask = pageSize - 1; int numCachedPages = (int)((CACHE_SIZE + pageSizeMask) / pageSize); cachedPages = new CachedPage[numCachedPages]; for (int i = 0; i < cachedPages.Length; i++) cachedPages[i] = new CachedPage(i, (int)pageSize); }
/// <summary> /// Creates a <see cref="HexBufferStream"/> /// </summary> /// <param name="simpleStream">Underlying stream</param> /// <param name="disposeStream">true if the returned stream owns <paramref name="simpleStream"/> and /// disposes it when the returned stream gets disposed</param> /// <returns></returns> public abstract HexCachedBufferStream CreateCached(HexSimpleBufferStream simpleStream, bool disposeStream);
protected override void DisposeCore() { if (disposeStream) simpleStream?.Dispose(); simpleStream = null; }
public override HexCachedBufferStream CreateCached(HexSimpleBufferStream simpleStream, bool disposeStream) { if (simpleStream == null) throw new ArgumentNullException(nameof(simpleStream)); return new HexCachedBufferStreamImpl(simpleStream, disposeStream); }