On 8/8/2012 5:13 AM, Martin Nowak wrote:
It should accept an input range. But using an Output Range confuses me. A hash
function is a reduce algorithm - it accepts a sequence of input values, and
produces a single value. You should be able to write code like:
ubyte[] data;
...
auto crc = data.crc32();
For example, the hash example given is:
foreach (buffer; file.byChunk(4096 * 1024))
hash.put(buffer);
auto result = hash.finish();
Instead it should be something like:
auto result = file.byChunk(4096 * 1025).joiner.hash();
I think sha1Of/digest!SHA1 should do this.
It's also important to have a stateful hash implementation that can be updated
incrementally, e.g. from a callback.
Take a look at the reduce function in
http://dlang.org/phobos/std_algorithm.html#reduce
It has provision for an initial state that can be the current running total.