コード例 #1
0
        private void WriteBitString(FileEncodingOutputStream stream, string bitString)
        {
            Bit[] bits = TestHelper.BitsFromString(bitString);

            for (int n = 0; n < bits.Length; n++)
            {
                stream.WriteBit(bits[n]);
            }
        }
コード例 #2
0
        public void SaveRestorePositionTest1()
        {
            MemoryStream memoryStream = new MemoryStream();

            using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) {
                IStreamPosition position = stream.SavePosition();
                Assert.IsNotNull(position);
                stream.RestorePosition(position);

                WriteBitString(stream, "11111111");
                Assert.AreEqual(new byte[] { 0xFF }, memoryStream.ToArray());
            }
        }
コード例 #3
0
        public void WriteBitTest2()
        {
            MemoryStream memoryStream = new MemoryStream();

            using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) {
                Bit[] bits = TestHelper.BitsFromString("01111001101");

                stream.BeginWrite();
                for (int n = 0; n < bits.Length; n++)
                {
                    stream.WriteBit(bits[n]);
                }
                stream.EndWrite();
            }
            Assert.AreEqual(new byte[] { 0x9E, 0x5 }, memoryStream.ToArray());
        }
コード例 #4
0
        private EncodingStatistics Encode(string inputPath, string outputFile, CancellationToken cancellationToken, IProgress <CodingProgressInfo> progress)
        {
            HuffmanEncoder encoder = new HuffmanEncoder();
            DirectoryEncodingInputStream directoryInputStream = new DirectoryEncodingInputStream(inputPath, fileSystemService, platform);
            FileEncodingOutputStream     outputStream         = new FileEncodingOutputStream(outputFile, platform);

            ITaskProgressController tpc = CreateTaskProgressController(progress, directoryInputStream);

            try {
                outputStream.BeginWrite();
                tpc.StartIndeterminate();
                EncodingToken encodingToken = encoder.CreateEncodingToken(directoryInputStream, cancellationToken);
                tpc.EndIndeterminate();
                streamBuilder.Initialize(platform, encodingToken, outputStream);
                streamBuilder.AddWeightsTable(new BootstrapSegment(encodingToken.WeightsTable));
                tpc.Start();
                foreach (FileSystemEntry entry in fileSystemService.EnumFileSystemEntries(inputPath))
                {
                    switch (entry.Type)
                    {
                    case FileSystemEntryType.Directory:
                        streamBuilder.AddDirectory(new DirectorySegment(entry.Name, entry.Cardinality));
                        break;

                    case FileSystemEntryType.File:
                        streamBuilder.AddFile(new FileSegment(entry.Name, entry.Path), cancellationToken, tpc);
                        break;

                    default:
                        throw new InvalidOperationException();
                    }
                }
                outputStream.EndWrite();
                tpc.Finish();
                return(new EncodingStatistics(directoryInputStream.SizeInBytes, outputStream.SizeInBytes));
            }
            catch {
                tpc.Error();
                throw;
            }
            finally {
                directoryInputStream.Dispose();
                outputStream.Dispose();
            }
        }
コード例 #5
0
        private byte[] Encode(byte[] data, out HuffmanTreeBase tree, out long streamSize)
        {
            MemoryStream             outputMemoryStream = new MemoryStream();
            FileEncodingInputStream  inputStream        = CreateFileEncodingInputStream(data);
            FileEncodingOutputStream outputStream       = CreateFileEncodingOutputStream(outputMemoryStream);

            HuffmanEncoder encoder = new HuffmanEncoder();

            try {
                outputStream.BeginWrite();
                EncodingToken token = encoder.CreateEncodingToken(inputStream, CancellationToken.None);
                streamSize = encoder.Encode(inputStream, outputStream, token, CancellationToken.None, null);
                outputStream.EndWrite();
                tree = token.HuffmanTree;
                return(outputMemoryStream.ToArray());
            }
            finally {
                inputStream.Dispose();
                outputStream.Dispose();
            }
        }
コード例 #6
0
        public void SaveRestorePositionTest2()
        {
            MemoryStream memoryStream = new MemoryStream();

            using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(memoryStream)) {
                IStreamPosition p1 = stream.SavePosition();
                WriteBitString(stream, "11111111");
                IStreamPosition p2 = stream.SavePosition();
                WriteBitString(stream, "00000000");
                IStreamPosition p3 = stream.SavePosition();
                WriteBitString(stream, "11111111");
                IStreamPosition p4 = stream.SavePosition();

                stream.RestorePosition(p2);
                WriteBitString(stream, "10010110");
                stream.RestorePosition(p1);
                WriteBitString(stream, "10011001");
                stream.RestorePosition(p4);
                WriteBitString(stream, "00000001");
                stream.RestorePosition(p3);
                WriteBitString(stream, "00001111");
                Assert.AreEqual(new byte[] { 0x99, 0x69, 0xF0, 0x80 }, memoryStream.ToArray());
            }
        }
コード例 #7
0
 public void RestorePositionGuardTest()
 {
     using (FileEncodingOutputStream stream = CreateFileEncodingOutputStream(new MemoryStream())) {
         Assert.Throws <ArgumentNullException>(() => stream.RestorePosition(null));
     }
 }