public unsafe byte[] Compress(string input) { var frequencies = _frequencyCalculator.GetFrequencies(input).ToList(); _huffmanTree.Build(frequencies); var blob = new Blob(); BuildPathCache(frequencies); var length = input.Length; fixed(char *inputPointer = input) { for (var i = 0; i < length; i++) { blob.Append(_pathCache[inputPointer[i]]); } } var data = new CompressedData { Data = blob.ToByteArray(), Frequencies = frequencies, OriginalLength = input.Length }; return(data.Save()); }
public byte[] Compress(string input) { var frequencies = _frequencyCalculator.GetFrequencies(input).ToList(); _huffmanTree.Build(frequencies); var blob = new Blob(); _pathCache = new Dictionary <char, string>(); foreach (var character in input) { _pathCache.TryGetValue(character, out var path); if (path == null) { path = _huffmanTree.GetPath(character); _pathCache.Add(character, path); blob.Append(path); } else { blob.Append(path); } } var data = new CompressedData { Data = blob.ToByteArray(), Frequencies = frequencies, OriginalLength = input.Length }; return(data.Save()); }