module chunker.example;

import std.stdio : File, writefln;
import std.digest.sha : sha256Of;

import chunker;
import chunker.polynomials;
import chunker.internal.helpers : getRandom;

void main()
{
	// generate 32MiB of deterministic pseudo-random data
	auto data = getRandom(23, 32*1024*1024);
	File("temp.bin", "wb").rawWrite(data);

	// reuse this buffer
	auto buf = new ubyte[8*1024*1024];

	// create a chunker
	auto chunker = File("temp.bin", "rb")
		.byChunk(512 * 1024)
		.byCDChunk(Pol(0x3DA3358B4DC173), buf);

	foreach (i; 0 .. 5)
	{
		if (chunker.empty)
			break;
		auto chunk = chunker.front;

		writefln!"%d %(%02x%)"(chunk.data.length, sha256Of(chunk.data));
		chunker.popFront();
	}

	// Output:
	// 2163460 4b94cb2cf293855ea43bf766731c74969b91aa6bf3c078719aabdd19860d590d
	// 643703 5727a63c0964f365ab8ed2ccf604912f2ea7be29759a2b53ede4d6841e397407
	// 1528956 a73759636a1e7a2758767791c69e81b69fb49236c6929e5d1b654e06e37674ba
	// 1955808 c955fb059409b25f07e5ae09defbbc2aadf117c97a3724e06ad4abd2787e6824
	// 2222372 6ba5e9f7e1b310722be3627716cf469be941f7f3e39a4c3bcefea492ec31ee56
}