salzweg

Crates.iosalzweg
lib.rssalzweg
version0.1.4
sourcesrc
created_at2022-06-07 15:04:07.182611
updated_at2022-10-25 14:33:22.500754
descriptionA LZW encoder and decoder, fast and memory efficient
homepage
repositoryhttps://github.com/redwarp/lzw
max_upload_size
id601530
size104,177
BenoƮt Vermont (redwarp)

documentation

README

Docs Crates.io Crates.io

salzweg

Salzweg is a LZW encoder and decoder. It supports the GIF flavored, TIFF flavored and fixed code flavors of LZW.

LZW is a universal lossless data compression algorithm.

The aim of this library is to be memory efficient, and fast.

  • The decoder lives only on the stack, and will be friendly with machines with low memory.
  • The encoder builds on the heap though, as it creates a growing tree of possible encoded words as the compression progresses.

Speed

First, a few formulas

  • Compressing speed = uncompressed bytes/seconds to compress.
  • Decompressing speed = uncompressed bytes/seconds to decompress.

Results

Using criterion on a AMD Ryzen 7 2700X Eight-Core Processor 3.70 GHz CPU , I observed the following throughput when processing data:

Variable encoder Fix 12 bit size
Compressing image data 70 MiB/s 120 MiB/s
Decompressing image data 200 MiB/s 210 MiB/s
Compressing lorem ipsum text 70 MiB/s 85 MiB/s
Decompressing lorem ipsum text 200 MiB/s 220 MiB/s

These timings are rounded, indicative more than 100% accurate. But they are consistently faster than the LZW and Weezl crate for encoding, and consistently faster than the Weezl crate for decoding (I did not try to decode with LZW, as the comparison is difficult due to API design).

Sources

License

Code is licensed under MIT.

Commit count: 82

cargo fmt