Exemplo n.º 1
0
        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);
                }
        }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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);
                }
        }
Exemplo n.º 5
0
        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();
            }
        }