示例#1
0
 public void Visit(LzMagicIdentifier lz, byte data)
 {
     if (CurrentText.ToLower() == "lz")
     {
         Result       = true;
         NewDataIndex = memoryLocation + 1;
     }
 }
 public void Visit(LzMagicIdentifier lz, byte data)
 {
     Content.Add("This byte marks the start of an LZ compressed data section.");
     Content.Add("After the identifier byte and the length, compressed data consists of 3 types of tokens:");
     Content.Add("(1) a 1 byte section header, telling you which of the next 8 tokens are compressed.");
     Content.Add("(2) A raw uncompressed byte.");
     Content.Add("(3) A 2-byte token representing anywhere from 3 to 18 compressed bytes.");
 }
示例#3
0
        private void UpdateCache(IDisposable scope, IReadOnlyList <byte> data)
        {
            previousScope = scope;
            cache         = new IDataFormat[Length];
            int start      = Start;
            var cacheIndex = 4;

            var decompressedLength = ReadHeader(data, ref start);

            cache[0] = new LzMagicIdentifier(Start);
            cache[1] = new Integer(Start + 1, 0, decompressedLength, 3);
            cache[2] = new Integer(Start + 1, 1, decompressedLength, 3);
            cache[3] = new Integer(Start + 1, 2, decompressedLength, 3);

            while (cacheIndex < cache.Length)
            {
                cache[cacheIndex] = new LzGroupHeader(start);
                var bitfield = data[start];
                cacheIndex++;
                start++;
                for (int i = 0; i < 8 && cacheIndex < cache.Length; i++)
                {
                    if (IsNextTokenCompressed(ref bitfield))
                    {
                        if (cacheIndex + 2 > cache.Length)
                        {
                            cache[cacheIndex] = new LzUncompressed(start);
                            cacheIndex++;
                        }
                        else
                        {
                            var(runLength, runOffset) = ReadCompressedToken(data, ref start);
                            cache[cacheIndex + 0]     = new LzCompressed(start - 2, 0, runLength, runOffset);
                            cache[cacheIndex + 1]     = new LzCompressed(start - 2, 1, runLength, runOffset);
                            cacheIndex += 2;
                        }
                    }
                    else
                    {
                        cache[cacheIndex] = new LzUncompressed(start);
                        cacheIndex++;
                        start++;
                    }
                }
            }
        }
 public void Visit(LzMagicIdentifier lz, byte data) => Visit((None)null, data);
 public void Visit(LzMagicIdentifier lz, byte data) => Result = "lz";