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);
		}
Пример #2
0
 /// <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);
		/// <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);
		}