Example #1
0
        public void TryToFillSearchBufferBasedOnLz77Token(Lz77Buffer lz77Buffer, Lz77Token lz77Token)
        {
            if (lz77Buffer == null)
            {
                throw new ArgumentNullException(nameof(lz77Buffer));
            }

            if (lz77Token == null)
            {
                throw new ArgumentNullException(nameof(lz77Token));
            }

            for (int index = 0; index < lz77Token.Length + 1; index++)
            {
                if (index > lz77Buffer.LookAheadBuffer.Count - 1)
                {
                    break;
                }

                if (lz77Buffer.SearchBuffer.Count >= lz77Buffer.SearchBuffer.Capacity)
                {
                    lz77Buffer.SearchBuffer.RemoveAt(0);
                }

                lz77Buffer.SearchBuffer.Add(lz77Buffer.LookAheadBuffer[index]);
            }
        }
Example #2
0
        private void InitializeLz77TokenExtractorMock()
        {
            lz77TokenReturnedByLz77TokenExtractor = new Lz77Token();

            lz77TokenExtractorMock
            .Setup(x => x.GetLz77TokenFromLz77Buffer(lz77Encoder.Lz77Buffer))
            .Returns(lz77TokenReturnedByLz77TokenExtractor);
        }
 public void Setup()
 {
     lz77TokenWriter = new Lz77TokenWriter();
     lz77Token       = new Lz77Token {
         Position = 4, Length = 5, Byte = 31
     };
     fileWriterMock = new Mock <IFileWriter>();
 }
        public void Setup()
        {
            lz77BufferManager = new Lz77BufferManager();
            lz77Buffer        = Constants.GetLz77Buffer1();
            lz77Token         = Constants.ExpectedTokenForLz77Buffer1();
            fileReaderMock    = new Mock <IFileReader>();

            SetupFileReaderMock();
        }
Example #5
0
        public void WriteToken(Lz77Token lz77Token, IFileWriter fileWriter, int bitsForOffset, int bitsForLength)
        {
            if (lz77Token == null)
            {
                throw new ArgumentNullException(nameof(lz77Token));
            }

            if (fileWriter == null)
            {
                throw new ArgumentNullException(nameof(fileWriter));
            }

            fileWriter.WriteValueOnBits((uint)lz77Token.Position, (byte)bitsForOffset);
            fileWriter.WriteValueOnBits((uint)lz77Token.Length, (byte)bitsForLength);
            fileWriter.WriteValueOnBits(lz77Token.Byte, 8);
        }
Example #6
0
        private List <byte> GetBytesFromBufferBasedOnToken(List <byte> buffer, Lz77Token lz77Token)
        {
            var bytes = new List <byte>();

            var position = buffer.Count - 1 - lz77Token.Position;

            position = position < 0 ? 0 : position;

            for (int i = 0; i < lz77Token.Length; i++)
            {
                bytes.Add(buffer[position]);
                position++;
            }


            return(bytes);
        }
Example #7
0
        public void EmptyLookAheadBufferBasedOnLz77Token(Lz77Buffer lz77Buffer, Lz77Token lz77Token)
        {
            if (lz77Buffer == null)
            {
                throw new ArgumentNullException(nameof(lz77Buffer));
            }

            if (lz77Token == null)
            {
                throw new ArgumentNullException(nameof(lz77Token));
            }

            var bytesToRemove = lz77Token.Length + 1;

            while (bytesToRemove > 0 && lz77Buffer.LookAheadBuffer.Count > 0)
            {
                lz77Buffer.LookAheadBuffer.RemoveAt(0);
                bytesToRemove--;
            }
        }
Example #8
0
        public void DecodeFile(IFileReader fileReader, IFileWriter fileWriter)
        {
            TokensFromPreviousRun.Clear();

            var bitsForOffset = (byte)fileReader.ReadBits(4);
            var bitsForLength = (byte)fileReader.ReadBits(3);

            var bytesBuffer = new List <byte> {
                Capacity = (int)Math.Pow(2, bitsForOffset) - 1
            };
            var tokenLengthInBits = bitsForOffset + bitsForLength + 8;

            while (!fileReader.ReachedEndOfFile && fileReader.BitsLeft >= tokenLengthInBits)
            {
                var position = (int)fileReader.ReadBits(bitsForOffset);
                var length   = (int)fileReader.ReadBits(bitsForLength);
                var byteRead = (byte)fileReader.ReadBits(8);

                var lz77Token = new Lz77Token
                {
                    Position = position,
                    Length   = length,
                    Byte     = byteRead
                };
                TokensFromPreviousRun.Add(lz77Token);

                var bytes = GetBytesFromBufferBasedOnToken(bytesBuffer, lz77Token);
                foreach (var b in bytes)
                {
                    AddByteAndPrintIfBufferIsFull(bytesBuffer, b, fileWriter);
                }

                AddByteAndPrintIfBufferIsFull(bytesBuffer, lz77Token.Byte, fileWriter);
            }

            foreach (var byteLeft in bytesBuffer)
            {
                fileWriter.WriteValueOnBits(byteLeft, 8);
            }
        }