public void Visit(LzCompressed lz, byte data)
        {
            var start = index;

            (int runLength, int runOffset) = LZRun.ReadCompressedToken(buffer, ref start);
            Result = $"{runLength}:{runOffset}";
        }
示例#2
0
        public void Visit(LzCompressed lz, byte data)
        {
            if (!CurrentText.EndsWith(" "))
            {
                return;
            }
            var sections = CurrentText.Trim().Split(":");

            if (sections.Length != 2)
            {
                return;
            }
            if (!int.TryParse(sections[0], out int runLength))
            {
                return;
            }
            if (!int.TryParse(sections[1], out int runOffset))
            {
                return;
            }
            Result = true;
            if (runLength < 3 || runLength > 18)
            {
                ErrorText = "Run Length must be > 2 and < 19";
                return;
            }
            else if (runOffset < 1 || runOffset > 0x1000)
            {
                ErrorText = "Run Offset must be > 0 and <= 4096";
                return;
            }
            var result        = LZRun.CompressedToken((byte)runLength, (short)runOffset);
            var previousValue = Model.ReadMultiByteValue(memoryLocation, 2);

            CurrentChange.ChangeData(Model, memoryLocation, result[0]);
            CurrentChange.ChangeData(Model, memoryLocation + 1, result[1]);
            var run      = (LZRun)Model.GetNextRun(memoryLocation);
            int runIndex = memoryLocation - run.Start;

            if (!TryFixupLzRun(ref run, runIndex + 2))
            {
                Model.WriteMultiByteValue(memoryLocation, 2, CurrentChange, previousValue);
                ErrorText = $"Could not write {runLength}:{runOffset} without making the compressed data invalid.";
            }
            else
            {
                NewDataIndex = run.Start + runIndex + 2;
            }
        }
示例#3
0
        public void ValidHeaderIsRecognized()
        {
            var data = new byte[] { 0x10, 8, 0, 0, 0b000000, 0, 0, 0, 0, 0, 0, 0, 0 };

            Assert.NotEqual(-1, LZRun.IsCompressedLzData(data, 0));
        }