private static void WriteBlockStream(ICompressionAlgorithm compressionAlgorithm, CacheHeader header, DemoCustomHeader customHeader, MemoryStream ms, string s) { using (var blockStream = new BlockStream(compressionAlgorithm, ms, CompressionMode.Compress, true)) using (var writer = new ExtendedBinaryWriter(blockStream)) { CheckReadException(blockStream); blockStream.WriteHeader(header.Write); var bp = new BlockStream.BlockPosition(); // detect that we have written a block blockStream.GetBlockPosition(bp); writer.WriteOptAscii(s); blockStream.GetBlockPosition(bp); // here we write a test string that won't invoke a new block blockStream.GetBlockPosition(customHeader.DemoPosition); writer.WriteOptAscii(SmallString); blockStream.GetBlockPosition(bp); Assert.Equal(customHeader.DemoPosition.FileOffset, blockStream.Position); blockStream.Flush(); // this will be flushed during dispose writer.WriteOptAscii(FinalString); } }
private void WritePredictions(IReadOnlyList <Prediction[]> predictionsPerRef) { // ReSharper disable once UsePatternMatching var customHeader = _header.CustomHeader as PredictionCacheCustomHeader; if (customHeader == null) { throw new InvalidCastException(); } var indexEntries = customHeader.Entries; var blockPosition = new BlockStream.BlockPosition(); for (var i = 0; i < predictionsPerRef.Count; i++) { var refPredictions = predictionsPerRef[i]; _blockStream.GetBlockPosition(blockPosition); indexEntries[i].FileOffset = blockPosition.FileOffset; indexEntries[i].Count = refPredictions?.Length ?? 0; if (refPredictions != null) { foreach (var prediction in refPredictions) { prediction.Write(_writer); } } _blockStream.Flush(); } }
private void WritePredictions(Prediction[][] predictionsPerRef) { var indexEntries = _header.Index.Entries; var blockPosition = new BlockStream.BlockPosition(); for (int i = 0; i < predictionsPerRef.Length; i++) { var refPredictions = predictionsPerRef[i]; _blockStream.GetBlockPosition(blockPosition); indexEntries[i].FileOffset = blockPosition.FileOffset; indexEntries[i].Count = refPredictions.Length; foreach (var prediction in refPredictions) { prediction.Write(_writer); } _blockStream.Flush(); } }
private static void WriteBlockStream(ICompressionAlgorithm compressionAlgorithm, DemoHeader header, DemoCustomHeader customHeader, Stream ms, string s) { using (var blockStream = new BlockStream(compressionAlgorithm, ms, CompressionMode.Compress, true)) using (var writer = new ExtendedBinaryWriter(blockStream)) { CheckReadException(blockStream); blockStream.WriteHeader(header.Write); writer.WriteOptAscii(s); (customHeader.FileOffset, customHeader.InternalOffset) = blockStream.GetBlockPosition(); Assert.Equal(customHeader.FileOffset, blockStream.Position); writer.WriteOptAscii(SmallString); blockStream.Flush(); // this will be flushed during dispose writer.WriteOptAscii(FinalString); } }
private void WritePredictions(IReadOnlyList <Prediction[]> predictionsPerRef) { var indexEntries = _header.Custom.Entries; for (var i = 0; i < predictionsPerRef.Count; i++) { var refPredictions = predictionsPerRef[i]; var position = _blockStream.GetBlockPosition(); indexEntries[i].FileOffset = position.FileOffset; indexEntries[i].Count = refPredictions?.Length ?? 0; if (refPredictions != null) { foreach (var prediction in refPredictions) { prediction.Write(_writer); } } _blockStream.Flush(); } }