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]); } }
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(); }
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); }
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); }
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--; } }
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); } }