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."); }
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";