/// <summary> /// Initializes a new instance of the BlockCacheStream class. /// </summary> /// <param name="toWrap">The stream to wrap</param> /// <param name="ownership">Whether to assume ownership of <c>toWrap</c></param> /// <param name="settings">The cache settings</param> public BlockCacheStream(SparseStream toWrap, Ownership ownership, BlockCacheSettings settings) { if (!toWrap.CanRead) { throw new ArgumentException("The wrapped stream does not support reading", "toWrap"); } if (!toWrap.CanSeek) { throw new ArgumentException("The wrapped stream does not support seeking", "toWrap"); } _wrappedStream = toWrap; _ownWrapped = ownership; _settings = new BlockCacheSettings(settings); if (_settings.OptimumReadSize % _settings.BlockSize != 0) { throw new ArgumentException("Invalid settings, OptimumReadSize must be a multiple of BlockSize", "settings"); } _readBuffer = new byte[_settings.OptimumReadSize]; _blocksInReadBuffer = _settings.OptimumReadSize / _settings.BlockSize; int totalBlocks = (int)(_settings.ReadCacheSize / _settings.BlockSize); _cache = new BlockCache <Block>(_settings.BlockSize, totalBlocks); _stats = new BlockCacheStatistics(); _stats.FreeReadBlocks = totalBlocks; }
/// <summary> /// Initializes a new instance of the BlockCacheStream class. /// </summary> /// <param name="toWrap">The stream to wrap</param> /// <param name="ownership">Whether to assume ownership of <c>toWrap</c></param> /// <param name="settings">The cache settings</param> public BlockCacheStream(SparseStream toWrap, Ownership ownership, BlockCacheSettings settings) { if (!toWrap.CanRead) { throw new ArgumentException("The wrapped stream does not support reading", "toWrap"); } if (!toWrap.CanSeek) { throw new ArgumentException("The wrapped stream does not support seeking", "toWrap"); } _wrappedStream = toWrap; _ownWrapped = ownership; _settings = new BlockCacheSettings(settings); if (_settings.OptimumReadSize % _settings.BlockSize != 0) { throw new ArgumentException("Invalid settings, OptimumReadSize must be a multiple of BlockSize", "settings"); } _readBuffer = new byte[_settings.OptimumReadSize]; _blocksInReadBuffer = _settings.OptimumReadSize / _settings.BlockSize; int totalBlocks = (int)(_settings.ReadCacheSize / _settings.BlockSize); _cache = new BlockCache<Block>(_settings.BlockSize, totalBlocks); _stats = new BlockCacheStatistics(); _stats.FreeReadBlocks = totalBlocks; }