initFromSequence method
Initializes the MersenneTwisterEngine from a sequence.
Implementation
void initFromSequence(List<Int64> key) {
init(Int64(_sequenceInitialSeed));
var i = 1;
var j = 0;
for (var k = n > key.length ? n : key.length; k != 0; k -= 1) {
_state[i] =
(_state[i] ^ ((_state[i - 1] ^ (_state[i - 1] >>> (w - 2))) * f1)) +
key[j] +
Int64(j); // Non-linear.
_state[i] &= _wordMask;
i += 1;
j += 1;
if (i >= n) {
_state[0] = _state[n - 1];
i = 1;
}
if (j >= key.length) {
j = 0;
}
}
for (var k = n - 1; k != 0; k -= 1) {
_state[i] =
(_state[i] ^ ((_state[i - 1] ^ (_state[i - 1] >>> (w - 2))) * f2)) -
Int64(i); // Non-linear.
_state[i] &= _wordMask;
i += 1;
if (i >= n) {
_state[0] = _state[n - 1];
i = 1;
}
}
// MSB is 1; assuring non-zero initial array.
_state[0] = Int64.ONE << (w - 1);
}