public static LZNT1_Literal GenerateFromLZ77Literal(LZ77Literal literal, ref int processedBytes) { var result = new LZNT1_Literal(); result.Literal = literal.Literal; processedBytes++; return(result); }
/// <summary> /// Encode data into LZ77 symbols. /// </summary> /// <param name="data">Byte array containing data to be encoded.</param> /// <returns>Array containing LZ77 symbols.</returns> public List <LZ77Symbol> Encode(byte[] data) { var hash = new LZ77HashTable(); int i = 0; var result = new List <LZ77Symbol>(); while (i < data.Length) { LZ77Symbol symbol; int location = hash.Match(data, i); var distance = i - location; if (distance > 0 && distance <= MaximumMatchDistance) { int len = 0; int k = location; for (int j = i; j < data.Length; j++) { if (len > MaximumMatchLength) { break; } if (data[k] == data[j]) { hash.Match(data, j); k++; len++; } else { break; } } symbol = new LZ77Match() { Length = len, Distance = distance }; i += len; } else { symbol = new LZ77Literal() { Literal = data[i] }; i++; } result.Add(symbol); } var eof = new LZ77EOF(); result.Add(eof); return(result); }
public override LZ77Symbol ParseToLZ77Symbol(ref int processedBytes) { var result = new LZ77Literal() { Literal = Literal }; processedBytes++; return(result); }