// 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) { cycleLength = offset = 0; ret; }
lsfr.start(seed);
cycleLength = lsfr.cycleLength();
offset = 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;
}
}