// Allows to vary the order by supplying a seed // // We add the seed to every LSFR value generated, and also start // the LSFR with the seed. sclass WeightlessShuffledIteratorWithSeed extends WeightlessShuffledIterator { final int cycleLength, offset; *(L list) { this(list, 0); } *(L list, int seed) { super(list); if (lsfr == null) ret with cycleLength = 0; lsfr.start(seed); cycleLength = lsfr.cycleLength(); this.seed = lsfr.value-1; printVars ifdef WeightlessShuffledIterator_debug(+seed, +cycleLength, +offset, start := lsfr.value); } int postProcessLSFRValue(int i) { i += offset; ret i >= cycleLength ? i-cycleLength : i; } }