There are of course ways to implement a really efficient ZLW compressor in D, and such implementation could be added as third D entry if it manages to be not too much long,

Third version added:
http://rosettacode.org/wiki/LZW_compression#More_Efficient_Version

I have tried to make it idiomatic D, but some of the C style is probably still present. The D code currently still requires five casts, and I have guarded them with asserts, like:

assert(tmp >> oBits <= ubyte.max);
result[outLen] = cast(ubyte)(tmp >> oBits);

Perhaps with some more semantic knowledge of the program it's possible to avoid one or two of those casts.

The D code contains a little less "type insanity" than the original C version :-)

Bye,
bearophile

Reply via email to