/** * Helper routines * * Authors: Tristan Brice Velloza Kildaire (deavmi) */ module qix.utils; import std.random : rndGen, Random; // thread-local random number generator // // (each thread will have its own seed) private Random r_tls; static this() { r_tls = rndGen(); } /** * Generates a random number * within the `size_t` range. * * This uses a random number * generator that is unique * to the calling thread (TLS). * * Returns: a random number */ package size_t rand() { alias r = r_tls; size_t n = r.front(); r.popFront(); return n; } version(unittest) { import gogga.mixins; } unittest { DEBUG("random: ", rand()); DEBUG("random: ", rand()); DEBUG("random: ", rand()); DEBUG("random: ", rand()); }